00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include "G4EmStandardPhysics.hh"
00046 #include "G4SystemOfUnits.hh"
00047 #include "G4ParticleDefinition.hh"
00048 #include "G4LossTableManager.hh"
00049 #include "G4EmProcessOptions.hh"
00050
00051 #include "G4ComptonScattering.hh"
00052 #include "G4GammaConversion.hh"
00053 #include "G4PhotoElectricEffect.hh"
00054
00055 #include "G4eMultipleScattering.hh"
00056 #include "G4MuMultipleScattering.hh"
00057 #include "G4hMultipleScattering.hh"
00058 #include "G4CoulombScattering.hh"
00059 #include "G4eCoulombScatteringModel.hh"
00060 #include "G4WentzelVIModel.hh"
00061 #include "G4UrbanMscModel95.hh"
00062
00063 #include "G4MuBremsstrahlungModel.hh"
00064 #include "G4MuPairProductionModel.hh"
00065 #include "G4hBremsstrahlungModel.hh"
00066 #include "G4hPairProductionModel.hh"
00067
00068 #include "G4eIonisation.hh"
00069 #include "G4eBremsstrahlung.hh"
00070 #include "G4eplusAnnihilation.hh"
00071 #include "G4UAtomicDeexcitation.hh"
00072
00073 #include "G4MuIonisation.hh"
00074 #include "G4MuBremsstrahlung.hh"
00075 #include "G4MuPairProduction.hh"
00076 #include "G4hBremsstrahlung.hh"
00077 #include "G4hPairProduction.hh"
00078
00079 #include "G4hIonisation.hh"
00080 #include "G4ionIonisation.hh"
00081 #include "G4alphaIonisation.hh"
00082
00083 #include "G4Gamma.hh"
00084 #include "G4Electron.hh"
00085 #include "G4Positron.hh"
00086 #include "G4MuonPlus.hh"
00087 #include "G4MuonMinus.hh"
00088 #include "G4PionPlus.hh"
00089 #include "G4PionMinus.hh"
00090 #include "G4KaonPlus.hh"
00091 #include "G4KaonMinus.hh"
00092 #include "G4Proton.hh"
00093 #include "G4AntiProton.hh"
00094 #include "G4Deuteron.hh"
00095 #include "G4Triton.hh"
00096 #include "G4He3.hh"
00097 #include "G4Alpha.hh"
00098 #include "G4GenericIon.hh"
00099
00100 #include "G4PhysicsListHelper.hh"
00101 #include "G4BuilderType.hh"
00102
00103
00104 #include "G4PhysicsConstructorFactory.hh"
00105
00106 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmStandardPhysics);
00107
00108
00109
00110 G4EmStandardPhysics::G4EmStandardPhysics(G4int ver)
00111 : G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
00112 {
00113 G4LossTableManager::Instance();
00114 SetPhysicsType(bElectromagnetic);
00115 }
00116
00117
00118
00119 G4EmStandardPhysics::G4EmStandardPhysics(G4int ver, const G4String&)
00120 : G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
00121 {
00122 G4LossTableManager::Instance();
00123 SetPhysicsType(bElectromagnetic);
00124 }
00125
00126
00127
00128 G4EmStandardPhysics::~G4EmStandardPhysics()
00129 {}
00130
00131
00132
00133 void G4EmStandardPhysics::ConstructParticle()
00134 {
00135
00136 G4Gamma::Gamma();
00137
00138
00139 G4Electron::Electron();
00140 G4Positron::Positron();
00141 G4MuonPlus::MuonPlus();
00142 G4MuonMinus::MuonMinus();
00143
00144
00145 G4PionPlus::PionPlusDefinition();
00146 G4PionMinus::PionMinusDefinition();
00147 G4KaonPlus::KaonPlusDefinition();
00148 G4KaonMinus::KaonMinusDefinition();
00149
00150
00151 G4Proton::Proton();
00152 G4AntiProton::AntiProton();
00153
00154
00155 G4Deuteron::Deuteron();
00156 G4Triton::Triton();
00157 G4He3::He3();
00158 G4Alpha::Alpha();
00159 G4GenericIon::GenericIonDefinition();
00160 }
00161
00162
00163
00164 void G4EmStandardPhysics::ConstructProcess()
00165 {
00166 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00167
00168
00169 G4MuBremsstrahlung* mub = new G4MuBremsstrahlung();
00170 G4MuPairProduction* mup = new G4MuPairProduction();
00171 G4hBremsstrahlung* pib = new G4hBremsstrahlung();
00172 G4hPairProduction* pip = new G4hPairProduction();
00173 G4hBremsstrahlung* kb = new G4hBremsstrahlung();
00174 G4hPairProduction* kp = new G4hPairProduction();
00175 G4hBremsstrahlung* pb = new G4hBremsstrahlung();
00176 G4hPairProduction* pp = new G4hPairProduction();
00177
00178
00179 G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
00180 mumsc->AddEmModel(0, new G4WentzelVIModel());
00181 G4MuMultipleScattering* pimsc = new G4MuMultipleScattering();
00182 pimsc->AddEmModel(0, new G4WentzelVIModel());
00183 G4MuMultipleScattering* kmsc = new G4MuMultipleScattering();
00184 kmsc->AddEmModel(0, new G4WentzelVIModel());
00185 G4MuMultipleScattering* pmsc = new G4MuMultipleScattering();
00186 pmsc->AddEmModel(0, new G4WentzelVIModel());
00187 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
00188
00189
00190 G4double highEnergyLimit = 100*MeV;
00191
00192
00193 theParticleIterator->reset();
00194 while( (*theParticleIterator)() ){
00195 G4ParticleDefinition* particle = theParticleIterator->value();
00196 G4String particleName = particle->GetParticleName();
00197 if(verbose > 1)
00198 G4cout << "### " << GetPhysicsName() << " instantiates for "
00199 << particleName << G4endl;
00200
00201 if (particleName == "gamma") {
00202
00203 ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
00204 ph->RegisterProcess(new G4ComptonScattering(), particle);
00205 ph->RegisterProcess(new G4GammaConversion(), particle);
00206
00207 } else if (particleName == "e-") {
00208
00209 G4eMultipleScattering* msc = new G4eMultipleScattering;
00210 G4UrbanMscModel95* msc1 = new G4UrbanMscModel95();
00211 G4WentzelVIModel* msc2 = new G4WentzelVIModel();
00212 msc1->SetHighEnergyLimit(highEnergyLimit);
00213 msc2->SetLowEnergyLimit(highEnergyLimit);
00214 msc->AddEmModel(0, msc1);
00215 msc->AddEmModel(0, msc2);
00216
00217 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
00218 G4CoulombScattering* ss = new G4CoulombScattering();
00219 ss->SetEmModel(ssm, 1);
00220 ss->SetMinKinEnergy(highEnergyLimit);
00221 ssm->SetLowEnergyLimit(highEnergyLimit);
00222 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
00223
00224 ph->RegisterProcess(msc, particle);
00225 ph->RegisterProcess(new G4eIonisation(), particle);
00226 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
00227 ph->RegisterProcess(ss, particle);
00228
00229 } else if (particleName == "e+") {
00230
00231 G4eMultipleScattering* msc = new G4eMultipleScattering;
00232 G4UrbanMscModel95* msc1 = new G4UrbanMscModel95();
00233 G4WentzelVIModel* msc2 = new G4WentzelVIModel();
00234 msc1->SetHighEnergyLimit(highEnergyLimit);
00235 msc2->SetLowEnergyLimit(highEnergyLimit);
00236 msc->AddEmModel(0, msc1);
00237 msc->AddEmModel(0, msc2);
00238
00239 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
00240 G4CoulombScattering* ss = new G4CoulombScattering();
00241 ss->SetEmModel(ssm, 1);
00242 ss->SetMinKinEnergy(highEnergyLimit);
00243 ssm->SetLowEnergyLimit(highEnergyLimit);
00244 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
00245
00246 ph->RegisterProcess(msc, particle);
00247 ph->RegisterProcess(new G4eIonisation(), particle);
00248 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
00249 ph->RegisterProcess(new G4eplusAnnihilation(), particle);
00250 ph->RegisterProcess(ss, particle);
00251
00252 } else if (particleName == "mu+" ||
00253 particleName == "mu-" ) {
00254
00255 ph->RegisterProcess(mumsc, particle);
00256 ph->RegisterProcess(new G4MuIonisation(), particle);
00257 ph->RegisterProcess(mub, particle);
00258 ph->RegisterProcess(mup, particle);
00259 ph->RegisterProcess(new G4CoulombScattering(), particle);
00260
00261 } else if (particleName == "alpha" ||
00262 particleName == "He3") {
00263
00264
00265 ph->RegisterProcess(new G4hMultipleScattering(), particle);
00266 ph->RegisterProcess(new G4ionIonisation(), particle);
00267
00268 } else if (particleName == "GenericIon") {
00269
00270 ph->RegisterProcess(hmsc, particle);
00271 ph->RegisterProcess(new G4ionIonisation(), particle);
00272
00273 } else if (particleName == "pi+" ||
00274 particleName == "pi-" ) {
00275
00276
00277 ph->RegisterProcess(pimsc, particle);
00278 ph->RegisterProcess(new G4hIonisation(), particle);
00279 ph->RegisterProcess(pib, particle);
00280 ph->RegisterProcess(pip, particle);
00281
00282 } else if (particleName == "kaon+" ||
00283 particleName == "kaon-" ) {
00284
00285
00286 ph->RegisterProcess(kmsc, particle);
00287 ph->RegisterProcess(new G4hIonisation(), particle);
00288 ph->RegisterProcess(kb, particle);
00289 ph->RegisterProcess(kp, particle);
00290
00291 } else if (particleName == "proton" ||
00292 particleName == "anti_proton") {
00293
00294
00295 ph->RegisterProcess(pmsc, particle);
00296 ph->RegisterProcess(new G4hIonisation(), particle);
00297 ph->RegisterProcess(pb, particle);
00298 ph->RegisterProcess(pp, particle);
00299
00300 } else if (particleName == "B+" ||
00301 particleName == "B-" ||
00302 particleName == "D+" ||
00303 particleName == "D-" ||
00304 particleName == "Ds+" ||
00305 particleName == "Ds-" ||
00306 particleName == "anti_He3" ||
00307 particleName == "anti_alpha" ||
00308 particleName == "anti_deuteron" ||
00309 particleName == "anti_lambda_c+" ||
00310 particleName == "anti_omega-" ||
00311 particleName == "anti_sigma_c+" ||
00312 particleName == "anti_sigma_c++" ||
00313 particleName == "anti_sigma+" ||
00314 particleName == "anti_sigma-" ||
00315 particleName == "anti_triton" ||
00316 particleName == "anti_xi_c+" ||
00317 particleName == "anti_xi-" ||
00318 particleName == "deuteron" ||
00319 particleName == "lambda_c+" ||
00320 particleName == "omega-" ||
00321 particleName == "sigma_c+" ||
00322 particleName == "sigma_c++" ||
00323 particleName == "sigma+" ||
00324 particleName == "sigma-" ||
00325 particleName == "tau+" ||
00326 particleName == "tau-" ||
00327 particleName == "triton" ||
00328 particleName == "xi_c+" ||
00329 particleName == "xi-" ) {
00330
00331 ph->RegisterProcess(hmsc, particle);
00332 ph->RegisterProcess(new G4hIonisation(), particle);
00333 }
00334 }
00335 G4EmProcessOptions opt;
00336 opt.SetVerbose(verbose);
00337 opt.SetPolarAngleLimit(CLHEP::pi);
00338
00339
00340
00341 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
00342 G4LossTableManager::Instance()->SetAtomDeexcitation(de);
00343 }
00344
00345