CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_10_patch1/src/SimG4Core/PhysicsLists/src/CMSEmStandardPhysicsSync.cc

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