#include <G4EmLowEPPhysics.hh>
Inheritance diagram for G4EmLowEPPhysics:
Public Member Functions | |
G4EmLowEPPhysics (G4int ver=1) | |
G4EmLowEPPhysics (G4int ver, const G4String &name) | |
virtual | ~G4EmLowEPPhysics () |
virtual void | ConstructParticle () |
virtual void | ConstructProcess () |
Definition at line 35 of file G4EmLowEPPhysics.hh.
G4EmLowEPPhysics::G4EmLowEPPhysics | ( | G4int | ver = 1 |
) |
Definition at line 126 of file G4EmLowEPPhysics.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00127 : G4VPhysicsConstructor("G4EmLowEPPhysics"), verbose(ver) 00128 { 00129 G4LossTableManager::Instance(); 00130 SetPhysicsType(bElectromagnetic); 00131 }
Definition at line 135 of file G4EmLowEPPhysics.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00136 : G4VPhysicsConstructor("G4EmLowEPPhysics"), verbose(ver) 00137 { 00138 G4LossTableManager::Instance(); 00139 SetPhysicsType(bElectromagnetic); 00140 }
G4EmLowEPPhysics::~G4EmLowEPPhysics | ( | ) | [virtual] |
void G4EmLowEPPhysics::ConstructParticle | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 149 of file G4EmLowEPPhysics.cc.
References G4Alpha::Alpha(), G4AntiProton::AntiProton(), G4Deuteron::Deuteron(), G4Electron::Electron(), G4Gamma::Gamma(), G4GenericIon::GenericIonDefinition(), G4He3::He3(), G4KaonMinus::KaonMinusDefinition(), G4KaonPlus::KaonPlusDefinition(), G4MuonMinus::MuonMinus(), G4MuonPlus::MuonPlus(), G4PionMinus::PionMinusDefinition(), G4PionPlus::PionPlusDefinition(), G4Positron::Positron(), G4Proton::Proton(), and G4Triton::Triton().
00150 { 00151 // gamma 00152 G4Gamma::Gamma(); 00153 00154 // leptons 00155 G4Electron::Electron(); 00156 G4Positron::Positron(); 00157 G4MuonPlus::MuonPlus(); 00158 G4MuonMinus::MuonMinus(); 00159 00160 // mesons 00161 G4PionPlus::PionPlusDefinition(); 00162 G4PionMinus::PionMinusDefinition(); 00163 G4KaonPlus::KaonPlusDefinition(); 00164 G4KaonMinus::KaonMinusDefinition(); 00165 00166 // baryons 00167 G4Proton::Proton(); 00168 G4AntiProton::AntiProton(); 00169 00170 // ions 00171 G4Deuteron::Deuteron(); 00172 G4Triton::Triton(); 00173 G4He3::He3(); 00174 G4Alpha::Alpha(); 00175 G4GenericIon::GenericIonDefinition(); 00176 }
void G4EmLowEPPhysics::ConstructProcess | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 180 of file G4EmLowEPPhysics.cc.
References G4VEnergyLossProcess::AddEmModel(), G4VEmProcess::AddEmModel(), G4VMultipleScattering::AddEmModel(), fUseDistanceToBoundary, G4cout, G4endl, G4ParticleDefinition::GetParticleName(), G4PhysicsListHelper::GetPhysicsListHelper(), G4VPhysicsConstructor::GetPhysicsName(), G4LossTableManager::Instance(), G4INCL::Math::pi, G4InuclParticleNames::pip, G4InuclParticleNames::pp, G4PhysicsListHelper::RegisterProcess(), G4ParticleTableIterator< K, V >::reset(), G4VEmModel::SetAngularDistribution(), G4LossTableManager::SetAtomDeexcitation(), G4EmProcessOptions::SetDEDXBinning(), G4VEnergyLossProcess::SetEmModel(), G4VAtomDeexcitation::SetFluo(), G4VEmModel::SetHighEnergyLimit(), G4EmProcessOptions::SetLambdaBinning(), G4EmProcessOptions::SetMaxEnergy(), G4EmProcessOptions::SetMinEnergy(), G4EmProcessOptions::SetPolarAngleLimit(), G4VEnergyLossProcess::SetStepFunction(), G4VMultipleScattering::SetStepLimitType(), G4EmProcessOptions::SetVerbose(), G4VPhysicsConstructor::theParticleIterator, and G4ParticleTableIterator< K, V >::value().
00181 { 00182 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); 00183 00184 // muon & hadron bremsstrahlung and pair production 00185 G4MuBremsstrahlung* mub = new G4MuBremsstrahlung(); 00186 G4MuPairProduction* mup = new G4MuPairProduction(); 00187 G4hBremsstrahlung* pib = new G4hBremsstrahlung(); 00188 G4hPairProduction* pip = new G4hPairProduction(); 00189 G4hBremsstrahlung* kb = new G4hBremsstrahlung(); 00190 G4hPairProduction* kp = new G4hPairProduction(); 00191 G4hBremsstrahlung* pb = new G4hBremsstrahlung(); 00192 G4hPairProduction* pp = new G4hPairProduction(); 00193 00194 // muon & hadron multiple scattering 00195 G4MuMultipleScattering* mumsc = new G4MuMultipleScattering(); 00196 mumsc->AddEmModel(0, new G4WentzelVIModel()); 00197 G4hMultipleScattering* hmsc = new G4hMultipleScattering(); 00198 G4hMultipleScattering* pmsc = new G4hMultipleScattering(); 00199 G4hMultipleScattering* pimsc = new G4hMultipleScattering(); 00200 G4hMultipleScattering* kmsc = new G4hMultipleScattering(); 00201 00202 // Add Livermore EM Processes 00203 theParticleIterator->reset(); 00204 00205 while( (*theParticleIterator)() ){ 00206 00207 G4ParticleDefinition* particle = theParticleIterator->value(); 00208 G4String particleName = particle->GetParticleName(); 00209 00210 if(verbose > 1) 00211 G4cout << "### " << GetPhysicsName() << " instantiates for " 00212 << particleName << G4endl; 00213 00214 //Applicability range for Livermore models 00215 //for higher energies, the Standard models are used 00216 G4double LivermoreHighEnergyLimit = GeV; 00217 00218 if (particleName == "gamma") { 00219 00220 G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect(); 00221 G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel = 00222 new G4LivermorePhotoElectricModel(); 00223 theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00224 thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel); 00225 ph->RegisterProcess(thePhotoElectricEffect, particle); 00226 00227 G4ComptonScattering* theComptonScattering = new G4ComptonScattering(); 00228 G4LowEPComptonModel* theLowEPComptonModel = 00229 new G4LowEPComptonModel(); 00230 theLowEPComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00231 theComptonScattering->AddEmModel(0, theLowEPComptonModel); 00232 ph->RegisterProcess(theComptonScattering, particle); 00233 00234 G4GammaConversion* theGammaConversion = new G4GammaConversion(); 00235 G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel = 00236 new G4LivermoreGammaConversionModel(); 00237 theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00238 theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel); 00239 ph->RegisterProcess(theGammaConversion, particle); 00240 00241 G4RayleighScattering* theRayleigh = new G4RayleighScattering(); 00242 G4LivermoreRayleighModel* theRayleighModel = new G4LivermoreRayleighModel(); 00243 theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00244 theRayleigh->AddEmModel(0, theRayleighModel); 00245 ph->RegisterProcess(theRayleigh, particle); 00246 00247 } else if (particleName == "e-") { 00248 00249 G4eMultipleScattering* msc = new G4eMultipleScattering(); 00250 msc->AddEmModel(0, new G4UrbanMscModel95()); 00251 //msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel()); 00252 msc->SetStepLimitType(fUseDistanceToBoundary); 00253 ph->RegisterProcess(msc, particle); 00254 00255 // Ionisation 00256 G4eIonisation* eIoni = new G4eIonisation(); 00257 G4LivermoreIonisationModel* theIoniLivermore = new 00258 G4LivermoreIonisationModel(); 00259 theIoniLivermore->SetHighEnergyLimit(0.1*MeV); 00260 eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() ); 00261 eIoni->SetStepFunction(0.2, 100*um); // 00262 ph->RegisterProcess(eIoni, particle); 00263 00264 // Bremsstrahlung 00265 G4eBremsstrahlung* eBrem = new G4eBremsstrahlung(); 00266 G4LivermoreBremsstrahlungModel* theBremLivermore = new 00267 G4LivermoreBremsstrahlungModel(); 00268 theBremLivermore->SetHighEnergyLimit(25*MeV); 00269 theBremLivermore->SetAngularDistribution(new G4Generator2BS()); 00270 eBrem->AddEmModel(0, theBremLivermore); 00271 ph->RegisterProcess(eBrem, particle); 00272 00273 } else if (particleName == "e+") { 00274 00275 // Identical to G4EmStandardPhysics_option3 00276 00277 G4eMultipleScattering* msc = new G4eMultipleScattering(); 00278 msc->AddEmModel(0, new G4UrbanMscModel95()); 00279 //msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel()); 00280 msc->SetStepLimitType(fUseDistanceToBoundary); 00281 G4eIonisation* eIoni = new G4eIonisation(); 00282 eIoni->SetStepFunction(0.2, 100*um); 00283 00284 ph->RegisterProcess(msc, particle); 00285 ph->RegisterProcess(eIoni, particle); 00286 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 00287 ph->RegisterProcess(new G4eplusAnnihilation(), particle); 00288 00289 } else if (particleName == "mu+" || 00290 particleName == "mu-" ) { 00291 00292 G4MuIonisation* muIoni = new G4MuIonisation(); 00293 muIoni->SetStepFunction(0.2, 50*um); 00294 00295 ph->RegisterProcess(mumsc, particle); 00296 ph->RegisterProcess(muIoni, particle); 00297 ph->RegisterProcess(mub, particle); 00298 ph->RegisterProcess(mup, particle); 00299 ph->RegisterProcess(new G4CoulombScattering(), particle); 00300 00301 } else if (particleName == "alpha" || 00302 particleName == "He3" ) { 00303 00304 // Identical to G4EmStandardPhysics_option3 00305 00306 G4ionIonisation* ionIoni = new G4ionIonisation(); 00307 ionIoni->SetStepFunction(0.1, 10*um); 00308 00309 ph->RegisterProcess(hmsc, particle); 00310 ph->RegisterProcess(ionIoni, particle); 00311 ph->RegisterProcess(new G4NuclearStopping(), particle); 00312 00313 } else if (particleName == "GenericIon") { 00314 00315 // Identical to G4EmStandardPhysics_option3 00316 00317 G4ionIonisation* ionIoni = new G4ionIonisation(); 00318 ionIoni->SetEmModel(new G4IonParametrisedLossModel()); 00319 ionIoni->SetStepFunction(0.1, 1*um); 00320 00321 ph->RegisterProcess(hmsc, particle); 00322 ph->RegisterProcess(ionIoni, particle); 00323 ph->RegisterProcess(new G4NuclearStopping(), particle); 00324 00325 } else if (particleName == "pi+" || 00326 particleName == "pi-" ) { 00327 00328 G4hIonisation* hIoni = new G4hIonisation(); 00329 hIoni->SetStepFunction(0.2, 50*um); 00330 00331 ph->RegisterProcess(pimsc, particle); 00332 ph->RegisterProcess(hIoni, particle); 00333 ph->RegisterProcess(pib, particle); 00334 ph->RegisterProcess(pip, particle); 00335 00336 } else if (particleName == "kaon+" || 00337 particleName == "kaon-" ) { 00338 00339 G4hIonisation* hIoni = new G4hIonisation(); 00340 hIoni->SetStepFunction(0.2, 50*um); 00341 00342 ph->RegisterProcess(kmsc, particle); 00343 ph->RegisterProcess(hIoni, particle); 00344 ph->RegisterProcess(kb, particle); 00345 ph->RegisterProcess(kp, particle); 00346 00347 } else if (particleName == "proton" || 00348 particleName == "anti_proton") { 00349 00350 G4hIonisation* hIoni = new G4hIonisation(); 00351 hIoni->SetStepFunction(0.2, 50*um); 00352 00353 ph->RegisterProcess(pmsc, particle); 00354 ph->RegisterProcess(hIoni, particle); 00355 ph->RegisterProcess(pb, particle); 00356 ph->RegisterProcess(pp, particle); 00357 00358 } else if (particleName == "B+" || 00359 particleName == "B-" || 00360 particleName == "D+" || 00361 particleName == "D-" || 00362 particleName == "Ds+" || 00363 particleName == "Ds-" || 00364 particleName == "anti_He3" || 00365 particleName == "anti_alpha" || 00366 particleName == "anti_deuteron" || 00367 particleName == "anti_lambda_c+" || 00368 particleName == "anti_omega-" || 00369 particleName == "anti_sigma_c+" || 00370 particleName == "anti_sigma_c++" || 00371 particleName == "anti_sigma+" || 00372 particleName == "anti_sigma-" || 00373 particleName == "anti_triton" || 00374 particleName == "anti_xi_c+" || 00375 particleName == "anti_xi-" || 00376 particleName == "deuteron" || 00377 particleName == "lambda_c+" || 00378 particleName == "omega-" || 00379 particleName == "sigma_c+" || 00380 particleName == "sigma_c++" || 00381 particleName == "sigma+" || 00382 particleName == "sigma-" || 00383 particleName == "tau+" || 00384 particleName == "tau-" || 00385 particleName == "triton" || 00386 particleName == "xi_c+" || 00387 particleName == "xi-" ) { 00388 00389 // Identical to G4EmStandardPhysics_option3 00390 00391 ph->RegisterProcess(hmsc, particle); 00392 ph->RegisterProcess(new G4hIonisation(), particle); 00393 00394 } 00395 } 00396 00397 // Em options 00398 // 00399 G4EmProcessOptions opt; 00400 opt.SetVerbose(verbose); 00401 00402 // Multiple Coulomb scattering 00403 // 00404 opt.SetPolarAngleLimit(CLHEP::pi); 00405 00406 // Physics tables 00407 // 00408 00409 opt.SetMinEnergy(100*eV); 00410 opt.SetMaxEnergy(10*TeV); 00411 opt.SetDEDXBinning(220); 00412 opt.SetLambdaBinning(220); 00413 00414 // Ionization 00415 // 00416 //opt.SetSubCutoff(true); 00417 00418 // Deexcitation 00419 // 00420 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation(); 00421 G4LossTableManager::Instance()->SetAtomDeexcitation(de); 00422 de->SetFluo(true); 00423 }