#include "G4EmLivermorePhysics.hh" #include "G4EmStandardPhysics.hh" #include "G4EmStandardPhysics_option1.hh" #include "G4EmStandardPhysics_option2.hh" #include "G4EmStandardPhysics_option3.hh" #include "G4EmStandardPhysics_option4.hh" #include "G4DecayPhysics.hh" #include "G4RadioactiveDecayPhysics.hh" #include "G4EmPenelopePhysics.hh" #include "G4EmLowEPPhysics.hh" #include "G4EmStandardPhysicsGS.hh" #include "G4EmStandardPhysicsSS.hh" #include "G4EmDNAPhysics.hh" #include "PhysicsList.hh" #include "PhysicsListMessenger.hh" #include "G4VPhysicsConstructor.hh" #include "G4ParticleDefinition.hh" #include "G4ProductionCutsTable.hh" #include "G4ProcessManager.hh" #include "G4ParticleTypes.hh" #include "G4ios.hh" #include "G4StepLimiter.hh" #include "globals.hh" #include "G4SystemOfUnits.hh" #include "G4UAtomicDeexcitation.hh" #include "G4LossTableManager.hh" #include "G4EmParameters.hh" // Particles #include "G4Gamma.hh" #include "G4Electron.hh" #include "G4Positron.hh" #include "G4LeptonConstructor.hh" #include "G4BosonConstructor.hh" PhysicsList::PhysicsList(): G4VModularPhysicsList() { SetVerboseLevel(1); // EM physics: default fEmPhysicsList = new G4EmLivermorePhysics(); fEmName="emlivermore"; // Add Decay fDecPhysicsList = new G4DecayPhysics(); fRadDecayPhysicsList = new G4RadioactiveDecayPhysics(); fMessenger = new PhysicsListMessenger(this); } PhysicsList::~PhysicsList() { delete fMessenger; delete fDecPhysicsList; delete fRadDecayPhysicsList; delete fEmPhysicsList; } //------------------------------------------------------------------------------- // Particle construction //------------------------------------------------------------------------------- void PhysicsList::ConstructParticle() { fDecPhysicsList -> ConstructParticle(); fEmPhysicsList -> ConstructParticle(); G4Electron::ElectronDefinition(); G4Positron::PositronDefinition(); G4Gamma::GammaDefinition(); } //------------------------------------------------------------------------------- // Process construction //------------------------------------------------------------------------------- void PhysicsList::ConstructProcess() { AddTransportation(); fEmPhysicsList -> ConstructProcess(); fDecPhysicsList -> ConstructProcess(); fRadDecayPhysicsList -> ConstructProcess(); G4VAtomDeexcitation* de = new G4UAtomicDeexcitation(); G4LossTableManager::Instance()->SetAtomDeexcitation(de); de -> SetFluo (true); de -> SetAuger(true); de -> SetAugerCascade(true); G4EmParameters::Instance()-> SetDeexcitationIgnoreCut(false); G4EmParameters::Instance()-> SetApplyCuts(true); G4EmParameters::Instance()-> SetMinEnergy(1.0*keV); G4EmParameters::Instance()-> SetMaxEnergy(10.0*GeV); // G4EmParameters::Instance()-> SetStepFunction(0.01*nm,100*nm); // Dfault: SetStepFunction(dRoverRange=0.1*um,finalRange=100*um) } //------------------------------------------------------------------------------- // Testing other libraries //------------------------------------------------------------------------------- void PhysicsList::AddPhysicsList(const G4String& name) { if (name == fEmName) return; if (name == "emstandard_opt0") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysics(); // Print the physics list G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandard_opt1") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysics_option1(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandard_opt2") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysics_option2(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandard_opt3") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysics_option3(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandard_opt4") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysics_option4(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emlowphysics") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmLowEPPhysics(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "empenelope") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmPenelopePhysics(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emlivermore") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmLivermorePhysics(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandardGS") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysicsGS(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "emstandardSS") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmStandardPhysicsSS(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else if (name == "dna") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmDNAPhysics(); G4cout << "*** USED PHYSICS LIST *** <" << name << ">" << G4endl; } else { G4cout << "PhysicsList::AddPhysicsList : <" << name << ">" << " is not defined" << G4endl; } G4cout << "*** NOTE THAT THE PHYSICS LIST *** <" << name << ">" << " is activated" << G4endl; } //------------------------------------------------------------------------------- // Transport cutoff //------------------------------------------------------------------------------- void PhysicsList::SetCuts() { G4double defaultCutValue_g = 1.0 * keV; G4double defaultCutValue_e = 1.0 * keV; G4double defaultCutValue_p = 1.0 * keV; SetCutValue(defaultCutValue_g, "gamma"); SetCutValue(defaultCutValue_e, "e-"); SetCutValue(defaultCutValue_p, "e+"); // By default the low energy limit to produce secondary particles is 990 eV. // This value is correct when using the EM Standard Physics. // When using the Low Energy Livermore this value can be // changed to 250 eV corresponding to the limit // of validity of the physics models. G4double lowLimit = 1.0 * keV; G4double highLimit = 1000.0 * TeV; G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowLimit, highLimit); G4cout << "************************ " << "\n *** Limits used *** :" << "\n LOWER LIMIT :" <0) DumpCutValuesTable(); }