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
00046
00047
00048 #include "G4EmStandardPhysics_option2.hh"
00049
00050 #include "G4SystemOfUnits.hh"
00051 #include "G4ParticleDefinition.hh"
00052 #include "G4LossTableManager.hh"
00053 #include "G4EmProcessOptions.hh"
00054
00055 #include "G4ComptonScattering.hh"
00056 #include "G4GammaConversion.hh"
00057 #include "G4PhotoElectricEffect.hh"
00058 #include "G4PEEffectFluoModel.hh"
00059 #include "G4KleinNishinaModel.hh"
00060 #include "G4RayleighScattering.hh"
00061
00062 #include "G4eMultipleScattering.hh"
00063 #include "G4hMultipleScattering.hh"
00064 #include "G4MuMultipleScattering.hh"
00065 #include "G4CoulombScattering.hh"
00066 #include "G4eCoulombScatteringModel.hh"
00067 #include "G4UrbanMscModel93.hh"
00068 #include "G4UrbanMscModel95.hh"
00069 #include "G4WentzelVIModel.hh"
00070
00071
00072 #include "G4eIonisation.hh"
00073 #include "G4eBremsstrahlung.hh"
00074 #include "G4eBremsstrahlungModel.hh"
00075 #include "G4eBremsstrahlungRelModel.hh"
00076 #include "G4eplusAnnihilation.hh"
00077 #include "G4Generator2BS.hh"
00078 #include "G4SeltzerBergerModel.hh"
00079 #include "G4UAtomicDeexcitation.hh"
00080
00081 #include "G4MuIonisation.hh"
00082 #include "G4MuBremsstrahlung.hh"
00083 #include "G4MuPairProduction.hh"
00084 #include "G4hBremsstrahlung.hh"
00085 #include "G4hPairProduction.hh"
00086
00087 #include "G4MuBremsstrahlungModel.hh"
00088 #include "G4MuPairProductionModel.hh"
00089 #include "G4hBremsstrahlungModel.hh"
00090 #include "G4hPairProductionModel.hh"
00091
00092 #include "G4hIonisation.hh"
00093 #include "G4ionIonisation.hh"
00094 #include "G4alphaIonisation.hh"
00095
00096
00097 #include "G4Gamma.hh"
00098 #include "G4Electron.hh"
00099 #include "G4Positron.hh"
00100 #include "G4MuonPlus.hh"
00101 #include "G4MuonMinus.hh"
00102 #include "G4PionPlus.hh"
00103 #include "G4PionMinus.hh"
00104 #include "G4KaonPlus.hh"
00105 #include "G4KaonMinus.hh"
00106 #include "G4Proton.hh"
00107 #include "G4AntiProton.hh"
00108 #include "G4Deuteron.hh"
00109 #include "G4Triton.hh"
00110 #include "G4He3.hh"
00111 #include "G4Alpha.hh"
00112 #include "G4GenericIon.hh"
00113
00114 #include "G4PhysicsListHelper.hh"
00115 #include "G4BuilderType.hh"
00116
00117
00118 #include "G4PhysicsConstructorFactory.hh"
00119
00120 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmStandardPhysics_option2);
00121
00122
00123
00124 G4EmStandardPhysics_option2::G4EmStandardPhysics_option2(G4int ver)
00125 : G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver)
00126 {
00127 G4LossTableManager::Instance();
00128 SetPhysicsType(bElectromagnetic);
00129 }
00130
00131
00132
00133 G4EmStandardPhysics_option2::G4EmStandardPhysics_option2(G4int ver, const G4String&)
00134 : G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver)
00135 {
00136 G4LossTableManager::Instance();
00137 SetPhysicsType(bElectromagnetic);
00138 }
00139
00140
00141
00142 G4EmStandardPhysics_option2::~G4EmStandardPhysics_option2()
00143 {}
00144
00145
00146
00147 void G4EmStandardPhysics_option2::ConstructParticle()
00148 {
00149
00150 G4Gamma::Gamma();
00151
00152
00153 G4Electron::Electron();
00154 G4Positron::Positron();
00155 G4MuonPlus::MuonPlus();
00156 G4MuonMinus::MuonMinus();
00157
00158
00159 G4PionPlus::PionPlusDefinition();
00160 G4PionMinus::PionMinusDefinition();
00161 G4KaonPlus::KaonPlusDefinition();
00162 G4KaonMinus::KaonMinusDefinition();
00163
00164
00165 G4Proton::Proton();
00166 G4AntiProton::AntiProton();
00167
00168
00169 G4Deuteron::Deuteron();
00170 G4Triton::Triton();
00171 G4He3::He3();
00172 G4Alpha::Alpha();
00173 G4GenericIon::GenericIonDefinition();
00174 }
00175
00176
00177
00178 void G4EmStandardPhysics_option2::ConstructProcess()
00179 {
00180 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00181
00182
00183 G4MuBremsstrahlung* mub = new G4MuBremsstrahlung();
00184 G4MuPairProduction* mup = new G4MuPairProduction();
00185 G4hBremsstrahlung* pib = new G4hBremsstrahlung();
00186 G4hPairProduction* pip = new G4hPairProduction();
00187 G4hBremsstrahlung* kb = new G4hBremsstrahlung();
00188 G4hPairProduction* kp = new G4hPairProduction();
00189 G4hBremsstrahlung* pb = new G4hBremsstrahlung();
00190 G4hPairProduction* pp = new G4hPairProduction();
00191
00192
00193 G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
00194 mumsc->AddEmModel(0, new G4WentzelVIModel());
00195 G4hMultipleScattering* pmsc = new G4hMultipleScattering();
00196 pmsc->AddEmModel(0, new G4WentzelVIModel());
00197 G4hMultipleScattering* pimsc = new G4hMultipleScattering();
00198 pimsc->AddEmModel(0, new G4WentzelVIModel());
00199 G4hMultipleScattering* kmsc = new G4hMultipleScattering();
00200 kmsc->AddEmModel(0, new G4WentzelVIModel());
00201 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
00202
00203
00204 G4double highEnergyLimit = 100*MeV;
00205
00206
00207 theParticleIterator->reset();
00208 while( (*theParticleIterator)() ){
00209 G4ParticleDefinition* particle = theParticleIterator->value();
00210 G4String particleName = particle->GetParticleName();
00211 if(verbose > 1)
00212 G4cout << "### " << GetPhysicsName() << " instantiates for "
00213 << particleName << G4endl;
00214
00215 if (particleName == "gamma") {
00216
00217 ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
00218 ph->RegisterProcess(new G4ComptonScattering(), particle);
00219 ph->RegisterProcess(new G4GammaConversion(), particle);
00220 ph->RegisterProcess(new G4RayleighScattering(), particle);
00221
00222 } else if (particleName == "e-") {
00223
00224 G4eIonisation* eioni = new G4eIonisation();
00225 eioni->SetStepFunction(0.8, 1.0*mm);
00226
00227 G4eMultipleScattering* msc = new G4eMultipleScattering;
00228 msc->SetStepLimitType(fMinimal);
00229 G4UrbanMscModel93* msc1 = new G4UrbanMscModel93();
00230 G4WentzelVIModel* msc2 = new G4WentzelVIModel();
00231 msc1->SetHighEnergyLimit(highEnergyLimit);
00232 msc2->SetLowEnergyLimit(highEnergyLimit);
00233 msc->AddEmModel(0, msc1);
00234 msc->AddEmModel(0, msc2);
00235
00236 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
00237 G4CoulombScattering* ss = new G4CoulombScattering();
00238 ss->SetEmModel(ssm, 1);
00239 ss->SetMinKinEnergy(highEnergyLimit);
00240 ssm->SetLowEnergyLimit(highEnergyLimit);
00241 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
00242
00243 G4eBremsstrahlung* brem = new G4eBremsstrahlung();
00244 G4SeltzerBergerModel* br1 = new G4SeltzerBergerModel();
00245 G4eBremsstrahlungRelModel* br2 = new G4eBremsstrahlungRelModel();
00246 br1->SetAngularDistribution(new G4Generator2BS());
00247 br2->SetAngularDistribution(new G4Generator2BS());
00248 brem->SetEmModel(br1,1);
00249 brem->SetEmModel(br2,2);
00250 br2->SetLowEnergyLimit(GeV);
00251
00252 ph->RegisterProcess(msc, particle);
00253 ph->RegisterProcess(eioni, particle);
00254 ph->RegisterProcess(brem, particle);
00255 ph->RegisterProcess(ss, particle);
00256
00257 } else if (particleName == "e+") {
00258
00259 G4eIonisation* eioni = new G4eIonisation();
00260 eioni->SetStepFunction(0.8, 1.0*mm);
00261
00262 G4eMultipleScattering* msc = new G4eMultipleScattering;
00263 msc->SetStepLimitType(fMinimal);
00264 G4UrbanMscModel93* msc1 = new G4UrbanMscModel93();
00265 G4WentzelVIModel* msc2 = new G4WentzelVIModel();
00266 msc1->SetHighEnergyLimit(highEnergyLimit);
00267 msc2->SetLowEnergyLimit(highEnergyLimit);
00268 msc->AddEmModel(0, msc1);
00269 msc->AddEmModel(0, msc2);
00270
00271 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
00272 G4CoulombScattering* ss = new G4CoulombScattering();
00273 ss->SetEmModel(ssm, 1);
00274 ss->SetMinKinEnergy(highEnergyLimit);
00275 ssm->SetLowEnergyLimit(highEnergyLimit);
00276 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
00277
00278 ph->RegisterProcess(msc, particle);
00279 ph->RegisterProcess(eioni, particle);
00280 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
00281 ph->RegisterProcess(new G4eplusAnnihilation(), particle);
00282 ph->RegisterProcess(ss, particle);
00283
00284 } else if (particleName == "mu+" ||
00285 particleName == "mu-" ) {
00286
00287 ph->RegisterProcess(mumsc, particle);
00288 ph->RegisterProcess(new G4MuIonisation(), particle);
00289 ph->RegisterProcess(mub, particle);
00290 ph->RegisterProcess(mup, particle);
00291 ph->RegisterProcess(new G4CoulombScattering(), particle);
00292
00293 } else if (particleName == "alpha" ||
00294 particleName == "He3") {
00295
00296
00297 ph->RegisterProcess(new G4hMultipleScattering(), particle);
00298 ph->RegisterProcess(new G4ionIonisation(), particle);
00299
00300 } else if (particleName == "GenericIon") {
00301
00302 G4ionIonisation* ionIoni = new G4ionIonisation();
00303
00304
00305
00306 ph->RegisterProcess(hmsc, particle);
00307 ph->RegisterProcess(ionIoni, particle);
00308
00309 } else if (particleName == "pi+" ||
00310 particleName == "pi-" ) {
00311
00312 ph->RegisterProcess(pimsc, particle);
00313 ph->RegisterProcess(new G4hIonisation(), particle);
00314 ph->RegisterProcess(pib, particle);
00315 ph->RegisterProcess(pip, particle);
00316
00317 } else if (particleName == "kaon+" ||
00318 particleName == "kaon-" ) {
00319
00320 ph->RegisterProcess(kmsc, particle);
00321 ph->RegisterProcess(new G4hIonisation(), particle);
00322 ph->RegisterProcess(kb, particle);
00323 ph->RegisterProcess(kp, particle);
00324
00325 } else if (particleName == "proton" ||
00326 particleName == "anti_proton") {
00327
00328 ph->RegisterProcess(pmsc, particle);
00329 ph->RegisterProcess(new G4hIonisation(), particle);
00330 ph->RegisterProcess(pb, particle);
00331 ph->RegisterProcess(pp, particle);
00332
00333 } else if (particleName == "B+" ||
00334 particleName == "B-" ||
00335 particleName == "D+" ||
00336 particleName == "D-" ||
00337 particleName == "Ds+" ||
00338 particleName == "Ds-" ||
00339 particleName == "anti_He3" ||
00340 particleName == "anti_alpha" ||
00341 particleName == "anti_deuteron" ||
00342 particleName == "anti_lambda_c+" ||
00343 particleName == "anti_omega-" ||
00344 particleName == "anti_sigma_c+" ||
00345 particleName == "anti_sigma_c++" ||
00346 particleName == "anti_sigma+" ||
00347 particleName == "anti_sigma-" ||
00348 particleName == "anti_triton" ||
00349 particleName == "anti_xi_c+" ||
00350 particleName == "anti_xi-" ||
00351 particleName == "deuteron" ||
00352 particleName == "lambda_c+" ||
00353 particleName == "omega-" ||
00354 particleName == "sigma_c+" ||
00355 particleName == "sigma_c++" ||
00356 particleName == "sigma+" ||
00357 particleName == "sigma-" ||
00358 particleName == "tau+" ||
00359 particleName == "tau-" ||
00360 particleName == "triton" ||
00361 particleName == "xi_c+" ||
00362 particleName == "xi-" ) {
00363
00364 ph->RegisterProcess(hmsc, particle);
00365 ph->RegisterProcess(new G4hIonisation(), particle);
00366 }
00367 }
00368
00369
00370
00371 G4EmProcessOptions opt;
00372 opt.SetVerbose(verbose);
00373 opt.SetApplyCuts(true);
00374
00375
00376
00377 opt.SetPolarAngleLimit(CLHEP::pi);
00378
00379
00380
00381
00382
00383
00384
00385 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
00386 G4LossTableManager::Instance()->SetAtomDeexcitation(de);
00387
00388 }
00389
00390