ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
PhysListEm5DStandard.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PhysListEm5DStandard.cc
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
//
27
//---------------------------------------------------------------------------
28
//
29
// ClassName: PhysListEm5DStandard
30
//
31
// Author: IgS 07.11.2017
32
//
33
// Modified:
34
// 17.11.2017 Created using PhysListEm5DStandard from V.Ivanchenko
35
//
36
//----------------------------------------------------------------------------
37
//
38
39
#include "PhysListEm5DStandard.hh"
40
#include "
G4SystemOfUnits.hh
"
41
#include "
G4ParticleDefinition.hh
"
42
#include "
G4EmParameters.hh
"
43
#include "
G4LossTableManager.hh
"
44
45
#include "
G4ComptonScattering.hh
"
46
#include "
G4GammaConversion.hh
"
47
#include "
G4PhotoElectricEffect.hh
"
48
#include "
G4RayleighScattering.hh
"
49
#include "
G4BetheHeitler5DModel.hh
"
50
51
#include "
G4eMultipleScattering.hh
"
52
#include "
G4MuMultipleScattering.hh
"
53
#include "
G4hMultipleScattering.hh
"
54
#include "
G4CoulombScattering.hh
"
55
#include "
G4eCoulombScatteringModel.hh
"
56
#include "
G4WentzelVIModel.hh
"
57
#include "
G4UrbanMscModel.hh
"
58
59
#include "
G4MuBremsstrahlungModel.hh
"
60
#include "
G4MuPairProductionModel.hh
"
61
#include "
G4hBremsstrahlungModel.hh
"
62
#include "
G4hPairProductionModel.hh
"
63
64
#include "
G4eIonisation.hh
"
65
#include "
G4eBremsstrahlung.hh
"
66
#include "
G4eplusAnnihilation.hh
"
67
#include "
G4UAtomicDeexcitation.hh
"
68
69
#include "
G4MuIonisation.hh
"
70
#include "
G4MuBremsstrahlung.hh
"
71
#include "
G4MuPairProduction.hh
"
72
#include "
G4hBremsstrahlung.hh
"
73
#include "
G4hPairProduction.hh
"
74
75
#include "
G4hIonisation.hh
"
76
#include "
G4ionIonisation.hh
"
77
#include "
G4alphaIonisation.hh
"
78
79
#include "
G4Gamma.hh
"
80
#include "
G4Electron.hh
"
81
#include "
G4Positron.hh
"
82
#include "
G4MuonPlus.hh
"
83
#include "
G4MuonMinus.hh
"
84
#include "
G4PionPlus.hh
"
85
#include "
G4PionMinus.hh
"
86
#include "
G4KaonPlus.hh
"
87
#include "
G4KaonMinus.hh
"
88
#include "
G4Proton.hh
"
89
#include "
G4AntiProton.hh
"
90
#include "
G4Deuteron.hh
"
91
#include "
G4Triton.hh
"
92
#include "
G4He3.hh
"
93
#include "
G4Alpha.hh
"
94
#include "
G4GenericIon.hh
"
95
96
#include "
G4PhysicsListHelper.hh
"
97
#include "
G4BuilderType.hh
"
98
99
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
100
101
PhysListEm5DStandard::PhysListEm5DStandard
(
G4int
ver,
const
G4String
&)
102
:
G4VPhysicsConstructor
(
"G4EmStandard_5D"
), verbose(ver)
103
{
104
G4EmParameters
* param =
G4EmParameters::Instance
();
105
param->
SetDefaults
();
106
param->
SetVerbose
(
verbose
);
107
param->
SetNumberOfBinsPerDecade
(10);
108
param->
SetMscStepLimitType
(
fUseSafetyPlus
);
109
param->
SetLateralDisplacementAlg96
(
false
);
110
param->
SetFluo
(
true
);
111
SetPhysicsType
(
bElectromagnetic
);
112
}
113
114
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
115
116
PhysListEm5DStandard::~PhysListEm5DStandard
()
117
{}
118
119
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120
121
void
PhysListEm5DStandard::ConstructParticle
()
122
{
123
// gamma
124
G4Gamma::Gamma
();
125
126
// leptons
127
G4Electron::Electron
();
128
G4Positron::Positron
();
129
G4MuonPlus::MuonPlus
();
130
G4MuonMinus::MuonMinus
();
131
132
// mesons
133
G4PionPlus::PionPlusDefinition
();
134
G4PionMinus::PionMinusDefinition
();
135
G4KaonPlus::KaonPlusDefinition
();
136
G4KaonMinus::KaonMinusDefinition
();
137
138
// barions
139
G4Proton::Proton
();
140
G4AntiProton::AntiProton
();
141
142
// ions
143
G4Deuteron::Deuteron
();
144
G4Triton::Triton
();
145
G4He3::He3
();
146
G4Alpha::Alpha
();
147
G4GenericIon::GenericIonDefinition
();
148
}
149
150
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
151
152
void
PhysListEm5DStandard::ConstructProcess
()
153
{
154
if
(
verbose
> 1) {
155
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
156
}
157
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
158
159
// muon & hadron bremsstrahlung and pair production
160
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
161
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
162
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
163
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
164
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
165
G4hPairProduction
* kp =
new
G4hPairProduction
();
166
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
167
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
168
169
// muon & hadron multiple scattering
170
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
171
mumsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
172
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
173
174
G4MuMultipleScattering
* pimsc =
new
G4MuMultipleScattering
();
175
pimsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
176
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
177
178
G4MuMultipleScattering
* kmsc =
new
G4MuMultipleScattering
();
179
kmsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
180
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
181
182
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
(
"ionmsc"
);
183
184
// high energy limit for e+- scattering models
185
G4double
highEnergyLimit = 100*
MeV
;
186
187
// Add standard EM Processes
188
auto
myParticleIterator=
GetParticleIterator
();
189
myParticleIterator->reset();
190
while
( (*myParticleIterator)() ){
191
G4ParticleDefinition
*
particle
= myParticleIterator->value();
192
G4String
particleName = particle->
GetParticleName
();
193
194
if
(particleName ==
"gamma"
) {
195
196
// photo-effect and Compton
197
ph->
RegisterProcess
(
new
G4PhotoElectricEffect
(), particle);
198
ph->
RegisterProcess
(
new
G4ComptonScattering
(), particle);
199
200
// Gamma conversion
201
G4GammaConversion
* gc =
new
G4GammaConversion
();
202
G4VEmModel
* theGC5DModel =
new
G4BetheHeitler5DModel
();
203
gc->
SetEmModel
(theGC5DModel);
204
ph->
RegisterProcess
(gc, particle);
205
206
// Rayleigh scattering
207
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
208
209
}
else
if
(particleName ==
"e-"
) {
210
211
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
212
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
213
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
214
msc1->
SetHighEnergyLimit
(highEnergyLimit);
215
msc2->
SetLowEnergyLimit
(highEnergyLimit);
216
msc->
AddEmModel
(0, msc1);
217
msc->
AddEmModel
(0, msc2);
218
219
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
220
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
221
ss->
SetEmModel
(ssm, 1);
222
ss->
SetMinKinEnergy
(highEnergyLimit);
223
ssm->
SetLowEnergyLimit
(highEnergyLimit);
224
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
225
226
ph->
RegisterProcess
(msc, particle);
227
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
228
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
229
ph->
RegisterProcess
(ss, particle);
230
231
}
else
if
(particleName ==
"e+"
) {
232
233
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
234
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
235
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
236
msc1->
SetHighEnergyLimit
(highEnergyLimit);
237
msc2->
SetLowEnergyLimit
(highEnergyLimit);
238
msc->
AddEmModel
(0, msc1);
239
msc->
AddEmModel
(0, msc2);
240
241
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
242
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
243
ss->
SetEmModel
(ssm, 1);
244
ss->
SetMinKinEnergy
(highEnergyLimit);
245
ssm->
SetLowEnergyLimit
(highEnergyLimit);
246
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
247
248
ph->
RegisterProcess
(msc, particle);
249
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
250
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
251
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
252
ph->
RegisterProcess
(ss, particle);
253
254
}
else
if
(particleName ==
"mu+"
||
255
particleName ==
"mu-"
) {
256
257
ph->
RegisterProcess
(mumsc, particle);
258
ph->
RegisterProcess
(
new
G4MuIonisation
(), particle);
259
ph->
RegisterProcess
(mub, particle);
260
ph->
RegisterProcess
(mup, particle);
261
ph->
RegisterProcess
(muss, particle);
262
263
}
else
if
(particleName ==
"alpha"
||
264
particleName ==
"He3"
) {
265
266
ph->
RegisterProcess
(
new
G4hMultipleScattering
(), particle);
267
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
268
269
}
else
if
(particleName ==
"GenericIon"
) {
270
271
ph->
RegisterProcess
(hmsc, particle);
272
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
273
274
}
else
if
(particleName ==
"pi+"
||
275
particleName ==
"pi-"
) {
276
277
ph->
RegisterProcess
(pimsc, particle);
278
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
279
ph->
RegisterProcess
(pib, particle);
280
ph->
RegisterProcess
(pip, particle);
281
ph->
RegisterProcess
(piss, particle);
282
283
}
else
if
(particleName ==
"kaon+"
||
284
particleName ==
"kaon-"
) {
285
286
ph->
RegisterProcess
(kmsc, particle);
287
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
288
ph->
RegisterProcess
(kb, particle);
289
ph->
RegisterProcess
(kp, particle);
290
ph->
RegisterProcess
(kss, particle);
291
292
}
else
if
(particleName ==
"proton"
||
293
particleName ==
"anti_proton"
) {
294
295
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
296
pmsc->
SetEmModel
(
new
G4WentzelVIModel
());
297
G4hIonisation
* hIoni =
new
G4hIonisation
();
298
hIoni->
SetStepFunction
(0.1, 10*
um
);
299
300
ph->
RegisterProcess
(pmsc, particle);
301
ph->
RegisterProcess
(hIoni, particle);
302
ph->
RegisterProcess
(pb, particle);
303
ph->
RegisterProcess
(pp, particle);
304
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
305
306
}
else
if
(particleName ==
"B+"
||
307
particleName ==
"B-"
||
308
particleName ==
"D+"
||
309
particleName ==
"D-"
||
310
particleName ==
"Ds+"
||
311
particleName ==
"Ds-"
||
312
particleName ==
"anti_He3"
||
313
particleName ==
"anti_alpha"
||
314
particleName ==
"anti_deuteron"
||
315
particleName ==
"anti_lambda_c+"
||
316
particleName ==
"anti_omega-"
||
317
particleName ==
"anti_sigma_c+"
||
318
particleName ==
"anti_sigma_c++"
||
319
particleName ==
"anti_sigma+"
||
320
particleName ==
"anti_sigma-"
||
321
particleName ==
"anti_triton"
||
322
particleName ==
"anti_xi_c+"
||
323
particleName ==
"anti_xi-"
||
324
particleName ==
"deuteron"
||
325
particleName ==
"lambda_c+"
||
326
particleName ==
"omega-"
||
327
particleName ==
"sigma_c+"
||
328
particleName ==
"sigma_c++"
||
329
particleName ==
"sigma+"
||
330
particleName ==
"sigma-"
||
331
particleName ==
"tau+"
||
332
particleName ==
"tau-"
||
333
particleName ==
"triton"
||
334
particleName ==
"xi_c+"
||
335
particleName ==
"xi-"
) {
336
337
ph->
RegisterProcess
(hmsc, particle);
338
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
339
}
340
}
341
342
// Deexcitation
343
//
344
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
345
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
346
}
347
348
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
electromagnetic
TestEm5
src
PhysListEm5DStandard.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration