#include <G4EmStandardPhysics_option2.hh>
Inheritance diagram for G4EmStandardPhysics_option2:
Public Member Functions | |
G4EmStandardPhysics_option2 (G4int ver=1) | |
G4EmStandardPhysics_option2 (G4int ver, const G4String &name) | |
virtual | ~G4EmStandardPhysics_option2 () |
virtual void | ConstructParticle () |
virtual void | ConstructProcess () |
Definition at line 55 of file G4EmStandardPhysics_option2.hh.
G4EmStandardPhysics_option2::G4EmStandardPhysics_option2 | ( | G4int | ver = 1 |
) |
Definition at line 124 of file G4EmStandardPhysics_option2.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00125 : G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver) 00126 { 00127 G4LossTableManager::Instance(); 00128 SetPhysicsType(bElectromagnetic); 00129 }
Definition at line 133 of file G4EmStandardPhysics_option2.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00134 : G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver) 00135 { 00136 G4LossTableManager::Instance(); 00137 SetPhysicsType(bElectromagnetic); 00138 }
G4EmStandardPhysics_option2::~G4EmStandardPhysics_option2 | ( | ) | [virtual] |
void G4EmStandardPhysics_option2::ConstructParticle | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 147 of file G4EmStandardPhysics_option2.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().
00148 { 00149 // gamma 00150 G4Gamma::Gamma(); 00151 00152 // leptons 00153 G4Electron::Electron(); 00154 G4Positron::Positron(); 00155 G4MuonPlus::MuonPlus(); 00156 G4MuonMinus::MuonMinus(); 00157 00158 // mesons 00159 G4PionPlus::PionPlusDefinition(); 00160 G4PionMinus::PionMinusDefinition(); 00161 G4KaonPlus::KaonPlusDefinition(); 00162 G4KaonMinus::KaonMinusDefinition(); 00163 00164 // barions 00165 G4Proton::Proton(); 00166 G4AntiProton::AntiProton(); 00167 00168 // ions 00169 G4Deuteron::Deuteron(); 00170 G4Triton::Triton(); 00171 G4He3::He3(); 00172 G4Alpha::Alpha(); 00173 G4GenericIon::GenericIonDefinition(); 00174 }
void G4EmStandardPhysics_option2::ConstructProcess | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 178 of file G4EmStandardPhysics_option2.cc.
References G4VMultipleScattering::AddEmModel(), fMinimal, G4cout, G4endl, G4ParticleDefinition::GetParticleName(), G4PhysicsListHelper::GetPhysicsListHelper(), G4VPhysicsConstructor::GetPhysicsName(), G4LossTableManager::Instance(), G4INCL::Math::pi, G4InuclParticleNames::pip, G4InuclParticleNames::pp, G4PhysicsListHelper::RegisterProcess(), G4ParticleTableIterator< K, V >::reset(), G4VEmModel::SetActivationLowEnergyLimit(), G4VEmModel::SetAngularDistribution(), G4EmProcessOptions::SetApplyCuts(), G4LossTableManager::SetAtomDeexcitation(), G4VEnergyLossProcess::SetEmModel(), G4VEmProcess::SetEmModel(), G4VEmModel::SetHighEnergyLimit(), G4VEmModel::SetLowEnergyLimit(), G4VEmProcess::SetMinKinEnergy(), G4EmProcessOptions::SetPolarAngleLimit(), G4VEnergyLossProcess::SetStepFunction(), G4VMultipleScattering::SetStepLimitType(), G4EmProcessOptions::SetVerbose(), G4VPhysicsConstructor::theParticleIterator, and G4ParticleTableIterator< K, V >::value().
00179 { 00180 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); 00181 00182 // muon & hadron bremsstrahlung and pair production 00183 G4MuBremsstrahlung* mub = new G4MuBremsstrahlung(); 00184 G4MuPairProduction* mup = new G4MuPairProduction(); 00185 G4hBremsstrahlung* pib = new G4hBremsstrahlung(); 00186 G4hPairProduction* pip = new G4hPairProduction(); 00187 G4hBremsstrahlung* kb = new G4hBremsstrahlung(); 00188 G4hPairProduction* kp = new G4hPairProduction(); 00189 G4hBremsstrahlung* pb = new G4hBremsstrahlung(); 00190 G4hPairProduction* pp = new G4hPairProduction(); 00191 00192 // muon & hadron multiple scattering 00193 G4MuMultipleScattering* mumsc = new G4MuMultipleScattering(); 00194 mumsc->AddEmModel(0, new G4WentzelVIModel()); 00195 G4hMultipleScattering* pmsc = new G4hMultipleScattering(); 00196 pmsc->AddEmModel(0, new G4WentzelVIModel()); 00197 G4hMultipleScattering* pimsc = new G4hMultipleScattering(); 00198 pimsc->AddEmModel(0, new G4WentzelVIModel()); 00199 G4hMultipleScattering* kmsc = new G4hMultipleScattering(); 00200 kmsc->AddEmModel(0, new G4WentzelVIModel()); 00201 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc"); 00202 00203 // high energy limit for e+- scattering models and bremsstrahlung 00204 G4double highEnergyLimit = 100*MeV; 00205 00206 // Add standard EM Processes 00207 theParticleIterator->reset(); 00208 while( (*theParticleIterator)() ){ 00209 G4ParticleDefinition* particle = theParticleIterator->value(); 00210 G4String particleName = particle->GetParticleName(); 00211 if(verbose > 1) 00212 G4cout << "### " << GetPhysicsName() << " instantiates for " 00213 << particleName << G4endl; 00214 00215 if (particleName == "gamma") { 00216 00217 ph->RegisterProcess(new G4PhotoElectricEffect(), particle); 00218 ph->RegisterProcess(new G4ComptonScattering(), particle); 00219 ph->RegisterProcess(new G4GammaConversion(), particle); 00220 ph->RegisterProcess(new G4RayleighScattering(), particle); 00221 00222 } else if (particleName == "e-") { 00223 00224 G4eIonisation* eioni = new G4eIonisation(); 00225 eioni->SetStepFunction(0.8, 1.0*mm); 00226 00227 G4eMultipleScattering* msc = new G4eMultipleScattering; 00228 msc->SetStepLimitType(fMinimal); 00229 G4UrbanMscModel93* msc1 = new G4UrbanMscModel93(); 00230 G4WentzelVIModel* msc2 = new G4WentzelVIModel(); 00231 msc1->SetHighEnergyLimit(highEnergyLimit); 00232 msc2->SetLowEnergyLimit(highEnergyLimit); 00233 msc->AddEmModel(0, msc1); 00234 msc->AddEmModel(0, msc2); 00235 00236 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel(); 00237 G4CoulombScattering* ss = new G4CoulombScattering(); 00238 ss->SetEmModel(ssm, 1); 00239 ss->SetMinKinEnergy(highEnergyLimit); 00240 ssm->SetLowEnergyLimit(highEnergyLimit); 00241 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 00242 00243 G4eBremsstrahlung* brem = new G4eBremsstrahlung(); 00244 G4SeltzerBergerModel* br1 = new G4SeltzerBergerModel(); 00245 G4eBremsstrahlungRelModel* br2 = new G4eBremsstrahlungRelModel(); 00246 br1->SetAngularDistribution(new G4Generator2BS()); 00247 br2->SetAngularDistribution(new G4Generator2BS()); 00248 brem->SetEmModel(br1,1); 00249 brem->SetEmModel(br2,2); 00250 br2->SetLowEnergyLimit(GeV); 00251 00252 ph->RegisterProcess(msc, particle); 00253 ph->RegisterProcess(eioni, particle); 00254 ph->RegisterProcess(brem, particle); 00255 ph->RegisterProcess(ss, particle); 00256 00257 } else if (particleName == "e+") { 00258 00259 G4eIonisation* eioni = new G4eIonisation(); 00260 eioni->SetStepFunction(0.8, 1.0*mm); 00261 00262 G4eMultipleScattering* msc = new G4eMultipleScattering; 00263 msc->SetStepLimitType(fMinimal); 00264 G4UrbanMscModel93* msc1 = new G4UrbanMscModel93(); 00265 G4WentzelVIModel* msc2 = new G4WentzelVIModel(); 00266 msc1->SetHighEnergyLimit(highEnergyLimit); 00267 msc2->SetLowEnergyLimit(highEnergyLimit); 00268 msc->AddEmModel(0, msc1); 00269 msc->AddEmModel(0, msc2); 00270 00271 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel(); 00272 G4CoulombScattering* ss = new G4CoulombScattering(); 00273 ss->SetEmModel(ssm, 1); 00274 ss->SetMinKinEnergy(highEnergyLimit); 00275 ssm->SetLowEnergyLimit(highEnergyLimit); 00276 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 00277 00278 ph->RegisterProcess(msc, particle); 00279 ph->RegisterProcess(eioni, particle); 00280 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 00281 ph->RegisterProcess(new G4eplusAnnihilation(), particle); 00282 ph->RegisterProcess(ss, particle); 00283 00284 } else if (particleName == "mu+" || 00285 particleName == "mu-" ) { 00286 00287 ph->RegisterProcess(mumsc, particle); 00288 ph->RegisterProcess(new G4MuIonisation(), particle); 00289 ph->RegisterProcess(mub, particle); 00290 ph->RegisterProcess(mup, particle); 00291 ph->RegisterProcess(new G4CoulombScattering(), particle); 00292 00293 } else if (particleName == "alpha" || 00294 particleName == "He3") { 00295 00296 //ph->RegisterProcess(hmsc, particle); 00297 ph->RegisterProcess(new G4hMultipleScattering(), particle); 00298 ph->RegisterProcess(new G4ionIonisation(), particle); 00299 00300 } else if (particleName == "GenericIon") { 00301 00302 G4ionIonisation* ionIoni = new G4ionIonisation(); 00303 //ionIoni->SetEmModel(new G4IonParametrisedLossModel()); 00304 //ionIoni->SetStepFunction(0.1, 20*um); 00305 00306 ph->RegisterProcess(hmsc, particle); 00307 ph->RegisterProcess(ionIoni, particle); 00308 00309 } else if (particleName == "pi+" || 00310 particleName == "pi-" ) { 00311 00312 ph->RegisterProcess(pimsc, particle); 00313 ph->RegisterProcess(new G4hIonisation(), particle); 00314 ph->RegisterProcess(pib, particle); 00315 ph->RegisterProcess(pip, particle); 00316 00317 } else if (particleName == "kaon+" || 00318 particleName == "kaon-" ) { 00319 00320 ph->RegisterProcess(kmsc, particle); 00321 ph->RegisterProcess(new G4hIonisation(), particle); 00322 ph->RegisterProcess(kb, particle); 00323 ph->RegisterProcess(kp, particle); 00324 00325 } else if (particleName == "proton" || 00326 particleName == "anti_proton") { 00327 00328 ph->RegisterProcess(pmsc, particle); 00329 ph->RegisterProcess(new G4hIonisation(), particle); 00330 ph->RegisterProcess(pb, particle); 00331 ph->RegisterProcess(pp, particle); 00332 00333 } else if (particleName == "B+" || 00334 particleName == "B-" || 00335 particleName == "D+" || 00336 particleName == "D-" || 00337 particleName == "Ds+" || 00338 particleName == "Ds-" || 00339 particleName == "anti_He3" || 00340 particleName == "anti_alpha" || 00341 particleName == "anti_deuteron" || 00342 particleName == "anti_lambda_c+" || 00343 particleName == "anti_omega-" || 00344 particleName == "anti_sigma_c+" || 00345 particleName == "anti_sigma_c++" || 00346 particleName == "anti_sigma+" || 00347 particleName == "anti_sigma-" || 00348 particleName == "anti_triton" || 00349 particleName == "anti_xi_c+" || 00350 particleName == "anti_xi-" || 00351 particleName == "deuteron" || 00352 particleName == "lambda_c+" || 00353 particleName == "omega-" || 00354 particleName == "sigma_c+" || 00355 particleName == "sigma_c++" || 00356 particleName == "sigma+" || 00357 particleName == "sigma-" || 00358 particleName == "tau+" || 00359 particleName == "tau-" || 00360 particleName == "triton" || 00361 particleName == "xi_c+" || 00362 particleName == "xi-" ) { 00363 00364 ph->RegisterProcess(hmsc, particle); 00365 ph->RegisterProcess(new G4hIonisation(), particle); 00366 } 00367 } 00368 00369 // Em options 00370 // 00371 G4EmProcessOptions opt; 00372 opt.SetVerbose(verbose); 00373 opt.SetApplyCuts(true); 00374 00375 // Scattering options 00376 // 00377 opt.SetPolarAngleLimit(CLHEP::pi); 00378 00379 // Ionization 00380 // 00381 //opt.SetSubCutoff(true); 00382 00383 // Deexcitation 00384 // 00385 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation(); 00386 G4LossTableManager::Instance()->SetAtomDeexcitation(de); 00387 00388 }