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