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