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>
12 #warning "GEANT4 version" G4VERSION_NUMBER
13 #include <G4MuonMinusCapture.hh>
21 #include <G4IonConstructor.hh>
22 #include <G4ComptonScattering.hh>
23 #include <G4GammaConversion.hh>
24 #include <G4PhotoElectricEffect.hh>
25 #include <G4Version.hh>
27 #if (G4VERSION_NUMBER>=930)
28 #include "G4eMultipleScattering.hh"
29 #include "G4MuMultipleScattering.hh"
30 #include "G4hMultipleScattering.hh"
32 #include "G4MultipleScattering.hh"
36 #include <G4eIonisation.hh>
37 #include <G4eBremsstrahlung.hh>
38 #include <G4eplusAnnihilation.hh>
39 #include <G4MuIonisation.hh>
40 #include <G4MuBremsstrahlung.hh>
41 #include <G4MuPairProduction.hh>
42 #include <G4hIonisation.hh>
43 #include <G4Cerenkov.hh>
44 #include <G4OpAbsorption.hh>
45 #include <G4OpRayleigh.hh>
48 #include <G4BaryonConstructor.hh>
49 #include <G4MesonConstructor.hh>
50 #include <G4LeptonConstructor.hh>
60 using namespace G4TankSimulatorOG;
63 G4TankPhysicsList::G4TankPhysicsList(
const bool fastCerenkov) :
65 fFastCerenkov(fastCerenkov)
84 G4Geantino::GeantinoDefinition();
87 G4Gamma::GammaDefinition();
90 G4OpticalPhoton::OpticalPhotonDefinition();
97 G4LeptonConstructor::ConstructParticle();
104 G4MesonConstructor::ConstructParticle();
111 G4BaryonConstructor::ConstructParticle();
128 G4Decay*
const decayProcess =
new G4Decay();
130 G4ProcessManager& mumManager =
131 *G4MuonMinus::MuonMinusDefinition()->GetProcessManager();
132 mumManager.AddDiscreteProcess(decayProcess);
133 mumManager.SetProcessOrdering(decayProcess, idxPostStep);
134 mumManager.SetProcessOrdering(decayProcess, idxAtRest);
136 G4ProcessManager& mupManager =
137 *G4MuonPlus::MuonPlusDefinition()->GetProcessManager();
138 mupManager.AddDiscreteProcess(decayProcess);
139 mupManager.SetProcessOrdering(decayProcess, idxPostStep);
140 mupManager.SetProcessOrdering(decayProcess, idxAtRest);
147 theParticleIterator->reset();
148 while ((*theParticleIterator)()) {
149 const G4ParticleDefinition&
particle = *theParticleIterator->value();
150 G4ProcessManager& pManager = *particle.GetProcessManager();
151 const G4String& particleName = particle.GetParticleName();
153 if (particleName ==
"gamma") {
155 pManager.AddDiscreteProcess(
new G4PhotoElectricEffect);
156 pManager.AddDiscreteProcess(
new G4ComptonScattering);
157 pManager.AddDiscreteProcess(
new G4GammaConversion);
159 }
else if (particleName ==
"e-") {
161 #if (G4VERSION_NUMBER>=930)
162 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
164 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
166 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
167 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
169 }
else if (particleName ==
"e+") {
171 #if (G4VERSION_NUMBER>=930)
172 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
174 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
176 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
177 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
178 pManager.AddProcess(
new G4eplusAnnihilation, 0, -1, 4);
180 }
else if (particleName ==
"mu+" ||
181 particleName ==
"mu-") {
183 #if (G4VERSION_NUMBER>=930)
184 pManager.AddProcess(
new G4MuMultipleScattering, -1, 1, 1);
186 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
188 pManager.AddProcess(
new G4MuIonisation, -1, 2, 2);
189 pManager.AddProcess(
new G4MuBremsstrahlung, -1, 3, 3);
190 pManager.AddProcess(
new G4MuPairProduction, -1, 4, 4);
191 if (particleName ==
"mu-" &&
193 pManager.AddProcess(
new G4MuonMinusCaptureAtRest);
196 }
else if (particle.GetPDGCharge() &&
197 particle.GetParticleName() !=
"chargedgeantino") {
199 #if (G4VERSION_NUMBER>=930)
200 pManager.AddProcess(
new G4hMultipleScattering, -1, 1, 1);
202 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
204 pManager.AddProcess(
new G4hIonisation, -1, 2, 2);
210 G4Cerenkov*
const cerenkov =
new G4Cerenkov(
"Cerenkov");
213 const G4int maxNumPhotons = 3;
214 cerenkov->SetTrackSecondariesFirst(
true);
215 cerenkov->SetMaxNumPhotonsPerStep(maxNumPhotons);
217 theParticleIterator->reset();
218 while ((*theParticleIterator)()) {
219 G4ParticleDefinition&
particle = *theParticleIterator->value();
220 G4ProcessManager& pManager = *particle.GetProcessManager();
221 if (cerenkov->IsApplicable(particle)) {
222 pManager.AddProcess(cerenkov);
223 pManager.SetProcessOrdering(cerenkov, idxPostStep);
232 const G4int maxNumPhotons = 3;
236 G4Electron::Electron()->GetProcessManager()->AddContinuousProcess(cerenkov);
238 G4Positron::Positron()->GetProcessManager()->AddContinuousProcess(cerenkov);
240 G4MuonMinus::MuonMinusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
242 G4MuonPlus::MuonPlusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
251 G4OpAbsorption*
const absorption =
new G4OpAbsorption();
252 G4OpRayleigh*
const rayleighScattering =
new G4OpRayleigh();
257 const G4OpticalSurfaceModel model = unified;
260 G4ProcessManager& pManager =
261 *G4OpticalPhoton::OpticalPhotonDefinition()->GetProcessManager();
262 pManager.AddDiscreteProcess(absorption);
263 pManager.AddDiscreteProcess(rayleighScattering);
264 pManager.AddDiscreteProcess(boundary);
271 defaultCutValue = 0.1*
mm;
273 const double cutForGamma = 30*
mm;
274 const double cutForElectron = 0.5*
mm;
275 const double cutForPositron = 1e-5*
mm;
279 SetCutValue(cutForGamma,
"gamma");
280 SetCutValue(cutForElectron,
"e-");
281 SetCutValue(cutForPositron,
"e+");
283 DumpCutValuesTable();
void SetMaxNumPhotonsPerStep(const G4int)
void SetModel(G4OpticalSurfaceModel model)
struct particle_info particle[80]
void SetTrackSecondariesFirst(const G4bool)
static bool MuCaptureOn()