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