G4EmStandardPhysics_option3.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 //---------------------------------------------------------------------------
00029 //
00030 // ClassName:   G4EmStandardPhysics_option3
00031 //
00032 // Author:      V.Ivanchenko 13.03.2008
00033 //
00034 // Modified:
00035 // 21.04.2008 V.Ivanchenko add long-lived D and B mesons; use spline
00036 // 28.05.2008 V.Ivanchenko linLossLimit=0.01 for ions 0.001 for others
00037 //
00038 //----------------------------------------------------------------------------
00039 //
00040 
00041 #include "G4EmStandardPhysics_option3.hh"
00042 
00043 #include "G4SystemOfUnits.hh"
00044 #include "G4ParticleDefinition.hh"
00045 #include "G4LossTableManager.hh"
00046 #include "G4EmProcessOptions.hh"
00047 
00048 #include "G4ComptonScattering.hh"
00049 #include "G4GammaConversion.hh"
00050 #include "G4PhotoElectricEffect.hh"
00051 #include "G4RayleighScattering.hh"
00052 #include "G4PEEffectFluoModel.hh"
00053 #include "G4KleinNishinaModel.hh"
00054 
00055 #include "G4eMultipleScattering.hh"
00056 #include "G4MuMultipleScattering.hh"
00057 #include "G4hMultipleScattering.hh"
00058 #include "G4MscStepLimitType.hh"
00059 #include "G4UrbanMscModel93.hh"
00060 #include "G4UrbanMscModel95.hh"
00061 #include "G4DummyModel.hh"
00062 #include "G4WentzelVIModel.hh"
00063 #include "G4CoulombScattering.hh"
00064 
00065 #include "G4eIonisation.hh"
00066 #include "G4eBremsstrahlung.hh"
00067 #include "G4Generator2BS.hh"
00068 #include "G4SeltzerBergerModel.hh"
00069 
00070 #include "G4eplusAnnihilation.hh"
00071 #include "G4UAtomicDeexcitation.hh"
00072 
00073 #include "G4MuIonisation.hh"
00074 #include "G4MuBremsstrahlung.hh"
00075 #include "G4MuPairProduction.hh"
00076 #include "G4hBremsstrahlung.hh"
00077 #include "G4hPairProduction.hh"
00078 
00079 #include "G4MuBremsstrahlungModel.hh"
00080 #include "G4MuPairProductionModel.hh"
00081 #include "G4hBremsstrahlungModel.hh"
00082 #include "G4hPairProductionModel.hh"
00083 
00084 #include "G4hIonisation.hh"
00085 #include "G4ionIonisation.hh"
00086 #include "G4IonParametrisedLossModel.hh"
00087 #include "G4NuclearStopping.hh"
00088 
00089 #include "G4Gamma.hh"
00090 #include "G4Electron.hh"
00091 #include "G4Positron.hh"
00092 #include "G4MuonPlus.hh"
00093 #include "G4MuonMinus.hh"
00094 #include "G4PionPlus.hh"
00095 #include "G4PionMinus.hh"
00096 #include "G4KaonPlus.hh"
00097 #include "G4KaonMinus.hh"
00098 #include "G4Proton.hh"
00099 #include "G4AntiProton.hh"
00100 #include "G4Deuteron.hh"
00101 #include "G4Triton.hh"
00102 #include "G4He3.hh"
00103 #include "G4Alpha.hh"
00104 #include "G4GenericIon.hh"
00105 
00106 #include "G4PhysicsListHelper.hh"
00107 #include "G4BuilderType.hh"
00108 
00109 // factory
00110 #include "G4PhysicsConstructorFactory.hh"
00111 //
00112 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmStandardPhysics_option3);
00113 
00114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00115 
00116 G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver)
00117   : G4VPhysicsConstructor("G4EmStandard_opt3"), verbose(ver)
00118 {
00119   G4LossTableManager::Instance();
00120   SetPhysicsType(bElectromagnetic);
00121 }
00122 
00123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00124 
00125 G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver, const G4String&)
00126   : G4VPhysicsConstructor("G4EmStandard_opt3"), verbose(ver)
00127 {
00128   G4LossTableManager::Instance();
00129   SetPhysicsType(bElectromagnetic);
00130 }
00131 
00132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00133 
00134 G4EmStandardPhysics_option3::~G4EmStandardPhysics_option3()
00135 {}
00136 
00137 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00138 
00139 void G4EmStandardPhysics_option3::ConstructParticle()
00140 {
00141 // gamma
00142   G4Gamma::Gamma();
00143 
00144 // leptons
00145   G4Electron::Electron();
00146   G4Positron::Positron();
00147   G4MuonPlus::MuonPlus();
00148   G4MuonMinus::MuonMinus();
00149 
00150 // mesons
00151   G4PionPlus::PionPlusDefinition();
00152   G4PionMinus::PionMinusDefinition();
00153   G4KaonPlus::KaonPlusDefinition();
00154   G4KaonMinus::KaonMinusDefinition();
00155 
00156 // barions
00157   G4Proton::Proton();
00158   G4AntiProton::AntiProton();
00159 
00160 // ions
00161   G4Deuteron::Deuteron();
00162   G4Triton::Triton();
00163   G4He3::He3();
00164   G4Alpha::Alpha();
00165   G4GenericIon::GenericIonDefinition();
00166 }
00167 
00168 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00169 
00170 void G4EmStandardPhysics_option3::ConstructProcess()
00171 {
00172   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00173 
00174   // muon & hadron bremsstrahlung and pair production
00175   G4MuBremsstrahlung* mub = new G4MuBremsstrahlung();
00176   G4MuPairProduction* mup = new G4MuPairProduction();
00177   G4hBremsstrahlung* pib = new G4hBremsstrahlung();
00178   G4hPairProduction* pip = new G4hPairProduction();
00179   G4hBremsstrahlung* kb = new G4hBremsstrahlung();
00180   G4hPairProduction* kp = new G4hPairProduction();
00181   G4hBremsstrahlung* pb = new G4hBremsstrahlung();
00182   G4hPairProduction* pp = new G4hPairProduction();
00183 
00184   // muon & hadron multiple scattering
00185   G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
00186   mumsc->AddEmModel(0, new G4WentzelVIModel());
00187   //G4hMultipleScattering* pimsc = new G4hMultipleScattering();
00188   // pimsc->AddEmModel(0, new G4WentzelVIModel());
00189   // G4hMultipleScattering* kmsc = new G4hMultipleScattering();
00190   // kmsc->AddEmModel(0, new G4WentzelVIModel());
00191   //G4hMultipleScattering* pmsc = new G4hMultipleScattering();
00192   //pmsc->AddEmModel(0, new G4WentzelVIModel());
00193   G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
00194 
00195   // nuclear stopping
00196   G4NuclearStopping* ionnuc = new G4NuclearStopping();
00197   G4NuclearStopping* pnuc = new G4NuclearStopping();
00198 
00199   // Add standard EM Processes
00200   theParticleIterator->reset();
00201   while( (*theParticleIterator)() ){
00202     G4ParticleDefinition* particle = theParticleIterator->value();
00203     G4String particleName = particle->GetParticleName();
00204     if(verbose > 1)
00205       G4cout << "### " << GetPhysicsName() << " instantiates for " 
00206              << particleName << G4endl;
00207 
00208     if (particleName == "gamma") {
00209 
00210       G4ComptonScattering* cs = new G4ComptonScattering;
00211       cs->SetEmModel(new G4KleinNishinaModel());
00212 
00213       ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
00214       ph->RegisterProcess(cs, particle);
00215       ph->RegisterProcess(new G4GammaConversion(), particle);
00216       ph->RegisterProcess(new G4RayleighScattering(), particle);
00217  
00218     } else if (particleName == "e-") {
00219 
00220       G4eMultipleScattering* msc = new G4eMultipleScattering();
00221       //msc->AddEmModel(0, new G4UrbanMscModel95());
00222       msc->SetStepLimitType(fUseDistanceToBoundary);
00223       G4eIonisation* eIoni = new G4eIonisation();
00224       eIoni->SetStepFunction(0.2, 100*um);      
00225 
00226       G4eBremsstrahlung* brem = new G4eBremsstrahlung();
00227       ph->RegisterProcess(msc, particle);
00228       ph->RegisterProcess(eIoni, particle);
00229       ph->RegisterProcess(brem, particle);
00230 
00231     } else if (particleName == "e+") {
00232 
00233       G4eMultipleScattering* msc = new G4eMultipleScattering();
00234       //msc->AddEmModel(0, new G4UrbanMscModel95());
00235       msc->SetStepLimitType(fUseDistanceToBoundary);
00236       G4eIonisation* eIoni = new G4eIonisation();
00237       eIoni->SetStepFunction(0.2, 100*um);      
00238 
00239       ph->RegisterProcess(msc, particle);
00240       ph->RegisterProcess(eIoni, particle);
00241       ph->RegisterProcess(new G4eBremsstrahlung(), particle);
00242       ph->RegisterProcess(new G4eplusAnnihilation(), particle);
00243 
00244     } else if (particleName == "mu+" ||
00245                particleName == "mu-"    ) {
00246 
00247       G4MuIonisation* muIoni = new G4MuIonisation();
00248       muIoni->SetStepFunction(0.2, 50*um);          
00249 
00250       ph->RegisterProcess(mumsc, particle);
00251       ph->RegisterProcess(muIoni, particle);
00252       ph->RegisterProcess(mub, particle);
00253       ph->RegisterProcess(mup, particle);
00254       ph->RegisterProcess(new G4CoulombScattering(), particle);
00255 
00256     } else if (particleName == "alpha" ||
00257                particleName == "He3") {
00258 
00259       G4hMultipleScattering* msc = new G4hMultipleScattering();
00260       G4ionIonisation* ionIoni = new G4ionIonisation();
00261       ionIoni->SetStepFunction(0.1, 10*um);
00262 
00263       ph->RegisterProcess(msc, particle);
00264       ph->RegisterProcess(ionIoni, particle);
00265       ph->RegisterProcess(ionnuc, particle);
00266 
00267     } else if (particleName == "GenericIon") {
00268 
00269       G4ionIonisation* ionIoni = new G4ionIonisation();
00270       ionIoni->SetEmModel(new G4IonParametrisedLossModel());
00271       ionIoni->SetStepFunction(0.1, 1*um);
00272 
00273       ph->RegisterProcess(hmsc, particle);
00274       ph->RegisterProcess(ionIoni, particle);
00275       ph->RegisterProcess(ionnuc, particle);
00276 
00277     } else if (particleName == "pi+" ||
00278                particleName == "pi-" ) {
00279 
00280       G4hMultipleScattering* pimsc = new G4hMultipleScattering();
00281       G4hIonisation* hIoni = new G4hIonisation();
00282       hIoni->SetStepFunction(0.2, 50*um);
00283 
00284       ph->RegisterProcess(pimsc, particle);
00285       ph->RegisterProcess(hIoni, particle);
00286       ph->RegisterProcess(pib, particle);
00287       ph->RegisterProcess(pip, particle);
00288 
00289     } else if (particleName == "kaon+" ||
00290                particleName == "kaon-" ) {
00291 
00292       G4hMultipleScattering* kmsc = new G4hMultipleScattering();
00293       G4hIonisation* hIoni = new G4hIonisation();
00294       hIoni->SetStepFunction(0.2, 50*um);
00295 
00296       ph->RegisterProcess(kmsc, particle);
00297       ph->RegisterProcess(hIoni, particle);
00298       ph->RegisterProcess(kb, particle);
00299       ph->RegisterProcess(kp, particle);
00300 
00301     } else if (particleName == "proton" ||
00302                particleName == "anti_proton") {
00303 
00304       G4hMultipleScattering* pmsc = new G4hMultipleScattering();
00305       G4hIonisation* hIoni = new G4hIonisation();
00306       hIoni->SetStepFunction(0.2, 50*um);
00307 
00308       ph->RegisterProcess(pmsc, particle);
00309       ph->RegisterProcess(hIoni, particle);
00310       ph->RegisterProcess(pb, particle);
00311       ph->RegisterProcess(pp, particle);
00312       ph->RegisterProcess(pnuc, particle);
00313 
00314     } else if (particleName == "B+" ||
00315                particleName == "B-" ||
00316                particleName == "D+" ||
00317                particleName == "D-" ||
00318                particleName == "Ds+" ||
00319                particleName == "Ds-" ||
00320                particleName == "anti_He3" ||
00321                particleName == "anti_alpha" ||
00322                particleName == "anti_deuteron" ||
00323                particleName == "anti_lambda_c+" ||
00324                particleName == "anti_omega-" ||
00325                particleName == "anti_sigma_c+" ||
00326                particleName == "anti_sigma_c++" ||
00327                particleName == "anti_sigma+" ||
00328                particleName == "anti_sigma-" ||
00329                particleName == "anti_triton" ||
00330                particleName == "anti_xi_c+" ||
00331                particleName == "anti_xi-" ||
00332                particleName == "deuteron" ||
00333                particleName == "lambda_c+" ||
00334                particleName == "omega-" ||
00335                particleName == "sigma_c+" ||
00336                particleName == "sigma_c++" ||
00337                particleName == "sigma+" ||
00338                particleName == "sigma-" ||
00339                particleName == "tau+" ||
00340                particleName == "tau-" ||
00341                particleName == "triton" ||
00342                particleName == "xi_c+" ||
00343                particleName == "xi-" ) {
00344 
00345       ph->RegisterProcess(hmsc, particle);
00346       ph->RegisterProcess(new G4hIonisation(), particle);
00347     }
00348   }
00349     
00350   // Em options
00351   //      
00352   G4EmProcessOptions opt;
00353   opt.SetVerbose(verbose);
00354   
00355   // Multiple Coulomb scattering
00356   //
00357   opt.SetPolarAngleLimit(CLHEP::pi);
00358     
00359   // Physics tables
00360   //
00361   opt.SetMinEnergy(10*eV);
00362   opt.SetMaxEnergy(10*TeV);
00363   opt.SetDEDXBinning(240);
00364   opt.SetLambdaBinning(240);
00365 
00366   // Nuclear stopping
00367   pnuc->SetMaxKinEnergy(MeV);
00368     
00369   // Ionization
00370   //
00371   //opt.SetSubCutoff(true);    
00372 
00373   // Deexcitation
00374   G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
00375   G4LossTableManager::Instance()->SetAtomDeexcitation(de);
00376   de->SetFluo(true);
00377 }
00378 
00379 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

Generated on Mon May 27 17:48:09 2013 for Geant4 by  doxygen 1.4.7