3 #include <G4ParticleDefinition.hh>
4 #include <G4ParticleTypes.hh>
5 #include <G4ParticleWithCuts.hh>
6 #include <G4ParticleTable.hh>
7 #include <G4Material.hh>
8 #include <G4MaterialTable.hh>
9 #include <G4ProcessManager.hh>
10 #include <G4ProcessVector.hh>
11 #include <G4MuonMinusCaptureAtRest.hh>
12 #include <G4IonConstructor.hh>
13 #include <G4ComptonScattering.hh>
14 #include <G4GammaConversion.hh>
15 #include <G4PhotoElectricEffect.hh>
16 #include <G4Version.hh>
18 #if (G4VERSION_NUMBER>=930)
19 #include "G4eMultipleScattering.hh"
20 #include "G4MuMultipleScattering.hh"
21 #include "G4hMultipleScattering.hh"
23 #include "G4MultipleScattering.hh"
27 #include <G4eIonisation.hh>
28 #include <G4eBremsstrahlung.hh>
29 #include <G4eplusAnnihilation.hh>
30 #include <G4MuIonisation.hh>
31 #include <G4MuBremsstrahlung.hh>
32 #include <G4MuPairProduction.hh>
33 #include <G4hIonisation.hh>
34 #include <G4Cerenkov.hh>
35 #include <G4OpAbsorption.hh>
36 #include <G4OpRayleigh.hh>
39 #include <G4BaryonConstructor.hh>
40 #include <G4MesonConstructor.hh>
41 #include <G4LeptonConstructor.hh>
51 using namespace G4XTankSimulatorAG;
54 G4XTankPhysicsList::G4XTankPhysicsList(
const bool fastCerenkov) :
56 fFastCerenkov(fastCerenkov)
75 G4Geantino::GeantinoDefinition();
78 G4Gamma::GammaDefinition();
81 G4OpticalPhoton::OpticalPhotonDefinition();
88 G4LeptonConstructor::ConstructParticle();
95 G4MesonConstructor::ConstructParticle();
102 G4BaryonConstructor::ConstructParticle();
119 G4Decay*
const decayProcess =
new G4Decay();
121 G4ProcessManager& mumManager =
122 *G4MuonMinus::MuonMinusDefinition()->GetProcessManager();
123 mumManager.AddDiscreteProcess(decayProcess);
124 mumManager.SetProcessOrdering(decayProcess, idxPostStep);
125 mumManager.SetProcessOrdering(decayProcess, idxAtRest);
127 G4ProcessManager& mupManager =
128 *G4MuonPlus::MuonPlusDefinition()->GetProcessManager();
129 mupManager.AddDiscreteProcess(decayProcess);
130 mupManager.SetProcessOrdering(decayProcess, idxPostStep);
131 mupManager.SetProcessOrdering(decayProcess, idxAtRest);
138 theParticleIterator->reset();
139 while ((*theParticleIterator)()) {
140 const G4ParticleDefinition&
particle = *theParticleIterator->value();
141 G4ProcessManager& pManager = *particle.GetProcessManager();
142 const G4String& particleName = particle.GetParticleName();
144 if (particleName ==
"gamma") {
146 pManager.AddDiscreteProcess(
new G4PhotoElectricEffect);
147 pManager.AddDiscreteProcess(
new G4ComptonScattering);
148 pManager.AddDiscreteProcess(
new G4GammaConversion);
150 }
else if (particleName ==
"e-") {
152 #if (G4VERSION_NUMBER>=930)
153 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
155 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
157 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
158 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
160 }
else if (particleName ==
"e+") {
162 #if (G4VERSION_NUMBER>=930)
163 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
165 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
167 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
168 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
169 pManager.AddProcess(
new G4eplusAnnihilation, 0, -1, 4);
171 }
else if (particleName ==
"mu+" ||
172 particleName ==
"mu-") {
174 #if (G4VERSION_NUMBER>=930)
175 pManager.AddProcess(
new G4MuMultipleScattering, -1, 1, 1);
177 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
179 pManager.AddProcess(
new G4MuIonisation, -1, 2, 2);
180 pManager.AddProcess(
new G4MuBremsstrahlung, -1, 3, 3);
181 pManager.AddProcess(
new G4MuPairProduction, -1, 4, 4);
182 if (particleName ==
"mu-" &&
184 pManager.AddProcess(
new G4MuonMinusCaptureAtRest);
187 }
else if (particle.GetPDGCharge() &&
188 particle.GetParticleName() !=
"chargedgeantino") {
190 #if (G4VERSION_NUMBER>=930)
191 pManager.AddProcess(
new G4hMultipleScattering, -1, 1, 1);
193 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
195 pManager.AddProcess(
new G4hIonisation, -1, 2, 2);
201 G4Cerenkov*
const cerenkov =
new G4Cerenkov(
"Cerenkov");
204 const G4int maxNumPhotons = 3;
205 cerenkov->SetTrackSecondariesFirst(
true);
206 cerenkov->SetMaxNumPhotonsPerStep(maxNumPhotons);
208 theParticleIterator->reset();
209 while ((*theParticleIterator)()) {
210 G4ParticleDefinition&
particle = *theParticleIterator->value();
211 G4ProcessManager& pManager = *particle.GetProcessManager();
212 if (cerenkov->IsApplicable(particle)) {
213 pManager.AddProcess(cerenkov);
214 pManager.SetProcessOrdering(cerenkov, idxPostStep);
223 const G4int maxNumPhotons = 3;
227 G4Electron::Electron()->GetProcessManager()->AddContinuousProcess(cerenkov);
229 G4Positron::Positron()->GetProcessManager()->AddContinuousProcess(cerenkov);
231 G4MuonMinus::MuonMinusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
233 G4MuonPlus::MuonPlusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
242 G4OpAbsorption*
const absorption =
new G4OpAbsorption();
243 G4OpRayleigh*
const rayleighScattering =
new G4OpRayleigh();
248 const G4OpticalSurfaceModel model = unified;
251 G4ProcessManager& pManager =
252 *G4OpticalPhoton::OpticalPhotonDefinition()->GetProcessManager();
253 pManager.AddDiscreteProcess(absorption);
254 pManager.AddDiscreteProcess(rayleighScattering);
255 pManager.AddDiscreteProcess(boundary);
262 defaultCutValue = 0.1*
mm;
264 const double cutForGamma = 30*
mm;
265 const double cutForElectron = 0.5*
mm;
266 const double cutForPositron = 1e-5*
mm;
270 SetCutValue(cutForGamma,
"gamma");
271 SetCutValue(cutForElectron,
"e-");
272 SetCutValue(cutForPositron,
"e+");
274 DumpCutValuesTable();
void SetTrackSecondariesFirst(const G4bool)
static bool MuCaptureOn()
void SetMaxNumPhotonsPerStep(const G4int)
struct particle_info particle[80]
void SetModel(G4OpticalSurfaceModel model)