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
00079 G4Gamma::Gamma();
00080
00081
00082 G4Electron::Electron();
00083 G4Positron::Positron();
00084 G4MuonPlus::MuonPlus();
00085 G4MuonMinus::MuonMinus();
00086 G4TauMinus::TauMinusDefinition();
00087 G4TauPlus::TauPlusDefinition();
00088
00089
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
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
00116 G4Deuteron::Deuteron();
00117 G4Triton::Triton();
00118 G4He3::He3();
00119 G4Alpha::Alpha();
00120 G4GenericIon::GenericIonDefinition();
00121 }
00122
00123 void CMSEmStandardPhysics95::ConstructProcess()
00124 {
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00135
00136
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
00272
00273 G4EmProcessOptions opt;
00274 opt.SetVerbose(verbose);
00275
00276
00277
00278 opt.SetApplyCuts(true);
00279 }