20#include "BDSException.hh"
21#include "BDSGlobalConstants.hh"
22#include "BDSIonDefinition.hh"
23#include "BDSModularPhysicsList.hh"
24#include "BDSParticleDefinition.hh"
25#include "BDSPhysicalConstants.hh"
26#include "BDSPhysicsAnnihiToMuMu.hh"
27#include "BDSPhysicsCherenkov.hh"
28#include "BDSPhysicsCutsAndLimits.hh"
29#include "BDSPhysicsEMDissociation.hh"
30#include "BDSPhysicsGammaToMuMu.hh"
31#include "BDSPhysicsIonisation.hh"
32#include "BDSPhysicsLaserWire.hh"
33#include "BDSPhysicsMuon.hh"
34#include "BDSPhysicsMuonInelastic.hh"
35#include "BDSPhysicsSynchRad.hh"
36#include "BDSPhysicsUtilities.hh"
37#include "BDSUtilities.hh"
38#include "BDSPhysicsLaserPhotoDetachment.hh"
39#include "BDSPhysicsLaserIonExcitation.hh"
40#include "BDSPhysicsLaserComptonScattering.hh"
41#include "BDSPhysicsLaserCumulativePhotodetachment.hh"
42#include "BDSPhysicsLaserCumulativeCompton.hh"
43#include "BDSPhysicsLaserWire.hh"
44#include "BDSPhysicsMuon.hh"
45#include "BDSPhysicsSynchRad.hh"
46#include "BDSPhysicsUtilities.hh"
47#include "BDSUtilities.hh"
49#include "parser/fastlist.h"
50#include "parser/physicsbiasing.h"
54#include "G4GenericBiasingPhysics.hh"
55#include "G4ParticleTable.hh"
56#include "G4ProcessManager.hh"
57#include "G4ProcessVector.hh"
59#include "G4Version.hh"
62#include "G4ChargeExchangePhysics.hh"
63#include "G4DecayPhysics.hh"
64#include "G4EmExtraPhysics.hh"
65#include "G4EmLivermorePhysics.hh"
66#include "G4EmLivermorePolarizedPhysics.hh"
67#include "G4EmLowEPPhysics.hh"
68#include "G4EmPenelopePhysics.hh"
69#include "G4EmStandardPhysics.hh"
70#include "G4EmStandardPhysicsSS.hh"
71#include "G4EmStandardPhysicsWVI.hh"
72#include "G4EmStandardPhysics_option1.hh"
73#include "G4EmStandardPhysics_option2.hh"
74#include "G4EmStandardPhysics_option3.hh"
75#include "G4EmStandardPhysics_option4.hh"
76#include "G4HadronDElasticPhysics.hh"
77#include "G4HadronElasticPhysics.hh"
78#include "G4HadronElasticPhysicsHP.hh"
79#include "G4HadronElasticPhysicsLEND.hh"
80#include "G4HadronElasticPhysicsXS.hh"
81#include "G4HadronHElasticPhysics.hh"
82#include "G4HadronPhysicsFTFP_BERT.hh"
83#include "G4HadronPhysicsFTFP_BERT_HP.hh"
84#include "G4HadronPhysicsFTF_BIC.hh"
85#include "G4HadronPhysicsQGSP_BERT.hh"
86#include "G4HadronPhysicsQGSP_BERT_HP.hh"
87#include "G4HadronPhysicsQGSP_BIC.hh"
88#include "G4HadronPhysicsQGSP_BIC_HP.hh"
89#include "G4HadronPhysicsShielding.hh"
90#include "G4IonBinaryCascadePhysics.hh"
91#include "G4IonElasticPhysics.hh"
92#include "G4IonINCLXXPhysics.hh"
93#include "G4IonPhysics.hh"
94#include "G4IonQMDPhysics.hh"
95#include "G4NeutronTrackingCut.hh"
96#include "G4OpticalPhysics.hh"
97#include "G4RadioactiveDecayPhysics.hh"
98#include "G4StoppingPhysics.hh"
99#include "G4SynchrotronRadiation.hh"
102#if G4VERSION_NUMBER > 1009
103#include "G4HadronElasticPhysicsPHP.hh"
106#if G4VERSION_NUMBER > 1019
107#include "G4EmStandardPhysicsGS.hh"
108#include "G4EmDNAChemistry.hh"
111#if G4VERSION_NUMBER > 1020
112#include "G4SpinDecayPhysics.hh"
115#if G4VERSION_NUMBER > 1022
116#include "G4IonPhysicsPHP.hh"
119#if G4VERSION_NUMBER > 1029
120#include "G4MuonicAtomDecayPhysics.hh"
123#if G4VERSION_NUMBER > 1039
124#include "BDSPhysicsChannelling.hh"
125#include "BDSPhysicsRadioactivation.hh"
126#include "G4EmDNAPhysics.hh"
127#include "G4EmDNAPhysics_option1.hh"
128#include "G4EmDNAPhysics_option2.hh"
129#include "G4EmDNAPhysics_option3.hh"
130#include "G4EmDNAPhysics_option4.hh"
131#include "G4EmDNAPhysics_option5.hh"
132#include "G4EmDNAPhysics_option6.hh"
133#include "G4EmDNAPhysics_option7.hh"
134#include "G4HadronPhysicsShieldingLEND.hh"
137#if G4VERSION_NUMBER < 1070
138#include "G4OpticalProcessIndex.hh"
140#include "G4OpticalParameters.hh"
143#if G4VERSION_NUMBER > 1069
144#include "G4EmDNAChemistry_option1.hh"
145#include "G4EmDNAChemistry_option2.hh"
146#include "G4EmDNAChemistry_option3.hh"
149#if G4VERSION_NUMBER > 1119
150#include "BDSPhysicsXrayReflection.hh"
154#include "G4AntiNeutrinoE.hh"
155#include "G4AntiNeutron.hh"
156#include "G4AntiProton.hh"
157#include "G4BaryonConstructor.hh"
158#include "G4Electron.hh"
160#include "G4IonConstructor.hh"
161#include "G4LeptonConstructor.hh"
162#include "G4MesonConstructor.hh"
163#include "G4NeutrinoE.hh"
164#include "G4Neutron.hh"
165#include "G4Positron.hh"
166#include "G4Proton.hh"
167#include "G4ShortLivedConstructor.hh"
179BDSModularPhysicsList::BDSModularPhysicsList(
const G4String& physicsList):
180 constructedAllLeptons(false),
181 constructedAllShortLived(false),
182 constructedAllMesons(false),
183 constructedAllBaryons(false),
184 constructedAllIons(false),
186 opticalPhysics(nullptr),
189 particlesConstructed(false)
248#if G4VERSION_NUMBER > 1019
252#if G4VERSION_NUMBER > 1020
255#if G4VERSION_NUMBER > 1022
258#if G4VERSION_NUMBER > 1029
261#if G4VERSION_NUMBER > 1039
274#if G4VERSION_NUMBER > 1069
279#if G4VERSION_NUMBER > 1119
284 aliasToOriginal[
"cerenkov"] =
"cherenkov";
285 aliasToOriginal[
"cutsandlimits"] =
"cuts_and_limits";
286 aliasToOriginal[
"em_low"] =
"em_penelope";
287 aliasToOriginal[
"hadronic"] =
"ftfp_bert";
288 aliasToOriginal[
"hadronic_hp"] =
"ftfp_bert_hp";
289 aliasToOriginal[
"ionbinary"] =
"ion_binary";
290 aliasToOriginal[
"ioninclxx"] =
"ion_inclxx";
291 aliasToOriginal[
"ionphp"] =
"ion_php";
292 aliasToOriginal[
"spindecay"] =
"decay_spin";
293 aliasToOriginal[
"synchrad"] =
"synch_rad";
294#if G4VERSION_NUMBER > 1039
295 aliasToOriginal[
"channeling"] =
"channelling";
299 for (
const auto& constructor : physicsConstructors)
301 physicsLists.emplace_back(constructor.first);
302 physicsActivated[constructor.first] =
false;
307 for (
const auto& kv : physicsConstructors)
308 {incompatible.insert(std::make_pair(kv.first, std::vector<G4String>()));}
309 incompatible[
"annihi_to_mumu"] = {
"em_extra"};
310 incompatible[
"muon"] = {
"em_extra"};
311 incompatible[
"muon_inelastic"] = {
"em_extra",
"muon"};
312 incompatible[
"dna"] = {
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
313 incompatible[
"dna_1"] = {
"dna",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
314 incompatible[
"dna_2"] = {
"dna_1",
"dna",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
315 incompatible[
"dna_3"] = {
"dna_1",
"dna_2",
"dna",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
316 incompatible[
"dna_4"] = {
"dna_1",
"dna_2",
"dna_3",
"dna",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
317 incompatible[
"dna_5"] = {
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
318 incompatible[
"dna_6"] = {
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna",
"dna_7",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
319 incompatible[
"dna_7"] = {
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna",
"dna_chemistry",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
320 incompatible[
"dna_chemistry"] = {
"dna",
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry_3"};
321 incompatible[
"dna_chemistry_1"] = {
"dna",
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry",
"dna_chemistry_2",
"dna_chemistry_3"};
322 incompatible[
"dna_chemistry_2"] = {
"dna",
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry_1",
"dna_chemistry",
"dna_chemistry_3"};
323 incompatible[
"dna_chemistry_3"] = {
"dna",
"dna_1",
"dna_2",
"dna_3",
"dna_4",
"dna_5",
"dna_6",
"dna_7",
"dna_chemistry_1",
"dna_chemistry_2",
"dna_chemistry"};
324 incompatible[
"em"] = {
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
325 incompatible[
"em_ss"] = {
"em",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
326 incompatible[
"em_wvi"] = {
"em",
"em_ss",
"em_1",
"em_2",
"em_3",
"em_4"};
327 incompatible[
"em_1"] = {
"em",
"em_ss",
"em_wvi",
"em_2",
"em_3",
"em_4"};
328 incompatible[
"em_2"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_3",
"em_4"};
329 incompatible[
"em_3"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_4"};
330 incompatible[
"em_4"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3"};
331 incompatible[
"em_livermore"] = {
"em_livermore_polarised"};
332 incompatible[
"em_extra"] = {
"muon",
"muon_inelastic"};
333 incompatible[
"ftfp_bert"] = {
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
334 incompatible[
"ftfp_bert_hp"] = {
"ftfp_bert",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
335 incompatible[
"ftf_bic"] = {
"ftfp_bert",
"ftfp_bert_hp",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
336 incompatible[
"gamma_to_mumu"] = {
"em_extra"};
337 incompatible[
"hadronic_elastic"] = {
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
338 incompatible[
"hadronic_elastic_d"] = {
"hadronic_elastic",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
339 incompatible[
"hadronic_elastic_h"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
340 incompatible[
"hadronic_elastic_hp"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
341 incompatible[
"hadronic_elastic_lend"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_xs"};
342 incompatible[
"hadronic_elastic_xs"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend"};
343 incompatible[
"ion_elastic"] = {
"ion_elastic_qmd"};
344 incompatible[
"ionisation"] = {
"em",
"em_ss",
"em_1",
"em_2",
"em_3",
"em_4",
"em_livermore"};
345 incompatible[
"qgsp_bert"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
346 incompatible[
"qgsp_bert_hp"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bic",
"qgsp_bic_hp"};
347 incompatible[
"qgsp_bic"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic_hp"};
348 incompatible[
"qgsp_bic_hp"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic"};
350#if G4VERSION_NUMBER > 1019
351 for (
const auto& name : {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"})
352 {incompatible[name].emplace_back(
"em_gs");}
353 incompatible[
"em_gs"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
355#if G4VERSION_NUMBER > 1020
356 incompatible[
"decay"].emplace_back(
"decay_spin");
357 incompatible[
"decay_spin"] = {
"decay"};
359#if G4VERSION_NUMBER > 1039
360 incompatible[
"shielding"].emplace_back(
"shielding_lend");
361 incompatible[
"shielding_lend"] = {
"shielding"};
364 ParsePhysicsList(physicsList);
368 for (
auto physics : constructors)
369 {RegisterPhysics(physics);}
374 if (globals->Verbose())
379BDSModularPhysicsList::~BDSModularPhysicsList()
384 if (particlesConstructed)
387 G4VModularPhysicsList::ConstructParticle();
388 particlesConstructed =
true;
393 G4VModularPhysicsList::ConstructProcess();
394 DumpCutValuesTable(100);
401 G4String result = (physics.second ?
"active" :
"inactive");
402 G4cout << std::setw(27) << (
"\"" + physics.first +
"\": ") << result << G4endl;
409 G4cout << __METHOD_NAME__ <<
"Physics list string: \"" << physListName <<
"\"" << G4endl;
413 std::stringstream ss(physListName);
414 std::istream_iterator<std::string> begin(ss);
415 std::istream_iterator<std::string> end;
416 std::vector<std::string> physicsListNamesS(begin, end);
419 std::vector<G4String> physicsListNames;
420 for (
const auto& physicsListName : physicsListNamesS)
422 G4String name = G4String(physicsListName);
430 G4cout << __METHOD_NAME__ <<
"alias \"" << name <<
"\" forwarding to \""
431 << result->second <<
"\"" << G4endl;
432 name = result->second;
434 physicsListNames.push_back(name);
438 if (std::find(physicsListNames.begin(), physicsListNames.end(),
"em") != physicsListNames.end())
441 for (
const auto& name : physicsListNames)
446 G4cout << __METHOD_NAME__ <<
"Constructing \"" << result->first <<
"\" physics list" << G4endl;
448 auto mem = result->second;
453 G4cout <<
"\"" << name <<
"\" is not a valid physics list. Available ones are: " << G4endl;
455 {G4cout <<
"\"" << listName <<
"\"" << G4endl;}
456 throw BDSException(__METHOD_NAME__,
"Invalid physics list.");
468 G4LeptonConstructor::ConstructParticle();
476 G4ShortLivedConstructor::ConstructParticle();
484 G4MesonConstructor::ConstructParticle();
492 G4BaryonConstructor::ConstructParticle();
501 G4GenericIon::GenericIonDefinition();
502 G4IonConstructor::ConstructParticle();
514 G4long maxPhotonsPerStep =
globals->MaximumPhotonsPerStep();
515#if G4VERSION_NUMBER < 1079
517 opticalPhysics->Configure(G4OpticalProcessIndex::kCerenkov,
true);
518 opticalPhysics->Configure(G4OpticalProcessIndex::kScintillation,
true);
519 opticalPhysics->Configure(G4OpticalProcessIndex::kAbsorption,
globals->TurnOnOpticalAbsorption());
520 opticalPhysics->Configure(G4OpticalProcessIndex::kRayleigh,
globals->TurnOnRayleighScattering());
521 opticalPhysics->Configure(G4OpticalProcessIndex::kMieHG,
globals->TurnOnMieScattering());
522 opticalPhysics->Configure(G4OpticalProcessIndex::kBoundary,
globals->TurnOnOpticalSurface());
523 opticalPhysics->Configure(G4OpticalProcessIndex::kWLS,
true);
524 opticalPhysics->SetScintillationYieldFactor(
globals->ScintYieldFactor());
525 if (maxPhotonsPerStep >= 0)
526 {opticalPhysics->SetMaxNumPhotonsPerStep(maxPhotonsPerStep);}
528 G4OpticalParameters* opticalParameters = G4OpticalParameters::Instance();
529 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kCerenkov),
true);
530 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kScintillation),
true);
531 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kAbsorption),
globals->TurnOnOpticalAbsorption());
532 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kRayleigh),
globals->TurnOnRayleighScattering());
533 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kMieHG),
globals->TurnOnMieScattering());
534 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kBoundary),
globals->TurnOnOpticalSurface());
535 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kWLS),
true);
536 if (maxPhotonsPerStep >= 0)
537 {opticalParameters->SetCerenkovMaxPhotonsPerStep((G4int)maxPhotonsPerStep);}
544 const std::vector<G4String>& forbidden =
incompatible.at(singlePhysicsIn);
546 for (
const auto& key : forbidden)
550 G4cerr << __METHOD_NAME__ <<
"Incompatible physics list \"" << singlePhysicsIn
551 <<
"\" being used with already used \"" << key <<
"\"" << G4endl;
552 G4cout <<
"\"" << singlePhysicsIn <<
"\" cannot be used with the following:" << G4endl;
553 for (
const auto& v : forbidden)
554 {G4cout <<
"\"" << v <<
"\"" << G4endl;}
555 throw BDSException(__METHOD_NAME__,
"Incompatible physics list.");
583 constructors.push_back(
new G4ChargeExchangePhysics());
613 constructors.push_back(
new G4DecayPhysics());
622 constructors.push_back(
new G4RadioactiveDecayPhysics());
632 constructors.push_back(
new G4EmStandardPhysics());
650 auto constructor =
new G4EmExtraPhysics();
651#if G4VERSION_NUMBER > 1019
653 constructor->MuonNuclear(useMuonNuclear);
654 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> muon nuclear processes : " << BDS::BoolToString(useMuonNuclear) << G4endl;
656#if G4VERSION_NUMBER > 1029
658 constructor->GammaToMuMu(useGammaToMuMu);
659 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> gamma to mu mu : " << BDS::BoolToString(useGammaToMuMu) << G4endl;
661 constructor->PositronToMuMu(usePositronToMuMu);
662 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> e+ to mu mu : " << BDS::BoolToString(usePositronToMuMu) << G4endl;
664 constructor->PositronToHadrons(usePositronToHadrons);
665 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> e+ to hadrons : " << BDS::BoolToString(usePositronToHadrons) << G4endl;
667#if G4VERSION_NUMBER > 1039
669 if (useLENDGammaNuclear)
672 constructor->LENDGammaNuclear(
true);
673 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> LEND gamma nuclear : " << BDS::BoolToString(useMuonNuclear) << G4endl;
676 constructor->ElectroNuclear(useElectroNuclear);
678 constructors.push_back(constructor);
688 constructors.push_back(
new G4EmLivermorePhysics());
698 constructors.push_back(
new G4EmLivermorePolarizedPhysics());
708 constructors.push_back(
new G4EmLowEPPhysics());
718 constructors.push_back(
new G4EmPenelopePhysics());
728 constructors.push_back(
new G4EmStandardPhysicsSS());
738 constructors.push_back(
new G4EmStandardPhysicsWVI());
748 constructors.push_back(
new G4EmStandardPhysics_option1());
758 constructors.push_back(
new G4EmStandardPhysics_option2());
768 constructors.push_back(
new G4EmStandardPhysics_option3());
778 constructors.push_back(
new G4EmStandardPhysics_option4());
789 constructors.push_back(
new G4HadronPhysicsFTFP_BERT());
800 constructors.push_back(
new G4HadronPhysicsFTFP_BERT_HP());
810 constructors.push_back(
new G4HadronPhysicsFTF_BIC());
829 constructors.push_back(
new G4HadronElasticPhysics());
839 constructors.push_back(
new G4HadronDElasticPhysics());
849 constructors.push_back(
new G4HadronHElasticPhysics());
859 constructors.push_back(
new G4HadronElasticPhysicsHP());
870 constructors.push_back(
new G4HadronElasticPhysicsLEND());
880 constructors.push_back(
new G4HadronElasticPhysicsXS());
895 constructors.push_back(
new G4IonPhysics());
911 constructors.push_back(
new G4IonBinaryCascadePhysics());
927 constructors.push_back(
new G4IonElasticPhysics());
943 constructors.push_back(
new G4IonQMDPhysics());
973 constructors.push_back(
new G4IonINCLXXPhysics());
1063 auto ntc =
new G4NeutronTrackingCut();
1066 G4cout << __METHOD_NAME__ <<
"Neutron time limit: " << timeLimit / CLHEP::s <<
" s" << G4endl;
1067 G4cout << __METHOD_NAME__ <<
"Neutron kinetic energy limit: " << eKinLimit / CLHEP::MeV << G4endl;
1068 ntc->SetTimeLimit(timeLimit);
1069 ntc->SetKineticEnergyLimit(eKinLimit);
1070 constructors.push_back(ntc);
1079 opticalPhysics =
new G4OpticalPhysics();
1080 constructors.push_back(opticalPhysics);
1090 constructors.push_back(
new G4HadronPhysicsQGSP_BERT());
1100 constructors.push_back(
new G4HadronPhysicsQGSP_BERT_HP());
1110 constructors.push_back(
new G4HadronPhysicsQGSP_BIC());
1120 constructors.push_back(
new G4HadronPhysicsQGSP_BIC_HP());
1127#if G4VERSION_NUMBER > 1059
1132 constructors.push_back(
new G4HadronPhysicsShielding());
1143 constructors.push_back(
new G4StoppingPhysics());
1158#if G4VERSION_NUMBER > 1019
1164 constructors.push_back(
new G4EmStandardPhysicsGS());
1175 {constructors.push_back(
new G4EmDNAChemistry());}
1176#if G4VERSION_NUMBER > 1069
1178 {constructors.push_back(
new G4EmDNAChemistry_option1());}
1180 {constructors.push_back(
new G4EmDNAChemistry_option2());}
1182 {constructors.push_back(
new G4EmDNAChemistry_option3());}
1189#if G4VERSION_NUMBER > 1020
1194 constructors.push_back(
new G4SpinDecayPhysics());
1200#if G4VERSION_NUMBER > 1022
1212 constructors.push_back(
new G4IonPhysicsPHP());
1218#if G4VERSION_NUMBER > 1029
1224#if G4VERSION_NUMBER > 1059
1229 constructors.push_back(
new G4MuonicAtomDecayPhysics());
1235#if G4VERSION_NUMBER > 1039
1241 {constructors.push_back(
new G4EmDNAPhysics());}
1243 {constructors.push_back(
new G4EmDNAPhysics_option1());}
1245 {constructors.push_back(
new G4EmDNAPhysics_option2());}
1247 {constructors.push_back(
new G4EmDNAPhysics_option3());}
1249 {constructors.push_back(
new G4EmDNAPhysics_option4());}
1251 {constructors.push_back(
new G4EmDNAPhysics_option5());}
1253 {constructors.push_back(
new G4EmDNAPhysics_option6());}
1255 {constructors.push_back(
new G4EmDNAPhysics_option7());}
1265 G4GenericBiasingPhysics* biasingPhysics =
new G4GenericBiasingPhysics();
1266 biasingPhysics->PhysicsBiasAllCharged();
1267 RegisterPhysics(biasingPhysics);
1287 constructors.push_back(
new G4HadronPhysicsShieldingLEND());
1293#if G4VERSION_NUMBER > 1119
General exception with possible name of object and message.
static BDSGlobalConstants * Instance()
Access method.
void ConstructAllShortLived()
Construct resonances and quarks - sometimes required explicitly.
void ShieldingLEND()
Physics constructor loader.
void MuonInelastic()
Physics constructor loader.
G4bool constructedAllBaryons
Cached flag to avoid repeated construction.
void Em1()
Physics constructor loader.
void EmLivermorePolarised()
Physics constructor loader.
void Optical()
Physics constructor loader.
void HadronicElasticHP()
Physics constructor loader.
void Em2()
Physics constructor loader.
void IonBinary()
Physics constructor loader.
void ConstructAllIons()
Construct ions.
void HadronicElasticXS()
Physics constructor loader.
void IonINCLXX()
Physics constructor loader.
void LaserComptonScattering()
Physics constructor loader.
void ParsePhysicsList(const G4String &physListName)
Interpret the string of physics lists given from the user through the parser.
void Em3()
Physics constructor loader.
void Stopping()
Physics constructor loader.
virtual void ConstructParticle()
void LaserWire()
Physics constructor loader.
void EmLowEP()
Physics constructor loader.
G4bool constructedAllIons
Cached flag to avoid repeated construction.
void EmWVI()
Physics constructor loader.
void DNAChemistry()
Physics constructor loader.
BDSGlobalConstants * globals
Keep a local reference to global constants to avoid getting it all the time.
G4bool usingIons
Flag telling whether ions are being used either in physics list or in beam particle.
void CheckIncompatiblePhysics(const G4String &singlePhysicsIn) const
void Ion()
Physics constructor loader.
void Cherenkov()
Physics constructor loader.
void ChargeExchange()
Physics constructor loader.
std::map< G4String, std::vector< G4String > > incompatible
Map of incompatible physics lists by our name for each individual list.
void DecayMuonicAtom()
Physics constructor loader.
void DecayRadioactive()
Physics constructor loader.
void DNA()
Physics constructor loader.
void HadronicElasticH()
Physics constructor loader.
G4String temporaryName
Temporary string used to pass name to constructor functions.
void IonEMDissociation()
Physics constructor loader.
std::map< G4String, G4bool > physicsActivated
void Em4()
Physics constructor loader.
void EmExtra()
Physics constructor loader.
void HadronicElasticLEND()
Physics constructor loader.
void Radioactivation()
Physics constructor loader.
void QGSPBICHP()
Physics constructor loader.
void IonElastic()
Physics constructor loader.
void Muon()
Physics constructor loader.
void LaserPhotoDetachment()
Physics constructor loader.
void NeutronTrackingCut()
Physics constructor loader.
void Ionisation()
Physics constructor loader.
void LaserCumulativePhotoDetachment()
Physics constructor loader.
void ConstructAllBaryons()
Construct baryons.
void QGSPBERTHP()
Physics constructor loader.
void IonPHP()
Physics constructor loader.
G4bool constructedAllLeptons
Cached flag to avoid repeated construction.
void Decay()
Physics constructor loader.
void FTFBIC()
Physics constructor loader.
void EmSS()
Physics constructor loader.
void FTFPBERT()
Physics constructor loader.
void XrayReflection()
Physics constructor loader.
void AnnihiToMuMu()
Physics constructor loader.
void QGSPBIC()
Physics constructor loader.
void LaserIonExcitation()
Physics constructor loader.
void GammaToMuMu()
Physics constructor loader.
void CutsAndLimits()
Physics constructor loader.
void Em()
Physics constructor loader.
void EmPenelope()
Physics constructor loader.
void HadronicElastic()
Physics constructor loader.
G4bool emWillBeUsed
Flag as to whether em will be used - avoids duplicate processes being registered.
void HadronicElasticD()
Physics constructor loader.
G4bool constructedAllShortLived
Cached flag to avoid repeated construction.
void DecaySpin()
Physics constructor loader.
void FTFPBERTHP()
Physics constructor loader.
void EmLivermore()
Physics constructor loader.
void ConstructAllLeptons()
void IonElasticQMD()
Physics constructor loader.
virtual void ConstructProcess()
std::map< std::string, Constructor > physicsConstructors
A map of physics list names to their constructors.
std::vector< G4String > physicsLists
void Channelling()
Physics constructor loader.
G4bool constructedAllMesons
Cached flag to avoid repeated construction.
void QGSPBERT()
Physics constructor loader.
void Shielding()
Physics constructor loader.
void EmGS()
Physics constructor loader.
void ConstructAllMesons()
Construct mesons.
void LaserCumulativeCompton()
Physics constructor loader.
void Print()
Print out which physics lists are activated.
std::map< G4String, G4String > aliasToOriginal
Map of possible aliases for a given physics list.
void SynchRad()
Physics constructor loader.
High energy muon processes.
Channelling physics process.
Cherenkov physics process constructor.
Physics processes required for user tracking limits.
Electromagnetic dissociation for high energy ions.
High energy muon processes.
Only ionisation from G4EmStandardPhysics.
Constructor for BDSLaserCompton process.
Only nuclear interactions for mu+-.
High energy muon processes.
Radioactivation processes.
A physics constructor that only constructs Synchrotron Radiation.
G4String LowerCase(const G4String &str)
Utility function to simplify lots of syntax changes for pedantic g4 changes.
void CheckHighPrecisionDataExists(const G4String &physicsListName)
void CheckLowEnergyNeutronDataExists(const G4String &phhysicsListName)
void ConstructMinimumParticleSet()