CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/SimG4Core/PhysicsLists/src/CMSEmStandardPhysics95.cc

Go to the documentation of this file.
00001 #include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysics95.h"
00002 
00003 #include "G4ParticleDefinition.hh"
00004 #include "G4ProcessManager.hh"
00005 #include "G4LossTableManager.hh"
00006 #include "G4EmProcessOptions.hh"
00007 #include "G4RegionStore.hh"
00008 
00009 #include "G4ComptonScattering.hh"
00010 #include "G4GammaConversion.hh"
00011 #include "G4GammaConversion.hh"
00012 #include "G4PairProductionRelModel.hh"
00013 #include "G4PhotoElectricEffect.hh"
00014 
00015 #include "G4hMultipleScattering.hh"
00016 #include "G4eMultipleScattering.hh"
00017 #include "G4MscStepLimitType.hh"
00018 
00019 #include "G4eIonisation.hh"
00020 #include "G4eBremsstrahlung.hh"
00021 #include "G4eplusAnnihilation.hh"
00022 
00023 #include "G4MuMultipleScattering.hh"
00024 #include "G4MuIonisation.hh"
00025 #include "G4MuBremsstrahlung.hh"
00026 #include "G4MuPairProduction.hh"
00027 
00028 #include "G4hIonisation.hh"
00029 #include "G4ionIonisation.hh"
00030 #include "G4hBremsstrahlung.hh"
00031 #include "G4hPairProduction.hh"
00032 
00033 #include "G4Gamma.hh"
00034 #include "G4Electron.hh"
00035 #include "G4Positron.hh"
00036 #include "G4MuonPlus.hh"
00037 #include "G4MuonMinus.hh"
00038 #include "G4TauMinus.hh"
00039 #include "G4TauPlus.hh"
00040 #include "G4PionPlus.hh"
00041 #include "G4PionMinus.hh"
00042 #include "G4KaonPlus.hh"
00043 #include "G4KaonMinus.hh"
00044 #include "G4BMesonMinus.hh"
00045 #include "G4BMesonPlus.hh"
00046 #include "G4DMesonMinus.hh"
00047 #include "G4DMesonPlus.hh"
00048 #include "G4Proton.hh"
00049 #include "G4AntiProton.hh"
00050 #include "G4SigmaMinus.hh"
00051 #include "G4AntiSigmaMinus.hh"
00052 #include "G4SigmaPlus.hh"
00053 #include "G4AntiSigmaPlus.hh"
00054 #include "G4XiMinus.hh"
00055 #include "G4AntiXiMinus.hh"
00056 #include "G4OmegaMinus.hh"
00057 #include "G4AntiOmegaMinus.hh"
00058 #include "G4LambdacPlus.hh"
00059 #include "G4AntiLambdacPlus.hh"
00060 #include "G4XicPlus.hh"
00061 #include "G4AntiXicPlus.hh"
00062 #include "G4Deuteron.hh"
00063 #include "G4Triton.hh"
00064 #include "G4He3.hh"
00065 #include "G4Alpha.hh"
00066 #include "G4GenericIon.hh"
00067 #include "G4BuilderType.hh"
00068 
00069 CMSEmStandardPhysics95::CMSEmStandardPhysics95(const G4String& name, G4int ver, std::string reg):
00070   G4VPhysicsConstructor(name), verbose(ver), region(reg) {
00071   G4LossTableManager::Instance();
00072   SetPhysicsType(bElectromagnetic);
00073 }
00074 
00075 CMSEmStandardPhysics95::~CMSEmStandardPhysics95() {}
00076 
00077 void CMSEmStandardPhysics95::ConstructParticle() {
00078   // gamma
00079   G4Gamma::Gamma();
00080 
00081   // leptons
00082   G4Electron::Electron();
00083   G4Positron::Positron();
00084   G4MuonPlus::MuonPlus();
00085   G4MuonMinus::MuonMinus();
00086   G4TauMinus::TauMinusDefinition();
00087   G4TauPlus::TauPlusDefinition();
00088 
00089   // mesons
00090   G4PionPlus::PionPlusDefinition();
00091   G4PionMinus::PionMinusDefinition();
00092   G4KaonPlus::KaonPlusDefinition();
00093   G4KaonMinus::KaonMinusDefinition();
00094   G4DMesonMinus::DMesonMinusDefinition();
00095   G4DMesonPlus::DMesonPlusDefinition();
00096   G4BMesonMinus::BMesonMinusDefinition();
00097   G4BMesonPlus::BMesonPlusDefinition();
00098 
00099   // barions
00100   G4Proton::Proton();
00101   G4AntiProton::AntiProton();
00102   G4SigmaMinus::SigmaMinusDefinition();
00103   G4AntiSigmaMinus::AntiSigmaMinusDefinition();
00104   G4SigmaPlus::SigmaPlusDefinition();
00105   G4AntiSigmaPlus::AntiSigmaPlusDefinition();
00106   G4XiMinus::XiMinusDefinition();
00107   G4AntiXiMinus::AntiXiMinusDefinition();
00108   G4OmegaMinus::OmegaMinusDefinition();
00109   G4AntiOmegaMinus::AntiOmegaMinusDefinition();
00110   G4LambdacPlus::LambdacPlusDefinition();
00111   G4AntiLambdacPlus::AntiLambdacPlusDefinition();
00112   G4XicPlus::XicPlusDefinition();
00113   G4AntiXicPlus::AntiXicPlusDefinition();
00114 
00115   // ions
00116   G4Deuteron::Deuteron();
00117   G4Triton::Triton();
00118   G4He3::He3();
00119   G4Alpha::Alpha();
00120   G4GenericIon::GenericIonDefinition();
00121 }
00122 
00123 void CMSEmStandardPhysics95::ConstructProcess() 
00124 {
00125   // Add standard EM Processes
00126   /*
00127   G4Region* reg = 0;
00128   if (region != " ") {
00129     G4RegionStore* regStore = G4RegionStore::GetInstance();
00130     reg = regStore->GetRegion(region, true);
00131   }
00132   */
00133 
00134   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00135 
00136   // Add standard EM Processes
00137   theParticleIterator->reset();
00138   while( (*theParticleIterator)() ){
00139     G4ParticleDefinition* particle = theParticleIterator->value();
00140     G4String particleName = particle->GetParticleName();
00141     if(verbose > 1)
00142       G4cout << "### " << GetPhysicsName() << " instantiates for " 
00143              << particleName << G4endl;
00144 
00145     if (particleName == "gamma") {
00146 
00147       ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
00148       ph->RegisterProcess(new G4ComptonScattering(), particle);
00149       G4GammaConversion* conv = new G4GammaConversion();
00150       G4PairProductionRelModel* mod = new G4PairProductionRelModel();
00151       mod->SetLowEnergyLimit(80*GeV);
00152       conv->AddEmModel(0, mod);
00153       ph->RegisterProcess(conv, particle);
00154 
00155     } else if (particleName == "e-") {
00156 
00157       G4eIonisation* eioni = new G4eIonisation();
00158       eioni->SetStepFunction(0.8, 1.0*mm);
00159       G4eMultipleScattering* msc = new G4eMultipleScattering();
00160       msc->SetStepLimitType(fMinimal);
00161 
00162       G4eBremsstrahlung* ebrem = new G4eBremsstrahlung();
00163 
00164       ph->RegisterProcess(msc, particle);
00165       ph->RegisterProcess(eioni, particle);
00166       ph->RegisterProcess(ebrem, particle);
00167 
00168     } else if (particleName == "e+") {
00169 
00170       G4eIonisation* eioni = new G4eIonisation();
00171       eioni->SetStepFunction(0.8, 1.0*mm);
00172       G4eMultipleScattering* msc = new G4eMultipleScattering();
00173       msc->SetStepLimitType(fMinimal);
00174 
00175       G4eBremsstrahlung* ebrem = new G4eBremsstrahlung();
00176 
00177       ph->RegisterProcess(msc, particle);
00178       ph->RegisterProcess(eioni, particle);
00179       ph->RegisterProcess(ebrem, particle);
00180       ph->RegisterProcess(new G4eplusAnnihilation(), particle);
00181 
00182     } else if (particleName == "mu+" ||
00183                particleName == "mu-"    ) {
00184 
00185       G4MuMultipleScattering* msc = new G4MuMultipleScattering();
00186       G4MuBremsstrahlung* mub = new G4MuBremsstrahlung();
00187       G4MuPairProduction* mup = new G4MuPairProduction();
00188 
00189       ph->RegisterProcess(msc, particle);
00190       ph->RegisterProcess(new G4MuIonisation(), particle);
00191       ph->RegisterProcess(mub, particle);
00192       ph->RegisterProcess(mup, particle);
00193 
00194     } else if (particleName == "alpha" || 
00195                particleName == "He3" ) {
00196 
00197       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00198       ph->RegisterProcess(new G4ionIonisation(), particle);
00199 
00200     } else if (particleName == "GenericIon") {
00201 
00202       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00203       ph->RegisterProcess(new G4ionIonisation(), particle);
00204 
00205     } else if (particleName == "pi+" || 
00206                particleName == "pi-" ) {
00207 
00208       G4hBremsstrahlung* pib = new G4hBremsstrahlung();
00209       G4hPairProduction* pip = new G4hPairProduction();
00210 
00211       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00212       ph->RegisterProcess(new G4hIonisation(), particle);
00213       ph->RegisterProcess(pib, particle);
00214       ph->RegisterProcess(pip, particle);
00215 
00216     } else if (particleName == "kaon+" ||
00217                particleName == "kaon-" ) {
00218 
00219       G4hBremsstrahlung* kb = new G4hBremsstrahlung();
00220       G4hPairProduction* kp = new G4hPairProduction();
00221 
00222       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00223       ph->RegisterProcess(new G4hIonisation(), particle);
00224       ph->RegisterProcess(kb, particle);
00225       ph->RegisterProcess(kp, particle);
00226 
00227     } else if (particleName == "proton" ) {
00228 
00229       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00230       ph->RegisterProcess(new G4hIonisation(), particle);
00231       ph->RegisterProcess(new G4hBremsstrahlung(), particle);
00232       ph->RegisterProcess(new G4hPairProduction(), particle);
00233 
00234     } else if (particleName == "B+" ||
00235                particleName == "B-" ||
00236                particleName == "D+" ||
00237                particleName == "D-" ||
00238                particleName == "Ds+" ||
00239                particleName == "Ds-" ||
00240                particleName == "anti_He3" ||
00241                particleName == "anti_alpha" ||
00242                particleName == "anti_deuteron" ||
00243                particleName == "anti_lambda_c+" ||
00244                particleName == "anti_omega-" ||
00245                particleName == "anti_proton" ||
00246                particleName == "anti_sigma_c+" ||
00247                particleName == "anti_sigma_c++" ||
00248                particleName == "anti_sigma+" ||
00249                particleName == "anti_sigma-" ||
00250                particleName == "anti_triton" ||
00251                particleName == "anti_xi_c+" ||
00252                particleName == "anti_xi-" ||
00253                particleName == "deuteron" ||
00254                particleName == "lambda_c+" ||
00255                particleName == "omega-" ||
00256                particleName == "sigma_c+" ||
00257                particleName == "sigma_c++" ||
00258                particleName == "sigma+" ||
00259                particleName == "sigma-" ||
00260                particleName == "tau+" ||
00261                particleName == "tau-" ||
00262                particleName == "triton" ||
00263                particleName == "xi_c+" ||
00264                particleName == "xi-" ) {
00265 
00266       ph->RegisterProcess(new G4hMultipleScattering(), particle);
00267       ph->RegisterProcess(new G4hIonisation(), particle);
00268     }
00269   }
00270 
00271   // Setup options
00272   //
00273   G4EmProcessOptions opt;
00274   opt.SetVerbose(verbose);
00275   //  opt.SetPolarAngleLimit(CLHEP::pi);
00276   // ApplyCuts
00277   //
00278   opt.SetApplyCuts(true);
00279 }