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