#include <G4EmLivermorePolarizedPhysics.hh>
Inheritance diagram for G4EmLivermorePolarizedPhysics:
Public Member Functions | |
G4EmLivermorePolarizedPhysics (G4int ver=1) | |
G4EmLivermorePolarizedPhysics (G4int ver, const G4String &) | |
virtual | ~G4EmLivermorePolarizedPhysics () |
virtual void | ConstructParticle () |
virtual void | ConstructProcess () |
Definition at line 36 of file G4EmLivermorePolarizedPhysics.hh.
G4EmLivermorePolarizedPhysics::G4EmLivermorePolarizedPhysics | ( | G4int | ver = 1 |
) |
Definition at line 126 of file G4EmLivermorePolarizedPhysics.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00127 : G4VPhysicsConstructor("G4EmLivermorePolarizedPhysics"), verbose(ver) 00128 { 00129 G4LossTableManager::Instance(); 00130 SetPhysicsType(bElectromagnetic); 00131 }
Definition at line 135 of file G4EmLivermorePolarizedPhysics.cc.
References bElectromagnetic, G4LossTableManager::Instance(), and G4VPhysicsConstructor::SetPhysicsType().
00136 : G4VPhysicsConstructor("G4EmLivermorePolarizedPhysics"), verbose(ver) 00137 { 00138 G4LossTableManager::Instance(); 00139 SetPhysicsType(bElectromagnetic); 00140 }
G4EmLivermorePolarizedPhysics::~G4EmLivermorePolarizedPhysics | ( | ) | [virtual] |
void G4EmLivermorePolarizedPhysics::ConstructParticle | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 149 of file G4EmLivermorePolarizedPhysics.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 G4EmLivermorePolarizedPhysics::ConstructProcess | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 180 of file G4EmLivermorePolarizedPhysics.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::SetActivationLowEnergyLimit(), G4LossTableManager::SetAtomDeexcitation(), G4EmProcessOptions::SetDEDXBinning(), G4VEnergyLossProcess::SetEmModel(), G4VEmProcess::SetEmModel(), G4VAtomDeexcitation::SetFluo(), G4VEmModel::SetHighEnergyLimit(), G4EmProcessOptions::SetLambdaBinning(), G4VEmModel::SetLowEnergyLimit(), G4EmProcessOptions::SetMaxEnergy(), G4VEmProcess::SetMaxKinEnergy(), G4EmProcessOptions::SetMinEnergy(), G4VEmProcess::SetMinKinEnergy(), 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 G4MuMultipleScattering* pimsc = new G4MuMultipleScattering(); 00198 pimsc->AddEmModel(0, new G4WentzelVIModel()); 00199 G4MuMultipleScattering* kmsc = new G4MuMultipleScattering(); 00200 kmsc->AddEmModel(0, new G4WentzelVIModel()); 00201 G4MuMultipleScattering* pmsc = new G4MuMultipleScattering(); 00202 pmsc->AddEmModel(0, new G4WentzelVIModel()); 00203 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc"); 00204 00205 // high energy limit for e+- scattering models 00206 G4double highEnergyLimit = 100*MeV; 00207 00208 // nuclear stopping 00209 G4NuclearStopping* ionnuc = new G4NuclearStopping(); 00210 G4NuclearStopping* pnuc = new G4NuclearStopping(); 00211 00212 // Add Livermore EM Processes 00213 theParticleIterator->reset(); 00214 00215 while( (*theParticleIterator)() ){ 00216 00217 G4ParticleDefinition* particle = theParticleIterator->value(); 00218 G4String particleName = particle->GetParticleName(); 00219 00220 if(verbose > 1) 00221 G4cout << "### " << GetPhysicsName() << " instantiates for " 00222 << particleName << G4endl; 00223 00224 //Applicability range for Livermore models 00225 //for higher energies, the Standard models are used 00226 G4double LivermoreHighEnergyLimit = GeV; 00227 00228 if (particleName == "gamma") { 00229 00230 G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect(); 00231 G4LivermorePolarizedPhotoElectricModel* theLivermorePhotoElectricModel = new G4LivermorePolarizedPhotoElectricModel(); 00232 theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00233 thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel); 00234 ph->RegisterProcess(thePhotoElectricEffect, particle); 00235 00236 G4ComptonScattering* theComptonScattering = new G4ComptonScattering(); 00237 G4LivermorePolarizedComptonModel* theLivermoreComptonModel = new G4LivermorePolarizedComptonModel(); 00238 theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00239 theComptonScattering->AddEmModel(0, theLivermoreComptonModel); 00240 ph->RegisterProcess(theComptonScattering, particle); 00241 00242 G4GammaConversion* theGammaConversion = new G4GammaConversion(); 00243 G4LivermorePolarizedGammaConversionModel* theLivermoreGammaConversionModel = new G4LivermorePolarizedGammaConversionModel(); 00244 theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00245 theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel); 00246 ph->RegisterProcess(theGammaConversion, particle); 00247 00248 G4RayleighScattering* theRayleigh = new G4RayleighScattering(); 00249 G4LivermorePolarizedRayleighModel* theRayleighModel = new G4LivermorePolarizedRayleighModel(); 00250 theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit); 00251 theRayleigh->AddEmModel(0, theRayleighModel); 00252 ph->RegisterProcess(theRayleigh, particle); 00253 00254 } else if (particleName == "e-") { 00255 00256 // multiple scattering 00257 G4eMultipleScattering* msc = new G4eMultipleScattering; 00258 msc->SetStepLimitType(fUseDistanceToBoundary); 00259 G4UrbanMscModel95* msc1 = new G4UrbanMscModel95(); 00260 G4WentzelVIModel* msc2 = new G4WentzelVIModel(); 00261 msc1->SetHighEnergyLimit(highEnergyLimit); 00262 msc2->SetLowEnergyLimit(highEnergyLimit); 00263 msc->AddEmModel(0, msc1); 00264 msc->AddEmModel(0, msc2); 00265 00266 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel(); 00267 G4CoulombScattering* ss = new G4CoulombScattering(); 00268 ss->SetEmModel(ssm, 1); 00269 ss->SetMinKinEnergy(highEnergyLimit); 00270 ssm->SetLowEnergyLimit(highEnergyLimit); 00271 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 00272 ph->RegisterProcess(msc, particle); 00273 ph->RegisterProcess(ss, particle); 00274 00275 // Ionisation 00276 G4eIonisation* eIoni = new G4eIonisation(); 00277 G4LivermoreIonisationModel* theIoniLivermore = new 00278 G4LivermoreIonisationModel(); 00279 theIoniLivermore->SetHighEnergyLimit(0.1*MeV); 00280 eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() ); 00281 eIoni->SetStepFunction(0.2, 100*um); // 00282 ph->RegisterProcess(eIoni, particle); 00283 00284 // Bremsstrahlung from standard 00285 G4eBremsstrahlung* eBrem = new G4eBremsstrahlung(); 00286 ph->RegisterProcess(eBrem, particle); 00287 00288 } else if (particleName == "e+") { 00289 00290 // multiple scattering 00291 G4eMultipleScattering* msc = new G4eMultipleScattering; 00292 msc->SetStepLimitType(fUseDistanceToBoundary); 00293 G4UrbanMscModel95* msc1 = new G4UrbanMscModel95(); 00294 G4WentzelVIModel* msc2 = new G4WentzelVIModel(); 00295 msc1->SetHighEnergyLimit(highEnergyLimit); 00296 msc2->SetLowEnergyLimit(highEnergyLimit); 00297 msc->AddEmModel(0, msc1); 00298 msc->AddEmModel(0, msc2); 00299 00300 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel(); 00301 G4CoulombScattering* ss = new G4CoulombScattering(); 00302 ss->SetEmModel(ssm, 1); 00303 ss->SetMinKinEnergy(highEnergyLimit); 00304 ssm->SetLowEnergyLimit(highEnergyLimit); 00305 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 00306 00307 // Ionisation 00308 G4eIonisation* eIoni = new G4eIonisation(); 00309 eIoni->SetStepFunction(0.2, 100*um); 00310 00311 ph->RegisterProcess(msc, particle); 00312 ph->RegisterProcess(eIoni, particle); 00313 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 00314 ph->RegisterProcess(new G4eplusAnnihilation(), particle); 00315 ph->RegisterProcess(ss, particle); 00316 00317 } else if (particleName == "mu+" || 00318 particleName == "mu-" ) { 00319 00320 G4MuIonisation* muIoni = new G4MuIonisation(); 00321 muIoni->SetStepFunction(0.2, 50*um); 00322 00323 ph->RegisterProcess(mumsc, particle); 00324 ph->RegisterProcess(muIoni, particle); 00325 ph->RegisterProcess(mub, particle); 00326 ph->RegisterProcess(mup, particle); 00327 ph->RegisterProcess(new G4CoulombScattering(), particle); 00328 00329 } else if (particleName == "alpha" || 00330 particleName == "He3" ) { 00331 00332 // Identical to G4EmStandardPhysics_option3 00333 00334 G4hMultipleScattering* msc = new G4hMultipleScattering(); 00335 G4ionIonisation* ionIoni = new G4ionIonisation(); 00336 ionIoni->SetStepFunction(0.1, 10*um); 00337 00338 ph->RegisterProcess(msc, particle); 00339 ph->RegisterProcess(ionIoni, particle); 00340 ph->RegisterProcess(ionnuc, particle); 00341 00342 } else if (particleName == "GenericIon") { 00343 00344 // Identical to G4EmStandardPhysics_option3 00345 00346 G4ionIonisation* ionIoni = new G4ionIonisation(); 00347 ionIoni->SetEmModel(new G4IonParametrisedLossModel()); 00348 ionIoni->SetStepFunction(0.1, 1*um); 00349 00350 ph->RegisterProcess(hmsc, particle); 00351 ph->RegisterProcess(ionIoni, particle); 00352 ph->RegisterProcess(ionnuc, particle); 00353 00354 } else if (particleName == "pi+" || 00355 particleName == "pi-" ) { 00356 00357 //G4hMultipleScattering* pimsc = new G4hMultipleScattering(); 00358 G4hIonisation* hIoni = new G4hIonisation(); 00359 hIoni->SetStepFunction(0.2, 50*um); 00360 00361 ph->RegisterProcess(pimsc, particle); 00362 ph->RegisterProcess(hIoni, particle); 00363 ph->RegisterProcess(pib, particle); 00364 ph->RegisterProcess(pip, particle); 00365 00366 } else if (particleName == "kaon+" || 00367 particleName == "kaon-" ) { 00368 00369 //G4hMultipleScattering* kmsc = new G4hMultipleScattering(); 00370 G4hIonisation* hIoni = new G4hIonisation(); 00371 hIoni->SetStepFunction(0.2, 50*um); 00372 00373 ph->RegisterProcess(kmsc, particle); 00374 ph->RegisterProcess(hIoni, particle); 00375 ph->RegisterProcess(kb, particle); 00376 ph->RegisterProcess(kp, particle); 00377 00378 } else if (particleName == "proton" || 00379 particleName == "anti_proton") { 00380 00381 //G4hMultipleScattering* pmsc = new G4hMultipleScattering(); 00382 G4hIonisation* hIoni = new G4hIonisation(); 00383 hIoni->SetStepFunction(0.2, 50*um); 00384 00385 ph->RegisterProcess(pmsc, particle); 00386 ph->RegisterProcess(hIoni, particle); 00387 ph->RegisterProcess(pb, particle); 00388 ph->RegisterProcess(pp, particle); 00389 ph->RegisterProcess(pnuc, particle); 00390 00391 } else if (particleName == "B+" || 00392 particleName == "B-" || 00393 particleName == "D+" || 00394 particleName == "D-" || 00395 particleName == "Ds+" || 00396 particleName == "Ds-" || 00397 particleName == "anti_He3" || 00398 particleName == "anti_alpha" || 00399 particleName == "anti_deuteron" || 00400 particleName == "anti_lambda_c+" || 00401 particleName == "anti_omega-" || 00402 particleName == "anti_sigma_c+" || 00403 particleName == "anti_sigma_c++" || 00404 particleName == "anti_sigma+" || 00405 particleName == "anti_sigma-" || 00406 particleName == "anti_triton" || 00407 particleName == "anti_xi_c+" || 00408 particleName == "anti_xi-" || 00409 particleName == "deuteron" || 00410 particleName == "lambda_c+" || 00411 particleName == "omega-" || 00412 particleName == "sigma_c+" || 00413 particleName == "sigma_c++" || 00414 particleName == "sigma+" || 00415 particleName == "sigma-" || 00416 particleName == "tau+" || 00417 particleName == "tau-" || 00418 particleName == "triton" || 00419 particleName == "xi_c+" || 00420 particleName == "xi-" ) { 00421 00422 // Identical to G4EmStandardPhysics_option3 00423 00424 ph->RegisterProcess(hmsc, particle); 00425 ph->RegisterProcess(new G4hIonisation(), particle); 00426 ph->RegisterProcess(pnuc, particle); 00427 } 00428 } 00429 00430 // Em options 00431 // 00432 G4EmProcessOptions opt; 00433 opt.SetVerbose(verbose); 00434 00435 // Multiple Coulomb scattering 00436 // 00437 opt.SetPolarAngleLimit(CLHEP::pi); 00438 00439 // Physics tables 00440 // 00441 00442 opt.SetMinEnergy(100*eV); 00443 opt.SetMaxEnergy(10*TeV); 00444 opt.SetDEDXBinning(220); 00445 opt.SetLambdaBinning(220); 00446 00447 // Nuclear stopping 00448 pnuc->SetMaxKinEnergy(MeV); 00449 00450 // Ionization 00451 // 00452 //opt.SetSubCutoff(true); 00453 00454 // Deexcitation 00455 // 00456 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation(); 00457 G4LossTableManager::Instance()->SetAtomDeexcitation(de); 00458 de->SetFluo(true); 00459 }