34 #include "G4ParticleDefinition.hh" 35 #include "G4ParticleTable.hh" 36 #include "G4ProcessManager.hh" 38 #include "G4ComptonScattering.hh" 39 #include "G4GammaConversion.hh" 40 #include "G4PhotoElectricEffect.hh" 42 #include "G4CoulombScattering.hh" 43 #include "G4IonCoulombScatteringModel.hh" 45 #include "G4eIonisation.hh" 46 #include "G4eBremsstrahlung.hh" 47 #include "G4eplusAnnihilation.hh" 49 #include "G4MuIonisation.hh" 50 #include "G4MuBremsstrahlung.hh" 51 #include "G4MuPairProduction.hh" 53 #include "G4hIonisation.hh" 54 #include "G4ionIonisation.hh" 56 #include "G4EmProcessOptions.hh" 58 #include "G4PhysicalConstants.hh" 59 #include "G4SystemOfUnits.hh" 64 : G4VPhysicsConstructor(name)
77 G4ParticleTable::G4PTblDicIterator* theParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator();
78 theParticleIterator->reset();
79 while( (*theParticleIterator)() ){
80 G4ParticleDefinition* particle = theParticleIterator->value();
81 G4ProcessManager* pmanager = particle->GetProcessManager();
82 G4String particleName = particle->GetParticleName();
84 if (particleName ==
"gamma") {
86 pmanager->AddDiscreteProcess(
new G4PhotoElectricEffect);
87 pmanager->AddDiscreteProcess(
new G4ComptonScattering);
88 pmanager->AddDiscreteProcess(
new G4GammaConversion);
90 }
else if (particleName ==
"e-") {
92 pmanager->AddDiscreteProcess(
new G4CoulombScattering);
93 pmanager->AddProcess(
new G4eIonisation, -1, 1, 1);
94 pmanager->AddProcess(
new G4eBremsstrahlung, -1, 2, 2);
96 }
else if (particleName ==
"e+") {
98 pmanager->AddDiscreteProcess(
new G4CoulombScattering);
99 pmanager->AddProcess(
new G4eIonisation, -1, 1, 1);
100 pmanager->AddProcess(
new G4eBremsstrahlung, -1, 2, 2);
101 pmanager->AddProcess(
new G4eplusAnnihilation, 0,-1, 3);
103 }
else if (particleName ==
"mu+" ||
104 particleName ==
"mu-" ) {
106 pmanager->AddDiscreteProcess(
new G4CoulombScattering);
107 pmanager->AddProcess(
new G4MuIonisation, -1, 1, 1);
108 pmanager->AddProcess(
new G4MuBremsstrahlung, -1, 2, 2);
109 pmanager->AddProcess(
new G4MuPairProduction, -1, 3, 3);
111 }
else if (particleName ==
"alpha" || particleName ==
"He3") {
112 pmanager->AddProcess(
new G4ionIonisation, -1, 1, 1);
113 G4CoulombScattering* cs =
new G4CoulombScattering();
114 cs->AddEmModel(0,
new G4IonCoulombScatteringModel());
115 cs->SetBuildTableFlag(
false);
116 pmanager->AddDiscreteProcess(cs);
118 }
else if (particleName ==
"GenericIon" ) {
119 pmanager->AddProcess(
new G4ionIonisation, -1, 1, 1);
120 G4CoulombScattering* cs =
new G4CoulombScattering();
121 cs->AddEmModel(0,
new G4IonCoulombScatteringModel());
122 cs->SetBuildTableFlag(
false);
123 pmanager->AddDiscreteProcess(cs);
125 }
else if ((!particle->IsShortLived()) &&
126 (particle->GetPDGCharge() != 0.0) &&
127 (particle->GetParticleName() !=
"chargedgeantino")) {
129 pmanager->AddDiscreteProcess(
new G4CoulombScattering);
130 pmanager->AddProcess(
new G4hIonisation, -1, 1, 1);
139 G4EmProcessOptions emOptions;
143 emOptions.SetMinEnergy(100*eV);
144 emOptions.SetMaxEnergy(100*TeV);
145 emOptions.SetDEDXBinning(12*20);
146 emOptions.SetLambdaBinning(12*20);
147 emOptions.SetSplineFlag(
true);
151 emOptions.SetStepFunction(0.2, 100*um);
152 emOptions.SetLinearLossLimit(1.e-2);
156 emOptions.SetSubCutoff(
false);
159 emOptions.SetPolarAngleLimit(0.0);
virtual ~PhysListEmStandardSS()
PhysListEmStandardSS(const G4String &name="standardSS")