#include <PhysicsList.hh>
Public Member Functions | |
PhysicsList () | |
~PhysicsList () | |
Protected Member Functions | |
void | ConstructParticle () |
void | ConstructProcess () |
void | SetCuts () |
void | ConstructEM () |
void | ConstructHad () |
void | ConstructDecay () |
void | AddStepMax () |
Definition at line 16 of file PhysicsList.hh.
PhysicsList::PhysicsList | ( | ) |
Definition at line 16 of file PhysicsList.cc.
00016 : G4VUserPhysicsList() 00017 { 00018 defaultCutValue = 1.0*mm; 00019 SetVerboseLevel(1); 00020 }
PhysicsList::~PhysicsList | ( | ) |
void PhysicsList::ConstructParticle | ( | ) | [protected] |
Definition at line 36 of file PhysicsList.cc.
00037 { 00038 // pseudo-particles 00039 G4Geantino::GeantinoDefinition(); 00040 00041 // gamma 00042 G4Gamma::GammaDefinition(); 00043 00044 // e+/- 00045 G4Electron::ElectronDefinition(); 00046 G4Positron::PositronDefinition(); 00047 00048 // muon 00049 G4MuonPlus::MuonPlusDefinition(); 00050 G4MuonMinus::MuonMinusDefinition(); 00051 // neutrino 00052 G4NeutrinoE::NeutrinoEDefinition(); 00053 G4AntiNeutrinoE::AntiNeutrinoEDefinition(); 00054 G4NeutrinoMu::NeutrinoMuDefinition(); 00055 G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); 00056 00057 G4Proton::ProtonDefinition(); 00058 G4Neutron::NeutronDefinition(); 00059 00060 G4LeptonConstructor pLeptonConstructor; 00061 pLeptonConstructor.ConstructParticle(); 00062 00063 G4MesonConstructor pMesonConstructor; 00064 pMesonConstructor.ConstructParticle(); 00065 00066 G4BaryonConstructor pBaryonConstructor; 00067 pBaryonConstructor.ConstructParticle(); 00068 00069 G4ShortLivedConstructor pShortLivedConstructor; 00070 pShortLivedConstructor.ConstructParticle(); 00071 00072 G4BosonConstructor pBosonConstructor; 00073 pBosonConstructor.ConstructParticle(); 00074 00075 G4IonConstructor pConstructor; 00076 pConstructor.ConstructParticle(); 00077 00078 }
void PhysicsList::ConstructProcess | ( | ) | [protected] |
Definition at line 82 of file PhysicsList.cc.
00083 { 00084 AddTransportation(); 00085 ConstructEM(); 00086 ConstructDecay(); 00087 ConstructHad(); 00088 00089 // step limitation (as a full process) 00090 // 00091 AddStepMax(); 00092 }
void PhysicsList::SetCuts | ( | ) | [protected] |
Definition at line 319 of file PhysicsList.cc.
00320 { 00321 //G4VUserPhysicsList::SetCutsWithDefault method sets 00322 //the default cut value for all particle types 00323 // 00324 SetCutsWithDefault(); 00325 00326 if (verboseLevel>0) DumpCutValuesTable(); 00327 }
void PhysicsList::ConstructEM | ( | ) | [protected] |
Definition at line 114 of file PhysicsList.cc.
Referenced by ConstructProcess().
00115 { 00116 theParticleIterator->reset(); 00117 while( (*theParticleIterator)() ){ 00118 G4ParticleDefinition* particle = theParticleIterator->value(); 00119 G4ProcessManager* pmanager = particle->GetProcessManager(); 00120 G4String particleName = particle->GetParticleName(); 00121 00122 if (particleName == "gamma") { 00123 // gamma 00124 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); 00125 pmanager->AddDiscreteProcess(new G4ComptonScattering); 00126 pmanager->AddDiscreteProcess(new G4GammaConversion); 00127 00128 } else if (particleName == "e-") { 00129 //electron 00130 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); 00131 pmanager->AddProcess(new G4eIonisation, -1, 2,2); 00132 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); 00133 00134 } else if (particleName == "e+") { 00135 //positron 00136 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); 00137 pmanager->AddProcess(new G4eIonisation, -1, 2,2); 00138 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); 00139 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); 00140 00141 } else if( particleName == "mu+" || 00142 particleName == "mu-" ) { 00143 //muon 00144 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); 00145 pmanager->AddProcess(new G4MuIonisation, -1, 2,2); 00146 pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3,3); 00147 pmanager->AddProcess(new G4MuPairProduction, -1, 4,4); 00148 00149 } else if (particle->GetPDGCharge() != 0.0 && 00150 ! particle->IsShortLived() && 00151 particle->GetParticleName() != "chargedgeantino" ) { 00152 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); 00153 pmanager->AddProcess(new G4hIonisation, -1, 2,2); 00154 } 00155 } 00156 }
void PhysicsList::ConstructHad | ( | ) | [protected] |
Definition at line 198 of file PhysicsList.cc.
Referenced by ConstructProcess().
00199 { 00200 // add hadronic processes for Proton 00201 // 00202 G4ParticleDefinition* proton = G4Proton::Proton(); 00203 G4ProcessManager* proton_manager = proton->GetProcessManager(); 00204 00205 // process: elastic scattering 00206 // 00207 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess(); 00208 00209 // model: use LElastic, i.e. parameterized model 00210 // 00211 G4LElastic* theElasticModel = new G4LElastic(); 00212 theElasticProcess->RegisterMe(theElasticModel); 00213 proton_manager->AddDiscreteProcess(theElasticProcess); 00214 00215 // process: inelastic interaction 00216 // 00217 G4ProtonInelasticProcess* protonInelasticprocess 00218 = new G4ProtonInelasticProcess(); 00219 00220 // model: use Binary cascade as model (good up to several GeV) 00221 // 00222 G4BinaryCascade* theModel = new G4BinaryCascade(); 00223 protonInelasticprocess->RegisterMe(theModel); 00224 00225 // cross Section 00226 // 00227 protonInelasticprocess->AddDataSet(new G4NucleonNuclearCrossSection()); 00228 00229 // add process 00230 // 00231 proton_manager->AddDiscreteProcess(protonInelasticprocess); 00232 00233 // add hadronic processes for Neutron 00234 // 00235 G4ParticleDefinition* neutron = G4Neutron::Neutron(); 00236 G4ProcessManager* neutron_manager = neutron->GetProcessManager(); 00237 00238 // process: elastic scattering 00239 // 00240 neutron_manager->AddDiscreteProcess(theElasticProcess); 00241 00242 // process: inelastic interaction 00243 // 00244 G4NeutronInelasticProcess* neutronInelasticprocess 00245 = new G4NeutronInelasticProcess(); 00246 00247 // model 00248 // 00249 neutronInelasticprocess->RegisterMe(theModel); 00250 00251 // cross Section 00252 // 00253 neutronInelasticprocess->AddDataSet(new G4NucleonNuclearCrossSection()); 00254 00255 // add process 00256 // 00257 neutron_manager->AddDiscreteProcess(neutronInelasticprocess); 00258 00259 // process : Capture 00260 // 00261 G4HadronCaptureProcess * theNeutronCapture = new G4HadronCaptureProcess(); 00262 G4LCapture * theNeutronCaptureModel = new G4LCapture(); 00263 theNeutronCapture->RegisterMe(theNeutronCaptureModel); 00264 neutron_manager->AddDiscreteProcess(theNeutronCapture); 00265 00266 // process : Fission 00267 // 00268 G4HadronFissionProcess * theNeutronFission = new G4HadronFissionProcess(); 00269 G4LFission * theNeutronFissionModel = new G4LFission(); 00270 theNeutronFission->RegisterMe(theNeutronFissionModel); 00271 neutron_manager->AddDiscreteProcess(theNeutronFission); 00272 00273 // code for higher energies 00274 /* 00275 00276 G4TheoFSGenerator * theHEModel = new G4TheoFSGenerator(); 00277 G4FTFModel * theStringModel = new G4FTFModel(); 00278 G4ExcitedStringDecay * theStringFrag = 00279 new G4ExcitedStringDecay(new G4LundStringFragmentation()); 00280 theStringModel->SetFragmentationModel(theStringFrag); 00281 00282 theHEModel->SetTransport(new G4BinaryCascade()); 00283 theHEModel->SetMinEnergy(4.*GeV); 00284 theHEModel->SetMaxEnergy(100*TeV); 00285 theHEModel->SetHighEnergyGenerator(theStringModel); 00286 00287 theModel->SetMaxEnergy(5*GeV); // reduce use of casacde to below 5 GeV 00288 00289 protonInelasticprocess->RegisterMe(theHEModel); 00290 00291 neutronInelasticprocess->RegisterMe(theHEModel); 00292 00293 */ 00294 }
void PhysicsList::ConstructDecay | ( | ) | [protected] |
Definition at line 162 of file PhysicsList.cc.
Referenced by ConstructProcess().
00163 { 00164 // Add Decay Process 00165 G4Decay* theDecayProcess = new G4Decay(); 00166 theParticleIterator->reset(); 00167 while( (*theParticleIterator)() ){ 00168 G4ParticleDefinition* particle = theParticleIterator->value(); 00169 G4ProcessManager* pmanager = particle->GetProcessManager(); 00170 if (theDecayProcess->IsApplicable(*particle)) { 00171 pmanager ->AddProcess(theDecayProcess); 00172 // set ordering for PostStepDoIt and AtRestDoIt 00173 pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); 00174 pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest); 00175 } 00176 } 00177 }
void PhysicsList::AddStepMax | ( | ) | [protected] |
Definition at line 301 of file PhysicsList.cc.
Referenced by ConstructProcess().
00302 { 00303 // Step limitation seen as a process 00304 G4StepLimiter* stepMaxProcess = new G4StepLimiter(); 00305 00306 theParticleIterator->reset(); 00307 while ((*theParticleIterator)()){ 00308 G4ParticleDefinition* particle = theParticleIterator->value(); 00309 G4ProcessManager* pmanager = particle->GetProcessManager(); 00310 if (particle->GetPDGCharge() != 0.0) 00311 { 00312 pmanager ->AddDiscreteProcess(stepMaxProcess); 00313 } 00314 } 00315 }