G4EmLowEPPhysics Class Reference

#include <G4EmLowEPPhysics.hh>

Inheritance diagram for G4EmLowEPPhysics:

G4VPhysicsConstructor

Public Member Functions

 G4EmLowEPPhysics (G4int ver=1)
 G4EmLowEPPhysics (G4int ver, const G4String &name)
virtual ~G4EmLowEPPhysics ()
virtual void ConstructParticle ()
virtual void ConstructProcess ()

Detailed Description

Definition at line 35 of file G4EmLowEPPhysics.hh.


Constructor & Destructor Documentation

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 }

G4EmLowEPPhysics::G4EmLowEPPhysics ( G4int  ver,
const G4String name 
)

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]

Definition at line 144 of file G4EmLowEPPhysics.cc.

00145 {}


Member Function Documentation

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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:53 2013 for Geant4 by  doxygen 1.4.7