CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/SimG4Core/PhysicsLists/src/CMSEmStandardPhysics.cc

Go to the documentation of this file.
00001 #include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysics.h"
00002 
00003 #include "G4ParticleDefinition.hh"
00004 #include "G4ProcessManager.hh"
00005 #include "G4LossTableManager.hh"
00006 #include "G4EmProcessOptions.hh"
00007 
00008 #include "G4ComptonScattering.hh"
00009 #include "G4GammaConversion.hh"
00010 #include "G4PhotoElectricEffect.hh"
00011 
00012 #include "G4hMultipleScattering.hh"
00013 #include "G4eMultipleScattering.hh"
00014 
00015 #include "G4eIonisation.hh"
00016 #include "G4eBremsstrahlung.hh"
00017 #include "G4eplusAnnihilation.hh"
00018 
00019 #include "G4MuIonisation.hh"
00020 #include "G4MuBremsstrahlung.hh"
00021 #include "G4MuPairProduction.hh"
00022 
00023 #include "G4hIonisation.hh"
00024 #include "G4ionIonisation.hh"
00025 #include "G4hBremsstrahlung.hh"
00026 #include "G4hPairProduction.hh"
00027 
00028 #include "G4Gamma.hh"
00029 #include "G4Electron.hh"
00030 #include "G4Positron.hh"
00031 #include "G4MuonPlus.hh"
00032 #include "G4MuonMinus.hh"
00033 #include "G4TauMinus.hh"
00034 #include "G4TauPlus.hh"
00035 #include "G4PionPlus.hh"
00036 #include "G4PionMinus.hh"
00037 #include "G4KaonPlus.hh"
00038 #include "G4KaonMinus.hh"
00039 #include "G4BMesonMinus.hh"
00040 #include "G4BMesonPlus.hh"
00041 #include "G4DMesonMinus.hh"
00042 #include "G4DMesonPlus.hh"
00043 #include "G4Proton.hh"
00044 #include "G4AntiProton.hh"
00045 #include "G4SigmaMinus.hh"
00046 #include "G4AntiSigmaMinus.hh"
00047 #include "G4SigmaPlus.hh"
00048 #include "G4AntiSigmaPlus.hh"
00049 #include "G4XiMinus.hh"
00050 #include "G4AntiXiMinus.hh"
00051 #include "G4OmegaMinus.hh"
00052 #include "G4AntiOmegaMinus.hh"
00053 #include "G4LambdacPlus.hh"
00054 #include "G4AntiLambdacPlus.hh"
00055 #include "G4XicPlus.hh"
00056 #include "G4AntiXicPlus.hh"
00057 #include "G4Deuteron.hh"
00058 #include "G4Triton.hh"
00059 #include "G4He3.hh"
00060 #include "G4Alpha.hh"
00061 #include "G4GenericIon.hh"
00062 
00063 CMSEmStandardPhysics::CMSEmStandardPhysics(const G4String& name,  G4int ver) :
00064   G4VPhysicsConstructor(name), verbose(ver) {
00065   G4LossTableManager::Instance();
00066 }
00067 
00068 CMSEmStandardPhysics::~CMSEmStandardPhysics() {}
00069 
00070 void CMSEmStandardPhysics::ConstructParticle() {
00071   // gamma
00072   G4Gamma::Gamma();
00073 
00074   // leptons
00075   G4Electron::Electron();
00076   G4Positron::Positron();
00077   G4MuonPlus::MuonPlus();
00078   G4MuonMinus::MuonMinus();
00079   G4TauMinus::TauMinusDefinition();
00080   G4TauPlus::TauPlusDefinition();
00081 
00082   // mesons
00083   G4PionPlus::PionPlusDefinition();
00084   G4PionMinus::PionMinusDefinition();
00085   G4KaonPlus::KaonPlusDefinition();
00086   G4KaonMinus::KaonMinusDefinition();
00087   G4DMesonMinus::DMesonMinusDefinition();
00088   G4DMesonPlus::DMesonPlusDefinition();
00089   G4BMesonMinus::BMesonMinusDefinition();
00090   G4BMesonPlus::BMesonPlusDefinition();
00091 
00092   // barions
00093   G4Proton::Proton();
00094   G4AntiProton::AntiProton();
00095   G4SigmaMinus::SigmaMinusDefinition();
00096   G4AntiSigmaMinus::AntiSigmaMinusDefinition();
00097   G4SigmaPlus::SigmaPlusDefinition();
00098   G4AntiSigmaPlus::AntiSigmaPlusDefinition();
00099   G4XiMinus::XiMinusDefinition();
00100   G4AntiXiMinus::AntiXiMinusDefinition();
00101   G4OmegaMinus::OmegaMinusDefinition();
00102   G4AntiOmegaMinus::AntiOmegaMinusDefinition();
00103   G4LambdacPlus::LambdacPlusDefinition();
00104   G4AntiLambdacPlus::AntiLambdacPlusDefinition();
00105   G4XicPlus::XicPlusDefinition();
00106   G4AntiXicPlus::AntiXicPlusDefinition();
00107 
00108   // ions
00109   G4Deuteron::Deuteron();
00110   G4Triton::Triton();
00111   G4He3::He3();
00112   G4Alpha::Alpha();
00113   G4GenericIon::GenericIonDefinition();
00114 }
00115 
00116 void CMSEmStandardPhysics::ConstructProcess() {
00117   // Add standard EM Processes
00118 
00119   theParticleIterator->reset();
00120   while( (*theParticleIterator)() ){
00121     G4ParticleDefinition* particle = theParticleIterator->value();
00122     G4ProcessManager* pmanager = particle->GetProcessManager();
00123     G4String particleName = particle->GetParticleName();
00124     if(verbose > 1)
00125       G4cout << "### " << GetPhysicsName() << " instantiates for " 
00126              << particleName << G4endl;
00127 
00128     if (particleName == "gamma") {
00129 
00130       pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
00131       pmanager->AddDiscreteProcess(new G4ComptonScattering);
00132       pmanager->AddDiscreteProcess(new G4GammaConversion);
00133 
00134     } else if (particleName == "e-") {
00135 
00136       pmanager->AddProcess(new G4eMultipleScattering,-1, 1, 1);
00137       pmanager->AddProcess(new G4eIonisation,        -1, 2, 2);
00138       pmanager->AddProcess(new G4eBremsstrahlung(),  -1,-3, 3);
00139 
00140     } else if (particleName == "e+") {
00141 
00142       pmanager->AddProcess(new G4eMultipleScattering,-1, 1, 1);
00143       pmanager->AddProcess(new G4eIonisation,        -1, 2, 2);
00144       pmanager->AddProcess(new G4eBremsstrahlung,    -1,-3, 3);
00145       pmanager->AddProcess(new G4eplusAnnihilation,   0,-1, 4);
00146 
00147     } else if (particleName == "mu+" ||
00148                particleName == "mu-"    ) {
00149 
00150       pmanager->AddProcess(new G4hMultipleScattering,-1, 1, 1);
00151       pmanager->AddProcess(new G4MuIonisation,       -1, 2, 2);
00152       pmanager->AddProcess(new G4MuBremsstrahlung,   -1,-3, 3);
00153       pmanager->AddProcess(new G4MuPairProduction,   -1,-4, 4);
00154 
00155     } else if (particleName == "alpha" ||
00156                particleName == "He3" ||
00157                particleName == "GenericIon") {
00158 
00159       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
00160       pmanager->AddProcess(new G4ionIonisation,       -1, 2, 2);
00161 
00162 
00163     } else if (particleName == "B+" ||
00164                particleName == "B-" ||
00165                particleName == "D+" ||
00166                particleName == "D-" ||
00167                particleName == "Ds+" ||
00168                particleName == "Ds-" ||
00169                particleName == "anti_lambda_c+" ||
00170                particleName == "anti_omega-" ||
00171                particleName == "anti_proton" ||
00172                particleName == "anti_sigma_c+" ||
00173                particleName == "anti_sigma_c++" ||
00174                particleName == "anti_sigma+" ||
00175                particleName == "anti_sigma-" ||
00176                particleName == "anti_xi_c+" ||
00177                particleName == "anti_xi-" ||
00178                particleName == "deuteron" ||
00179                particleName == "kaon+" ||
00180                particleName == "kaon-" ||
00181                particleName == "lambda_c+" ||
00182                particleName == "omega-" ||
00183                particleName == "pi+" ||
00184                particleName == "pi-" ||
00185                particleName == "proton" ||
00186                particleName == "sigma_c+" ||
00187                particleName == "sigma_c++" ||
00188                particleName == "sigma+" ||
00189                particleName == "sigma-" ||
00190                particleName == "tau+" ||
00191                particleName == "tau-" ||
00192                particleName == "triton" ||
00193                particleName == "xi_c+" ||
00194                particleName == "xi-" ) {
00195 
00196       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
00197       pmanager->AddProcess(new G4hIonisation,         -1, 2, 2);
00198 
00199       if (particleName == "pi+" ||
00200           particleName == "kaon+" ||
00201           particleName == "kaon-" ||
00202           particleName == "proton" ||
00203           particleName == "pi-" ) {
00204         pmanager->AddProcess(new G4hBremsstrahlung(), -1,-3, 3);
00205         pmanager->AddProcess(new G4hPairProduction(), -1,-4, 4);
00206       }
00207 
00208     }
00209   }
00210 
00211   G4EmProcessOptions opt;
00212   opt.SetVerbose(verbose);
00213 }