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
#include "
G4GammaConversionToMuons.hh
"
51
52
#include "
G4eMultipleScattering.hh
"
53
#include "
G4MuMultipleScattering.hh
"
54
#include "
G4hMultipleScattering.hh
"
55
#include "
G4CoulombScattering.hh
"
56
#include "
G4eCoulombScatteringModel.hh
"
57
#include "
G4WentzelVIModel.hh
"
58
#include "
G4UrbanMscModel.hh
"
59
60
#include "
G4MuBremsstrahlungModel.hh
"
61
#include "
G4MuPairProductionModel.hh
"
62
#include "
G4hBremsstrahlungModel.hh
"
63
#include "
G4hPairProductionModel.hh
"
64
65
#include "
G4eIonisation.hh
"
66
#include "
G4eBremsstrahlung.hh
"
67
#include "
G4eplusAnnihilation.hh
"
68
#include "
G4UAtomicDeexcitation.hh
"
69
70
#include "
G4MuIonisation.hh
"
71
#include "
G4MuBremsstrahlung.hh
"
72
#include "
G4MuPairProduction.hh
"
73
#include "
G4hBremsstrahlung.hh
"
74
#include "
G4hPairProduction.hh
"
75
76
#include "
G4hIonisation.hh
"
77
#include "
G4ionIonisation.hh
"
78
#include "
G4alphaIonisation.hh
"
79
80
#include "
G4Gamma.hh
"
81
#include "
G4Electron.hh
"
82
#include "
G4Positron.hh
"
83
#include "
G4MuonPlus.hh
"
84
#include "
G4MuonMinus.hh
"
85
#include "
G4PionPlus.hh
"
86
#include "
G4PionMinus.hh
"
87
#include "
G4KaonPlus.hh
"
88
#include "
G4KaonMinus.hh
"
89
#include "
G4Proton.hh
"
90
#include "
G4AntiProton.hh
"
91
#include "
G4Deuteron.hh
"
92
#include "
G4Triton.hh
"
93
#include "
G4He3.hh
"
94
#include "
G4Alpha.hh
"
95
#include "
G4GenericIon.hh
"
96
97
#include "
G4PhysicsListHelper.hh
"
98
#include "
G4BuilderType.hh
"
99
100
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
101
102
PhysListEm5DStandard::PhysListEm5DStandard
(
G4int
ver,
const
G4String
&)
103
:
G4VPhysicsConstructor
(
"G4EmStandard_5D"
)
104
{
105
G4EmParameters
* param =
G4EmParameters::Instance
();
106
param->
SetDefaults
();
107
param->
SetVerbose
(ver);
108
param->
SetNumberOfBinsPerDecade
(10);
109
param->
SetMscStepLimitType
(
fUseSafetyPlus
);
110
param->
SetLateralDisplacementAlg96
(
false
);
111
param->
SetFluo
(
true
);
112
SetPhysicsType
(
bElectromagnetic
);
113
}
114
115
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
116
117
PhysListEm5DStandard::~PhysListEm5DStandard
()
118
{}
119
120
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
121
122
void
PhysListEm5DStandard::ConstructParticle
()
123
{
124
// gamma
125
G4Gamma::Gamma
();
126
127
// leptons
128
G4Electron::Electron
();
129
G4Positron::Positron
();
130
G4MuonPlus::MuonPlus
();
131
G4MuonMinus::MuonMinus
();
132
133
// mesons
134
G4PionPlus::PionPlusDefinition
();
135
G4PionMinus::PionMinusDefinition
();
136
G4KaonPlus::KaonPlusDefinition
();
137
G4KaonMinus::KaonMinusDefinition
();
138
139
// barions
140
G4Proton::Proton
();
141
G4AntiProton::AntiProton
();
142
143
// ions
144
G4Deuteron::Deuteron
();
145
G4Triton::Triton
();
146
G4He3::He3
();
147
G4Alpha::Alpha
();
148
G4GenericIon::GenericIonDefinition
();
149
}
150
151
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
152
153
void
PhysListEm5DStandard::ConstructProcess
()
154
{
155
if
(
G4EmParameters::Instance
()->Verbose() > 1) {
156
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
157
}
158
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
159
160
// muon & hadron bremsstrahlung and pair production
161
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
162
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
163
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
164
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
165
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
166
G4hPairProduction
* kp =
new
G4hPairProduction
();
167
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
168
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
169
170
// muon & hadron multiple scattering
171
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
172
mumsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
173
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
174
175
G4MuMultipleScattering
* pimsc =
new
G4MuMultipleScattering
();
176
pimsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
177
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
178
179
G4MuMultipleScattering
* kmsc =
new
G4MuMultipleScattering
();
180
kmsc->
AddEmModel
(0,
new
G4WentzelVIModel
());
181
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
182
183
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
(
"ionmsc"
);
184
185
// high energy limit for e+- scattering models
186
G4double
highEnergyLimit = 100*
MeV
;
187
188
// Add standard EM Processes
189
auto
myParticleIterator=
GetParticleIterator
();
190
myParticleIterator->reset();
191
while
( (*myParticleIterator)() ){
192
G4ParticleDefinition
*
particle
= myParticleIterator->value();
193
G4String
particleName = particle->
GetParticleName
();
194
195
if
(particleName ==
"gamma"
) {
196
197
// photo-effect and Compton
198
ph->
RegisterProcess
(
new
G4PhotoElectricEffect
(), particle);
199
ph->
RegisterProcess
(
new
G4ComptonScattering
(), particle);
200
201
// Gamma conversion to e+ e-
202
G4GammaConversion
* gc =
new
G4GammaConversion
();
203
G4VEmModel
* theGC5DModel =
new
G4BetheHeitler5DModel
();
204
gc->
SetEmModel
(theGC5DModel);
205
ph->
RegisterProcess
(gc, particle);
206
// Gamma conversion to mu+ mu-
207
ph->
RegisterProcess
(
new
G4GammaConversionToMuons
(), particle);
208
209
// Rayleigh scattering
210
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
211
212
}
else
if
(particleName ==
"e-"
) {
213
214
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
215
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
216
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
217
msc1->
SetHighEnergyLimit
(highEnergyLimit);
218
msc2->
SetLowEnergyLimit
(highEnergyLimit);
219
msc->
AddEmModel
(0, msc1);
220
msc->
AddEmModel
(0, msc2);
221
222
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
223
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
224
ss->
SetEmModel
(ssm, 1);
225
ss->
SetMinKinEnergy
(highEnergyLimit);
226
ssm->
SetLowEnergyLimit
(highEnergyLimit);
227
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
228
229
ph->
RegisterProcess
(msc, particle);
230
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
231
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
232
ph->
RegisterProcess
(ss, particle);
233
234
}
else
if
(particleName ==
"e+"
) {
235
236
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
237
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
238
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
239
msc1->
SetHighEnergyLimit
(highEnergyLimit);
240
msc2->
SetLowEnergyLimit
(highEnergyLimit);
241
msc->
AddEmModel
(0, msc1);
242
msc->
AddEmModel
(0, msc2);
243
244
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
245
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
246
ss->
SetEmModel
(ssm, 1);
247
ss->
SetMinKinEnergy
(highEnergyLimit);
248
ssm->
SetLowEnergyLimit
(highEnergyLimit);
249
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
250
251
ph->
RegisterProcess
(msc, particle);
252
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
253
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
254
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
255
ph->
RegisterProcess
(ss, particle);
256
257
}
else
if
(particleName ==
"mu+"
||
258
particleName ==
"mu-"
) {
259
260
ph->
RegisterProcess
(mumsc, particle);
261
ph->
RegisterProcess
(
new
G4MuIonisation
(), particle);
262
ph->
RegisterProcess
(mub, particle);
263
ph->
RegisterProcess
(mup, particle);
264
ph->
RegisterProcess
(muss, particle);
265
266
}
else
if
(particleName ==
"alpha"
||
267
particleName ==
"He3"
) {
268
269
ph->
RegisterProcess
(
new
G4hMultipleScattering
(), particle);
270
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
271
272
}
else
if
(particleName ==
"GenericIon"
) {
273
274
ph->
RegisterProcess
(hmsc, particle);
275
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
276
277
}
else
if
(particleName ==
"pi+"
||
278
particleName ==
"pi-"
) {
279
280
ph->
RegisterProcess
(pimsc, particle);
281
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
282
ph->
RegisterProcess
(pib, particle);
283
ph->
RegisterProcess
(pip, particle);
284
ph->
RegisterProcess
(piss, particle);
285
286
}
else
if
(particleName ==
"kaon+"
||
287
particleName ==
"kaon-"
) {
288
289
ph->
RegisterProcess
(kmsc, particle);
290
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
291
ph->
RegisterProcess
(kb, particle);
292
ph->
RegisterProcess
(kp, particle);
293
ph->
RegisterProcess
(kss, particle);
294
295
}
else
if
(particleName ==
"proton"
||
296
particleName ==
"anti_proton"
) {
297
298
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
299
pmsc->
SetEmModel
(
new
G4WentzelVIModel
());
300
G4hIonisation
* hIoni =
new
G4hIonisation
();
301
hIoni->
SetStepFunction
(0.1, 10*
um
);
302
303
ph->
RegisterProcess
(pmsc, particle);
304
ph->
RegisterProcess
(hIoni, particle);
305
ph->
RegisterProcess
(pb, particle);
306
ph->
RegisterProcess
(pp, particle);
307
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
308
309
}
else
if
(particleName ==
"B+"
||
310
particleName ==
"B-"
||
311
particleName ==
"D+"
||
312
particleName ==
"D-"
||
313
particleName ==
"Ds+"
||
314
particleName ==
"Ds-"
||
315
particleName ==
"anti_He3"
||
316
particleName ==
"anti_alpha"
||
317
particleName ==
"anti_deuteron"
||
318
particleName ==
"anti_lambda_c+"
||
319
particleName ==
"anti_omega-"
||
320
particleName ==
"anti_sigma_c+"
||
321
particleName ==
"anti_sigma_c++"
||
322
particleName ==
"anti_sigma+"
||
323
particleName ==
"anti_sigma-"
||
324
particleName ==
"anti_triton"
||
325
particleName ==
"anti_xi_c+"
||
326
particleName ==
"anti_xi-"
||
327
particleName ==
"deuteron"
||
328
particleName ==
"lambda_c+"
||
329
particleName ==
"omega-"
||
330
particleName ==
"sigma_c+"
||
331
particleName ==
"sigma_c++"
||
332
particleName ==
"sigma+"
||
333
particleName ==
"sigma-"
||
334
particleName ==
"tau+"
||
335
particleName ==
"tau-"
||
336
particleName ==
"triton"
||
337
particleName ==
"xi_c+"
||
338
particleName ==
"xi-"
) {
339
340
ph->
RegisterProcess
(hmsc, particle);
341
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
342
}
343
}
344
345
// Deexcitation
346
//
347
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
348
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
349
}
350
351
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
electromagnetic
TestEm15
src
PhysListEm5DStandard.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration