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 G4TankSimulatorASCII;
54 G4TankPhysicsList::G4TankPhysicsList(
const int fastCerenkov) :
56 fFastCerenkov(fastCerenkov)
77 G4Geantino::GeantinoDefinition();
80 G4Gamma::GammaDefinition();
83 G4OpticalPhoton::OpticalPhotonDefinition();
90 G4LeptonConstructor::ConstructParticle();
97 G4MesonConstructor::ConstructParticle();
104 G4BaryonConstructor::ConstructParticle();
121 G4Decay*
const decayProcess =
new G4Decay();
123 G4ProcessManager& mumManager =
124 *G4MuonMinus::MuonMinusDefinition()->GetProcessManager();
125 mumManager.AddDiscreteProcess(decayProcess);
126 mumManager.SetProcessOrdering(decayProcess, idxPostStep);
127 mumManager.SetProcessOrdering(decayProcess, idxAtRest);
129 G4ProcessManager& mupManager =
130 *G4MuonPlus::MuonPlusDefinition()->GetProcessManager();
131 mupManager.AddDiscreteProcess(decayProcess);
132 mupManager.SetProcessOrdering(decayProcess, idxPostStep);
133 mupManager.SetProcessOrdering(decayProcess, idxAtRest);
140 theParticleIterator->reset();
141 while ((*theParticleIterator)()) {
142 const G4ParticleDefinition&
particle = *theParticleIterator->value();
143 G4ProcessManager& pManager = *particle.GetProcessManager();
144 const G4String& particleName = particle.GetParticleName();
146 if (particleName ==
"gamma") {
148 pManager.AddDiscreteProcess(
new G4PhotoElectricEffect);
149 pManager.AddDiscreteProcess(
new G4ComptonScattering);
150 pManager.AddDiscreteProcess(
new G4GammaConversion);
152 }
else if (particleName ==
"e-") {
154 #if (G4VERSION_NUMBER>=930)
155 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
157 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
159 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
160 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
162 }
else if (particleName ==
"e+") {
164 #if (G4VERSION_NUMBER>=930)
165 pManager.AddProcess(
new G4eMultipleScattering, -1, 1, 1);
167 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
169 pManager.AddProcess(
new G4eIonisation, -1, 2, 2);
170 pManager.AddProcess(
new G4eBremsstrahlung, -1, 3, 3);
171 pManager.AddProcess(
new G4eplusAnnihilation, 0, -1, 4);
173 }
else if (particleName ==
"mu+" ||
174 particleName ==
"mu-") {
176 #if (G4VERSION_NUMBER>=930)
177 pManager.AddProcess(
new G4MuMultipleScattering, -1, 1, 1);
179 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
181 pManager.AddProcess(
new G4MuIonisation, -1, 2, 2);
182 pManager.AddProcess(
new G4MuBremsstrahlung, -1, 3, 3);
183 pManager.AddProcess(
new G4MuPairProduction, -1, 4, 4);
184 if (particleName ==
"mu-" &&
186 pManager.AddProcess(
new G4MuonMinusCaptureAtRest);
189 }
else if (particle.GetPDGCharge() &&
190 particle.GetParticleName() !=
"chargedgeantino") {
192 #if (G4VERSION_NUMBER>=930)
193 pManager.AddProcess(
new G4hMultipleScattering, -1, 1, 1);
195 pManager.AddProcess(
new G4MultipleScattering, -1, 1, 1);
197 pManager.AddProcess(
new G4hIonisation, -1, 2, 2);
203 G4Cerenkov*
const cerenkov =
new G4Cerenkov(
"Cerenkov");
206 const G4int maxNumPhotons = 3;
207 cerenkov->SetTrackSecondariesFirst(
true);
208 cerenkov->SetMaxNumPhotonsPerStep(maxNumPhotons);
210 theParticleIterator->reset();
211 while ((*theParticleIterator)()) {
212 G4ParticleDefinition&
particle = *theParticleIterator->value();
213 G4ProcessManager& pManager = *particle.GetProcessManager();
214 if (cerenkov->IsApplicable(particle)) {
215 pManager.AddProcess(cerenkov);
216 pManager.SetProcessOrdering(cerenkov, idxPostStep);
225 const G4int maxNumPhotons = 3;
229 G4Electron::Electron()->GetProcessManager()->AddContinuousProcess(cerenkov);
231 G4Positron::Positron()->GetProcessManager()->AddContinuousProcess(cerenkov);
233 G4MuonMinus::MuonMinusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
235 G4MuonPlus::MuonPlusDefinition()->GetProcessManager()->AddContinuousProcess(cerenkov);
245 G4OpAbsorption*
const absorption =
new G4OpAbsorption();
246 G4OpRayleigh*
const rayleighScattering =
new G4OpRayleigh();
251 const G4OpticalSurfaceModel model = unified;
254 G4ProcessManager& pManager =
255 *G4OpticalPhoton::OpticalPhotonDefinition()->GetProcessManager();
256 pManager.AddDiscreteProcess(absorption);
257 pManager.AddDiscreteProcess(rayleighScattering);
258 pManager.AddDiscreteProcess(boundary);
265 defaultCutValue = 0.1*
mm;
267 const double cutForMuon = 0.1*
mm;
268 const double cutForGamma = 0.1*
mm;
269 const double cutForElectron = 0.1*
mm;
270 const double cutForPositron = 1e-5*
mm;
274 SetCutValue(cutForGamma,
"gamma");
275 SetCutValue(cutForElectron,
"e-");
276 SetCutValue(cutForPositron,
"e+");
278 DumpCutValuesTable();
void SetTrackSecondariesFirst(const G4bool)
static bool MuCaptureOn()
void SetModel(G4OpticalSurfaceModel model)
struct particle_info particle[80]
void SetMaxNumPhotonsPerStep(const G4int)