33 #include "G4ParticleDefinition.hh" 34 #include "G4ParticleTable.hh" 35 #include "G4ProcessManager.hh" 37 #include "G4ComptonScattering.hh" 38 #include "G4GammaConversion.hh" 39 #include "G4PhotoElectricEffect.hh" 41 #include "G4eMultipleScattering.hh" 42 #include "G4UrbanMscModel.hh" 43 #include "G4eIonisation.hh" 44 #include "G4eBremsstrahlung.hh" 45 #include "G4eplusAnnihilation.hh" 47 #include "G4MuMultipleScattering.hh" 48 #include "G4MuIonisation.hh" 49 #include "G4MuBremsstrahlung.hh" 50 #include "G4MuPairProduction.hh" 52 #include "G4hMultipleScattering.hh" 53 #include "G4hIonisation.hh" 54 #include "G4hBremsstrahlung.hh" 55 #include "G4hPairProduction.hh" 57 #include "G4ionIonisation.hh" 58 #include "G4IonParametrisedLossModel.hh" 59 #include "G4NuclearStopping.hh" 61 #include "G4EmProcessOptions.hh" 62 #include "G4MscStepLimitType.hh" 64 #include "G4PhysicalConstants.hh" 65 #include "G4SystemOfUnits.hh" 70 : G4VPhysicsConstructor(name)
84 G4ParticleTable::G4PTblDicIterator* theParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator();
85 theParticleIterator->reset();
86 while( (*theParticleIterator)() ){
87 G4ParticleDefinition* particle = theParticleIterator->value();
88 G4ProcessManager* pmanager = particle->GetProcessManager();
89 G4String particleName = particle->GetParticleName();
91 if (particleName ==
"gamma") {
93 pmanager->AddDiscreteProcess(
new G4PhotoElectricEffect);
94 pmanager->AddDiscreteProcess(
new G4ComptonScattering);
95 pmanager->AddDiscreteProcess(
new G4GammaConversion);
97 }
else if (particleName ==
"e-") {
99 G4eMultipleScattering* msc =
new G4eMultipleScattering();
100 msc->AddEmModel(0,
new G4UrbanMscModel());
101 pmanager->AddProcess(msc, -1, 1, 1);
102 pmanager->AddProcess(
new G4eIonisation, -1, 2, 2);
103 pmanager->AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
105 }
else if (particleName ==
"e+") {
107 G4eMultipleScattering* msc =
new G4eMultipleScattering();
108 msc->AddEmModel(0,
new G4UrbanMscModel());
109 pmanager->AddProcess(msc, -1, 1, 1);
110 pmanager->AddProcess(
new G4eIonisation, -1, 2, 2);
111 pmanager->AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
112 pmanager->AddProcess(
new G4eplusAnnihilation, 0,-1, 4);
114 }
else if (particleName ==
"mu+" ||
115 particleName ==
"mu-" ) {
117 pmanager->AddProcess(
new G4MuMultipleScattering, -1, 1, 1);
118 pmanager->AddProcess(
new G4MuIonisation, -1, 2, 2);
119 pmanager->AddProcess(
new G4MuBremsstrahlung, -1, 3, 3);
120 pmanager->AddProcess(
new G4MuPairProduction, -1, 4, 4);
122 }
else if( particleName ==
"proton" ||
123 particleName ==
"pi-" ||
124 particleName ==
"pi+" ) {
126 pmanager->AddProcess(
new G4hMultipleScattering, -1, 1, 1);
127 pmanager->AddProcess(
new G4hIonisation, -1, 2, 2);
128 pmanager->AddProcess(
new G4hBremsstrahlung, -1, 3, 3);
129 pmanager->AddProcess(
new G4hPairProduction, -1, 4, 4);
131 }
else if( particleName ==
"alpha" ||
132 particleName ==
"He3" ) {
134 pmanager->AddProcess(
new G4hMultipleScattering, -1, 1, 1);
135 pmanager->AddProcess(
new G4ionIonisation, -1, 2, 2);
136 pmanager->AddProcess(
new G4NuclearStopping, -1, 3,-1);
138 }
else if( particleName ==
"GenericIon" ) {
140 pmanager->AddProcess(
new G4hMultipleScattering, -1, 1, 1);
141 G4ionIonisation* ionIoni =
new G4ionIonisation();
142 ionIoni->SetEmModel(
new G4IonParametrisedLossModel());
143 pmanager->AddProcess(ionIoni, -1, 2, 2);
144 pmanager->AddProcess(
new G4NuclearStopping, -1, 3,-1);
146 }
else if ((!particle->IsShortLived()) &&
147 (particle->GetPDGCharge() != 0.0) &&
148 (particle->GetParticleName() !=
"chargedgeantino")) {
150 pmanager->AddProcess(
new G4hMultipleScattering, -1, 1, 1);
151 pmanager->AddProcess(
new G4hIonisation, -1, 2, 2);
160 G4EmProcessOptions emOptions;
164 emOptions.SetMinEnergy(100*eV);
165 emOptions.SetMaxEnergy(100*TeV);
166 emOptions.SetDEDXBinning(12*20);
167 emOptions.SetLambdaBinning(12*20);
168 emOptions.SetSplineFlag(
true);
172 emOptions.SetMscStepLimitation(fUseDistanceToBoundary);
173 emOptions.SetMscRangeFactor(0.04);
174 emOptions.SetMscGeomFactor (2.5);
175 emOptions.SetSkin(3.);
179 emOptions.SetStepFunction(0.2, 100*um);
180 emOptions.SetLinearLossLimit(1.e-2);
184 emOptions.SetSubCutoff(
false);
virtual ~PhysListEmStandard()
PhysListEmStandard(const G4String &name="standard")