19#include "BDSException.hh"
20#include "BDSGlobalConstants.hh"
21#include "BDSIonDefinition.hh"
22#include "BDSModularPhysicsList.hh"
23#include "BDSParticleDefinition.hh"
24#include "BDSPhysicalConstants.hh"
25#include "BDSPhysicsAnnihiToMuMu.hh"
26#include "BDSPhysicsCherenkov.hh"
27#include "BDSPhysicsCutsAndLimits.hh"
28#include "BDSPhysicsEMDissociation.hh"
29#include "BDSPhysicsGammaToMuMu.hh"
30#include "BDSPhysicsIonisation.hh"
31#include "BDSPhysicsLaserWire.hh"
32#include "BDSPhysicsMuon.hh"
33#include "BDSPhysicsMuonInelastic.hh"
34#include "BDSPhysicsSynchRad.hh"
35#include "BDSPhysicsUtilities.hh"
36#include "BDSUtilities.hh"
37#include "BDSPhysicsLaserPhotoDetachment.hh"
38#include "BDSPhysicsLaserIonExcitation.hh"
39#include "BDSPhysicsLaserComptonScattering.hh"
40#include "BDSPhysicsLaserCumulativePhotodetachment.hh"
41#include "BDSPhysicsLaserCumulativeCompton.hh"
42#include "BDSPhysicsLaserWire.hh"
43#include "BDSPhysicsMuon.hh"
44#include "BDSPhysicsSynchRad.hh"
45#include "BDSPhysicsUtilities.hh"
46#include "BDSUtilities.hh"
48#include "parser/fastlist.h"
49#include "parser/physicsbiasing.h"
53#include "G4GenericBiasingPhysics.hh"
54#include "G4ParticleTable.hh"
55#include "G4ProcessManager.hh"
56#include "G4ProcessVector.hh"
58#include "G4Version.hh"
61#include "G4ChargeExchangePhysics.hh"
62#include "G4DecayPhysics.hh"
63#include "G4EmExtraPhysics.hh"
64#include "G4EmLivermorePhysics.hh"
65#include "G4EmLivermorePolarizedPhysics.hh"
66#include "G4EmLowEPPhysics.hh"
67#include "G4EmPenelopePhysics.hh"
68#include "G4EmStandardPhysics.hh"
69#include "G4EmStandardPhysicsSS.hh"
70#include "G4EmStandardPhysicsWVI.hh"
71#include "G4EmStandardPhysics_option1.hh"
72#include "G4EmStandardPhysics_option2.hh"
73#include "G4EmStandardPhysics_option3.hh"
74#include "G4EmStandardPhysics_option4.hh"
75#include "G4HadronDElasticPhysics.hh"
76#include "G4HadronElasticPhysics.hh"
77#include "G4HadronElasticPhysicsHP.hh"
78#include "G4HadronElasticPhysicsLEND.hh"
79#include "G4HadronElasticPhysicsXS.hh"
80#include "G4HadronHElasticPhysics.hh"
81#include "G4HadronPhysicsFTFP_BERT.hh"
82#include "G4HadronPhysicsFTFP_BERT_HP.hh"
83#include "G4HadronPhysicsFTF_BIC.hh"
84#include "G4HadronPhysicsQGSP_BERT.hh"
85#include "G4HadronPhysicsQGSP_BERT_HP.hh"
86#include "G4HadronPhysicsQGSP_BIC.hh"
87#include "G4HadronPhysicsQGSP_BIC_HP.hh"
88#include "G4HadronPhysicsShielding.hh"
89#include "G4IonBinaryCascadePhysics.hh"
90#include "G4IonElasticPhysics.hh"
91#include "G4IonINCLXXPhysics.hh"
92#include "G4IonPhysics.hh"
93#include "G4IonQMDPhysics.hh"
94#include "G4NeutronTrackingCut.hh"
95#include "G4OpticalPhysics.hh"
96#include "G4RadioactiveDecayPhysics.hh"
97#include "G4StoppingPhysics.hh"
98#include "G4SynchrotronRadiation.hh"
101#if G4VERSION_NUMBER > 1009
102#include "G4HadronElasticPhysicsPHP.hh"
105#if G4VERSION_NUMBER > 1019
106#include "G4EmStandardPhysicsGS.hh"
107#include "G4EmDNAChemistry.hh"
110#if G4VERSION_NUMBER > 1020
111#include "G4SpinDecayPhysics.hh"
114#if G4VERSION_NUMBER > 1022
115#include "G4IonPhysicsPHP.hh"
118#if G4VERSION_NUMBER > 1029
119#include "G4MuonicAtomDecayPhysics.hh"
122#if G4VERSION_NUMBER > 1039
123#include "BDSPhysicsChannelling.hh"
124#include "BDSPhysicsRadioactivation.hh"
125#include "G4EmDNAPhysics.hh"
126#include "G4EmDNAPhysics_option1.hh"
127#include "G4EmDNAPhysics_option2.hh"
128#include "G4EmDNAPhysics_option3.hh"
129#include "G4EmDNAPhysics_option4.hh"
130#include "G4EmDNAPhysics_option5.hh"
131#include "G4EmDNAPhysics_option6.hh"
132#include "G4EmDNAPhysics_option7.hh"
133#include "G4HadronPhysicsShieldingLEND.hh"
136#if G4VERSION_NUMBER < 1070
137#include "G4OpticalProcessIndex.hh"
139#include "G4OpticalParameters.hh"
142#if G4VERSION_NUMBER > 1069
143#include "G4EmDNAChemistry_option1.hh"
144#include "G4EmDNAChemistry_option2.hh"
145#include "G4EmDNAChemistry_option3.hh"
148#if G4VERSION_NUMBER > 1119
149#include "BDSPhysicsXrayReflection.hh"
153#include "G4AntiNeutrinoE.hh"
154#include "G4AntiNeutron.hh"
155#include "G4AntiProton.hh"
156#include "G4BaryonConstructor.hh"
157#include "G4Electron.hh"
159#include "G4IonConstructor.hh"
160#include "G4LeptonConstructor.hh"
161#include "G4MesonConstructor.hh"
162#include "G4NeutrinoE.hh"
163#include "G4Neutron.hh"
164#include "G4Positron.hh"
165#include "G4Proton.hh"
166#include "G4ShortLivedConstructor.hh"
178BDSModularPhysicsList::BDSModularPhysicsList(
const G4String& physicsList):
179 constructedAllLeptons(false),
180 constructedAllShortLived(false),
181 constructedAllMesons(false),
182 constructedAllBaryons(false),
183 constructedAllIons(false),
185 opticalPhysics(nullptr),
188 particlesConstructed(false)
247#if G4VERSION_NUMBER > 1019
251#if G4VERSION_NUMBER > 1020
254#if G4VERSION_NUMBER > 1022
257#if G4VERSION_NUMBER > 1029
260#if G4VERSION_NUMBER > 1039
273#if G4VERSION_NUMBER > 1069
278#if G4VERSION_NUMBER > 1119
283 aliasToOriginal[
"cerenkov"] =
"cherenkov";
284 aliasToOriginal[
"cutsandlimits"] =
"cuts_and_limits";
285 aliasToOriginal[
"em_low"] =
"em_penelope";
286 aliasToOriginal[
"hadronic"] =
"ftfp_bert";
287 aliasToOriginal[
"hadronic_hp"] =
"ftfp_bert_hp";
288 aliasToOriginal[
"ionbinary"] =
"ion_binary";
289 aliasToOriginal[
"ioninclxx"] =
"ion_inclxx";
290 aliasToOriginal[
"ionphp"] =
"ion_php";
291 aliasToOriginal[
"spindecay"] =
"decay_spin";
292 aliasToOriginal[
"synchrad"] =
"synch_rad";
293#if G4VERSION_NUMBER > 1039
294 aliasToOriginal[
"channeling"] =
"channelling";
298 for (
const auto& constructor : physicsConstructors)
300 physicsLists.emplace_back(constructor.first);
301 physicsActivated[constructor.first] =
false;
306 for (
const auto& kv : physicsConstructors)
307 {incompatible.insert(std::make_pair(kv.first, std::vector<G4String>()));}
308 incompatible[
"annihi_to_mumu"] = {
"em_extra"};
309 incompatible[
"cherenkov"] = {
"optical"};
310 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"};
311 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"};
312 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"};
313 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"};
314 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"};
315 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"};
316 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"};
317 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"};
318 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"};
319 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"};
320 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"};
321 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"};
322 incompatible[
"em"] = {
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
323 incompatible[
"em_ss"] = {
"em",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
324 incompatible[
"em_wvi"] = {
"em",
"em_ss",
"em_1",
"em_2",
"em_3",
"em_4"};
325 incompatible[
"em_1"] = {
"em",
"em_ss",
"em_wvi",
"em_2",
"em_3",
"em_4"};
326 incompatible[
"em_2"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_3",
"em_4"};
327 incompatible[
"em_3"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_4"};
328 incompatible[
"em_4"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3"};
329 incompatible[
"em_livermore"] = {
"em_livermore_polarised"};
330 incompatible[
"em_extra"] = {
"muon",
"muon_inelastic"};
331 incompatible[
"ftfp_bert"] = {
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
332 incompatible[
"ftfp_bert_hp"] = {
"ftfp_bert",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
333 incompatible[
"ftf_bic"] = {
"ftfp_bert",
"ftfp_bert_hp",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
334 incompatible[
"gamma_to_mumu"] = {
"em_extra"};
335 incompatible[
"hadronic_elastic"] = {
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
336 incompatible[
"hadronic_elastic_d"] = {
"hadronic_elastic",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
337 incompatible[
"hadronic_elastic_h"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_hp",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
338 incompatible[
"hadronic_elastic_hp"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_lend",
"hadronic_elastic_xs"};
339 incompatible[
"hadronic_elastic_lend"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_xs"};
340 incompatible[
"hadronic_elastic_xs"] = {
"hadronic_elastic",
"hadronic_elastic_d",
"hadronic_elastic_h",
"hadronic_elastic_hp",
"hadronic_elastic_lend"};
341 incompatible[
"ion_elastic"] = {
"ion_elastic_qmd"};
342 incompatible[
"ionisation"] = {
"em",
"em_ss",
"em_1",
"em_2",
"em_3",
"em_4",
"em_livermore"};
343 incompatible[
"optical"] = {
"cherenkov"};
344 incompatible[
"qgsp_bert"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert_hp",
"qgsp_bic",
"qgsp_bic_hp"};
345 incompatible[
"qgsp_bert_hp"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bic",
"qgsp_bic_hp"};
346 incompatible[
"qgsp_bic"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic_hp"};
347 incompatible[
"qgsp_bic_hp"] = {
"ftfp_bert",
"ftfp_bert_hp",
"ftf_bic",
"qgsp_bert",
"qgsp_bert_hp",
"qgsp_bic"};
348 incompatible[
"muon"] = {
"em_extra"};
349 incompatible[
"muon_inelastic"] = {
"em_extra",
"muon"};
351#if G4VERSION_NUMBER > 1019
352 for (
const auto& name : {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"})
353 {incompatible[name].emplace_back(
"em_gs");}
354 incompatible[
"em_gs"] = {
"em",
"em_ss",
"em_wvi",
"em_1",
"em_2",
"em_3",
"em_4"};
356#if G4VERSION_NUMBER > 1020
357 incompatible[
"decay"].emplace_back(
"decay_spin");
358 incompatible[
"decay_spin"] = {
"decay"};
360#if G4VERSION_NUMBER > 1039
361 incompatible[
"shielding"].emplace_back(
"shielding_lend");
362 incompatible[
"shielding_lend"] = {
"shielding"};
365 ParsePhysicsList(physicsList);
369 for (
auto physics : constructors)
370 {RegisterPhysics(physics);}
375 if (globals->Verbose())
380BDSModularPhysicsList::~BDSModularPhysicsList()
385 if (particlesConstructed)
388 G4VModularPhysicsList::ConstructParticle();
389 particlesConstructed =
true;
394 G4VModularPhysicsList::ConstructProcess();
395 DumpCutValuesTable(100);
402 G4String result = (physics.second ?
"active" :
"inactive");
403 G4cout << std::setw(27) << (
"\"" + physics.first +
"\": ") << result << G4endl;
410 G4cout << __METHOD_NAME__ <<
"Physics list string: \"" << physListName <<
"\"" << G4endl;
414 std::stringstream ss(physListName);
415 std::istream_iterator<std::string> begin(ss);
416 std::istream_iterator<std::string> end;
417 std::vector<std::string> physicsListNamesS(begin, end);
420 std::vector<G4String> physicsListNames;
421 for (
const auto& physicsListName : physicsListNamesS)
423 G4String name = G4String(physicsListName);
431 G4cout << __METHOD_NAME__ <<
"alias \"" << name <<
"\" forwarding to \""
432 << result->second <<
"\"" << G4endl;
433 name = result->second;
435 physicsListNames.push_back(name);
439 if (std::find(physicsListNames.begin(), physicsListNames.end(),
"em") != physicsListNames.end())
442 for (
const auto& name : physicsListNames)
447 G4cout << __METHOD_NAME__ <<
"Constructing \"" << result->first <<
"\" physics list" << G4endl;
449 auto mem = result->second;
454 G4cout <<
"\"" << name <<
"\" is not a valid physics list. Available ones are: " << G4endl;
456 {G4cout <<
"\"" << listName <<
"\"" << G4endl;}
457 throw BDSException(__METHOD_NAME__,
"Invalid physics list.");
469 G4LeptonConstructor::ConstructParticle();
477 G4ShortLivedConstructor::ConstructParticle();
485 G4MesonConstructor::ConstructParticle();
493 G4BaryonConstructor::ConstructParticle();
502 G4GenericIon::GenericIonDefinition();
503 G4IonConstructor::ConstructParticle();
515 G4long maxPhotonsPerStep =
globals->MaximumPhotonsPerStep();
516 G4double maxBetaChangePerStep =
globals->MaximumBetaChangePerStep();
517 if (maxBetaChangePerStep > 100.0)
518 {
throw BDSException(__METHOD_NAME__,
"the option 'maxBetaChangePerStep' must be less than 100 %");}
519#if G4VERSION_NUMBER < 1079
521 opticalPhysics->Configure(G4OpticalProcessIndex::kCerenkov,
true);
522 opticalPhysics->Configure(G4OpticalProcessIndex::kScintillation,
true);
523 opticalPhysics->Configure(G4OpticalProcessIndex::kAbsorption,
globals->TurnOnOpticalAbsorption());
524 opticalPhysics->Configure(G4OpticalProcessIndex::kRayleigh,
globals->TurnOnRayleighScattering());
525 opticalPhysics->Configure(G4OpticalProcessIndex::kMieHG,
globals->TurnOnMieScattering());
526 opticalPhysics->Configure(G4OpticalProcessIndex::kBoundary,
globals->TurnOnOpticalSurface());
527 opticalPhysics->Configure(G4OpticalProcessIndex::kWLS,
true);
528 opticalPhysics->SetScintillationYieldFactor(
globals->ScintYieldFactor());
529 if (maxPhotonsPerStep >= 0)
530 {opticalPhysics->SetMaxNumPhotonsPerStep(maxPhotonsPerStep);}
531 opticalPhysics->SetMaxBetaChangePerStep(maxBetaChangePerStep);
533 G4OpticalParameters* opticalParameters = G4OpticalParameters::Instance();
534 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kCerenkov),
true);
535 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kScintillation),
true);
536 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kAbsorption),
globals->TurnOnOpticalAbsorption());
537 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kRayleigh),
globals->TurnOnRayleighScattering());
538 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kMieHG),
globals->TurnOnMieScattering());
539 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kBoundary),
globals->TurnOnOpticalSurface());
540 opticalParameters->SetProcessActivation(G4OpticalProcessName(G4OpticalProcessIndex::kWLS),
true);
541 if (maxPhotonsPerStep >= 0)
542 {opticalParameters->SetCerenkovMaxPhotonsPerStep((G4int)maxPhotonsPerStep);}
543 opticalParameters->SetCerenkovMaxBetaChange(maxBetaChangePerStep);
550 const std::vector<G4String>& forbidden =
incompatible.at(singlePhysicsIn);
552 for (
const auto& key : forbidden)
556 G4cerr << __METHOD_NAME__ <<
"Incompatible physics list \"" << singlePhysicsIn
557 <<
"\" being used with already used \"" << key <<
"\"" << G4endl;
558 G4cout <<
"\"" << singlePhysicsIn <<
"\" cannot be used with the following:" << G4endl;
559 for (
const auto& v : forbidden)
560 {G4cout <<
"\"" << v <<
"\"" << G4endl;}
561 throw BDSException(__METHOD_NAME__,
"Incompatible physics list.");
589 constructors.push_back(
new G4ChargeExchangePhysics());
619 constructors.push_back(
new G4DecayPhysics());
628 constructors.push_back(
new G4RadioactiveDecayPhysics());
638 constructors.push_back(
new G4EmStandardPhysics());
656 auto constructor =
new G4EmExtraPhysics();
657#if G4VERSION_NUMBER > 1019
659 constructor->MuonNuclear(useMuonNuclear);
660 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> muon nuclear processes : " << BDS::BoolToString(useMuonNuclear) << G4endl;
662#if G4VERSION_NUMBER > 1029
664 constructor->GammaToMuMu(useGammaToMuMu);
665 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> gamma to mu mu : " << BDS::BoolToString(useGammaToMuMu) << G4endl;
667 constructor->PositronToMuMu(usePositronToMuMu);
668 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> e+ to mu mu : " << BDS::BoolToString(usePositronToMuMu) << G4endl;
670 constructor->PositronToHadrons(usePositronToHadrons);
671 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> e+ to hadrons : " << BDS::BoolToString(usePositronToHadrons) << G4endl;
673#if G4VERSION_NUMBER > 1039
675 if (useLENDGammaNuclear)
678 constructor->LENDGammaNuclear(
true);
679 G4cout << __METHOD_NAME__ <<
"G4EmExtraPhysics> LEND gamma nuclear : " << BDS::BoolToString(useMuonNuclear) << G4endl;
682 constructor->ElectroNuclear(useElectroNuclear);
684 constructors.push_back(constructor);
694 constructors.push_back(
new G4EmLivermorePhysics());
704 constructors.push_back(
new G4EmLivermorePolarizedPhysics());
714 constructors.push_back(
new G4EmLowEPPhysics());
724 constructors.push_back(
new G4EmPenelopePhysics());
734 constructors.push_back(
new G4EmStandardPhysicsSS());
744 constructors.push_back(
new G4EmStandardPhysicsWVI());
754 constructors.push_back(
new G4EmStandardPhysics_option1());
764 constructors.push_back(
new G4EmStandardPhysics_option2());
774 constructors.push_back(
new G4EmStandardPhysics_option3());
784 constructors.push_back(
new G4EmStandardPhysics_option4());
795 constructors.push_back(
new G4HadronPhysicsFTFP_BERT());
806 constructors.push_back(
new G4HadronPhysicsFTFP_BERT_HP());
816 constructors.push_back(
new G4HadronPhysicsFTF_BIC());
835 constructors.push_back(
new G4HadronElasticPhysics());
845 constructors.push_back(
new G4HadronDElasticPhysics());
855 constructors.push_back(
new G4HadronHElasticPhysics());
865 constructors.push_back(
new G4HadronElasticPhysicsHP());
876 constructors.push_back(
new G4HadronElasticPhysicsLEND());
886 constructors.push_back(
new G4HadronElasticPhysicsXS());
901 constructors.push_back(
new G4IonPhysics());
917 constructors.push_back(
new G4IonBinaryCascadePhysics());
933 constructors.push_back(
new G4IonElasticPhysics());
949 constructors.push_back(
new G4IonQMDPhysics());
979 constructors.push_back(
new G4IonINCLXXPhysics());
1069 auto ntc =
new G4NeutronTrackingCut();
1072 G4cout << __METHOD_NAME__ <<
"Neutron time limit: " << timeLimit / CLHEP::s <<
" s" << G4endl;
1073 G4cout << __METHOD_NAME__ <<
"Neutron kinetic energy limit: " << eKinLimit / CLHEP::MeV << G4endl;
1074 ntc->SetTimeLimit(timeLimit);
1075 ntc->SetKineticEnergyLimit(eKinLimit);
1076 constructors.push_back(ntc);
1085 opticalPhysics =
new G4OpticalPhysics();
1086 constructors.push_back(opticalPhysics);
1096 constructors.push_back(
new G4HadronPhysicsQGSP_BERT());
1106 constructors.push_back(
new G4HadronPhysicsQGSP_BERT_HP());
1116 constructors.push_back(
new G4HadronPhysicsQGSP_BIC());
1126 constructors.push_back(
new G4HadronPhysicsQGSP_BIC_HP());
1133#if G4VERSION_NUMBER > 1059
1138 constructors.push_back(
new G4HadronPhysicsShielding());
1149 constructors.push_back(
new G4StoppingPhysics());
1164#if G4VERSION_NUMBER > 1019
1170 constructors.push_back(
new G4EmStandardPhysicsGS());
1181 {constructors.push_back(
new G4EmDNAChemistry());}
1182#if G4VERSION_NUMBER > 1069
1184 {constructors.push_back(
new G4EmDNAChemistry_option1());}
1186 {constructors.push_back(
new G4EmDNAChemistry_option2());}
1188 {constructors.push_back(
new G4EmDNAChemistry_option3());}
1195#if G4VERSION_NUMBER > 1020
1200 constructors.push_back(
new G4SpinDecayPhysics());
1206#if G4VERSION_NUMBER > 1022
1218 constructors.push_back(
new G4IonPhysicsPHP());
1224#if G4VERSION_NUMBER > 1029
1230#if G4VERSION_NUMBER > 1059
1235 constructors.push_back(
new G4MuonicAtomDecayPhysics());
1241#if G4VERSION_NUMBER > 1039
1247 {constructors.push_back(
new G4EmDNAPhysics());}
1249 {constructors.push_back(
new G4EmDNAPhysics_option1());}
1251 {constructors.push_back(
new G4EmDNAPhysics_option2());}
1253 {constructors.push_back(
new G4EmDNAPhysics_option3());}
1255 {constructors.push_back(
new G4EmDNAPhysics_option4());}
1257 {constructors.push_back(
new G4EmDNAPhysics_option5());}
1259 {constructors.push_back(
new G4EmDNAPhysics_option6());}
1261 {constructors.push_back(
new G4EmDNAPhysics_option7());}
1271 G4GenericBiasingPhysics* biasingPhysics =
new G4GenericBiasingPhysics();
1272 biasingPhysics->PhysicsBiasAllCharged();
1273 RegisterPhysics(biasingPhysics);
1293 constructors.push_back(
new G4HadronPhysicsShieldingLEND());
1299#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()