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
G4EmLowEPPhysics.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmLowEPPhysics.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
#include "
G4EmLowEPPhysics.hh
"
28
#include "
G4ParticleDefinition.hh
"
29
#include "
G4SystemOfUnits.hh
"
30
#include "
G4ParticleTable.hh
"
31
32
// *** Processes and models
33
34
// gamma
35
#include "
G4PhotoElectricEffect.hh
"
36
#include "
G4LivermorePhotoElectricModel.hh
"
37
38
#include "
G4ComptonScattering.hh
"
39
#include "
G4LowEPComptonModel.hh
"
40
#include "
G4LivermoreComptonModel.hh
"
41
42
#include "
G4GammaConversion.hh
"
43
#include "
G4LivermoreGammaConversionModel.hh
"
44
45
#include "
G4RayleighScattering.hh
"
46
#include "
G4LivermoreRayleighModel.hh
"
47
48
#include "
G4PEEffectFluoModel.hh
"
49
#include "
G4KleinNishinaModel.hh
"
50
51
// e+-
52
#include "
G4eMultipleScattering.hh
"
53
#include "
G4UniversalFluctuation.hh
"
54
55
#include "
G4eIonisation.hh
"
56
#include "
G4LivermoreIonisationModel.hh
"
57
58
#include "
G4eBremsstrahlung.hh
"
59
#include "
G4LivermoreBremsstrahlungModel.hh
"
60
#include "
G4Generator2BS.hh
"
61
#include "
G4BetheHeitler5DModel.hh
"
62
63
// e+
64
#include "
G4eplusAnnihilation.hh
"
65
66
// mu+-
67
#include "
G4MuMultipleScattering.hh
"
68
#include "
G4MuIonisation.hh
"
69
#include "
G4MuBremsstrahlung.hh
"
70
#include "
G4MuPairProduction.hh
"
71
#include "
G4SeltzerBergerModel.hh
"
72
73
// hadrons
74
#include "
G4hMultipleScattering.hh
"
75
#include "
G4MscStepLimitType.hh
"
76
77
#include "
G4hBremsstrahlung.hh
"
78
#include "
G4hPairProduction.hh
"
79
#include "
G4ePairProduction.hh
"
80
81
#include "
G4hIonisation.hh
"
82
#include "
G4ionIonisation.hh
"
83
#include "
G4alphaIonisation.hh
"
84
#include "
G4IonParametrisedLossModel.hh
"
85
#include "
G4LindhardSorensenIonModel.hh
"
86
#include "
G4NuclearStopping.hh
"
87
88
// msc models
89
#include "
G4UrbanMscModel.hh
"
90
#include "
G4WentzelVIModel.hh
"
91
#include "
G4LowEWentzelVIModel.hh
"
92
#include "
G4GoudsmitSaundersonMscModel.hh
"
93
#include "
G4eCoulombScatteringModel.hh
"
94
#include "
G4CoulombScattering.hh
"
95
96
// interfaces
97
#include "
G4LossTableManager.hh
"
98
#include "
G4UAtomicDeexcitation.hh
"
99
#include "
G4EmParameters.hh
"
100
101
// particles
102
103
#include "
G4Gamma.hh
"
104
#include "
G4Electron.hh
"
105
#include "
G4Positron.hh
"
106
#include "
G4MuonPlus.hh
"
107
#include "
G4MuonMinus.hh
"
108
#include "
G4PionPlus.hh
"
109
#include "
G4PionMinus.hh
"
110
#include "
G4KaonPlus.hh
"
111
#include "
G4KaonMinus.hh
"
112
#include "
G4Proton.hh
"
113
#include "
G4AntiProton.hh
"
114
#include "
G4Deuteron.hh
"
115
#include "
G4Triton.hh
"
116
#include "
G4He3.hh
"
117
#include "
G4Alpha.hh
"
118
#include "
G4GenericIon.hh
"
119
120
//
121
#include "
G4PhysicsListHelper.hh
"
122
#include "
G4BuilderType.hh
"
123
#include "
G4EmModelActivator.hh
"
124
125
// factory
126
#include "
G4PhysicsConstructorFactory.hh
"
127
//
128
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmLowEPPhysics
);
129
130
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131
132
G4EmLowEPPhysics::G4EmLowEPPhysics
(
G4int
ver,
const
G4String
&)
133
:
G4VPhysicsConstructor
(
"G4EmLowEPPhysics"
), verbose(ver)
134
{
135
G4EmParameters
* param =
G4EmParameters::Instance
();
136
param->
SetDefaults
();
137
param->
SetVerbose
(
verbose
);
138
param->
SetMinEnergy
(100*
eV
);
139
param->
SetLowestElectronEnergy
(100*
eV
);
140
param->
SetNumberOfBinsPerDecade
(20);
141
param->
ActivateAngularGeneratorForIonisation
(
true
);
142
param->
SetStepFunction
(0.2, 100*
um
);
143
param->
SetStepFunctionMuHad
(0.2, 50*
um
);
144
param->
SetUseMottCorrection
(
true
);
145
param->
SetMscRangeFactor
(0.04);
146
param->
SetMuHadLateralDisplacement
(
true
);
147
param->
SetFluo
(
true
);
148
param->
SetUseICRU90Data
(
true
);
149
// param->SetAugerCascade(true);
150
SetPhysicsType
(
bElectromagnetic
);
151
}
152
153
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
154
155
G4EmLowEPPhysics::~G4EmLowEPPhysics
()
156
{}
157
158
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
159
160
void
G4EmLowEPPhysics::ConstructParticle
()
161
{
162
// gamma
163
G4Gamma::Gamma
();
164
165
// leptons
166
G4Electron::Electron
();
167
G4Positron::Positron
();
168
G4MuonPlus::MuonPlus
();
169
G4MuonMinus::MuonMinus
();
170
171
// mesons
172
G4PionPlus::PionPlusDefinition
();
173
G4PionMinus::PionMinusDefinition
();
174
G4KaonPlus::KaonPlusDefinition
();
175
G4KaonMinus::KaonMinusDefinition
();
176
177
// baryons
178
G4Proton::Proton
();
179
G4AntiProton::AntiProton
();
180
181
// ions
182
G4Deuteron::Deuteron
();
183
G4Triton::Triton
();
184
G4He3::He3
();
185
G4Alpha::Alpha
();
186
G4GenericIon::GenericIonDefinition
();
187
}
188
189
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
190
191
void
G4EmLowEPPhysics::ConstructProcess
()
192
{
193
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
194
G4LossTableManager
* man =
G4LossTableManager::Instance
();
195
196
// muon & hadron bremsstrahlung and pair production
197
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
198
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
199
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
200
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
201
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
202
G4hPairProduction
* kp =
new
G4hPairProduction
();
203
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
204
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
205
G4ePairProduction
* ee =
new
G4ePairProduction
();
206
207
// muon & hadron multiple scattering
208
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
209
mumsc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
210
G4hMultipleScattering
* pimsc =
new
G4hMultipleScattering
();
211
pimsc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
212
G4hMultipleScattering
* kmsc =
new
G4hMultipleScattering
();
213
kmsc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
214
215
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
();
216
hmsc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
217
218
// nuclear stopping
219
G4NuclearStopping
* pnuc =
new
G4NuclearStopping
();
220
pnuc->
SetMaxKinEnergy
(
MeV
);
221
222
// Add Livermore EM Processes
223
G4ParticleTable
* table =
G4ParticleTable::GetParticleTable
();
224
for
(
const
auto
& particleName :
partList
.
PartNames
()) {
225
G4ParticleDefinition
*
particle
= table->
FindParticle
(particleName);
226
if
(!particle) {
continue
; }
227
if
(particleName ==
"gamma"
) {
228
229
// Photoelectric effect - Livermore model only
230
G4PhotoElectricEffect
* pe =
new
G4PhotoElectricEffect
();
231
G4VEmModel
* theLivermorePEModel =
new
G4LivermorePhotoElectricModel
();
232
pe->
SetEmModel
(theLivermorePEModel);
233
234
// Compton scattering - Livermore model above 20 MeV, Monarsh's model below
235
G4ComptonScattering
* cs =
new
G4ComptonScattering
;
236
cs->
SetEmModel
(
new
G4KleinNishinaModel
());
237
G4VEmModel
* theLowEPComptonModel =
new
G4LowEPComptonModel
();
238
theLowEPComptonModel->
SetHighEnergyLimit
(20*
MeV
);
239
cs->
AddEmModel
(0, theLowEPComptonModel);
240
241
// gamma conversion - 5D model below 80 GeV with Livermore x-sections
242
G4GammaConversion
* theGammaConversion =
new
G4GammaConversion
();
243
G4VEmModel
* conv =
new
G4BetheHeitler5DModel
();
244
theGammaConversion->
SetEmModel
(conv);
245
246
// default Rayleigh scattering is Livermore
247
G4RayleighScattering
* theRayleigh =
new
G4RayleighScattering
();
248
249
ph->
RegisterProcess
(pe, particle);
250
ph->
RegisterProcess
(cs, particle);
251
ph->
RegisterProcess
(theGammaConversion, particle);
252
ph->
RegisterProcess
(theRayleigh, particle);
253
254
}
else
if
(particleName ==
"e-"
) {
255
256
// multiple scattering
257
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
();
258
msc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
259
260
// Ionisation - Livermore should be used only for low energies
261
G4eIonisation
* eioni =
new
G4eIonisation
();
262
G4LivermoreIonisationModel
* theIoniLivermore =
new
263
G4LivermoreIonisationModel
();
264
theIoniLivermore->
SetHighEnergyLimit
(0.1*
MeV
);
265
eioni->
AddEmModel
(0, theIoniLivermore,
new
G4UniversalFluctuation
() );
266
267
// Bremsstrahlung
268
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
269
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
270
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
271
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
272
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
273
brem->
SetEmModel
(br1);
274
brem->
SetEmModel
(br2);
275
br1->
SetHighEnergyLimit
(
GeV
);
276
277
// register processes
278
ph->
RegisterProcess
(msc, particle);
279
ph->
RegisterProcess
(eioni, particle);
280
ph->
RegisterProcess
(brem, particle);
281
282
}
else
if
(particleName ==
"e+"
) {
283
284
// multiple scattering
285
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
();
286
msc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
287
288
// Standard ionisation
289
G4eIonisation
* eioni =
new
G4eIonisation
();
290
291
// Bremsstrahlung
292
G4eBremsstrahlung
* brem =
new
G4eBremsstrahlung
();
293
G4SeltzerBergerModel
* br1 =
new
G4SeltzerBergerModel
();
294
G4eBremsstrahlungRelModel
* br2 =
new
G4eBremsstrahlungRelModel
();
295
br1->
SetAngularDistribution
(
new
G4Generator2BS
());
296
br2->
SetAngularDistribution
(
new
G4Generator2BS
());
297
brem->
SetEmModel
(br1);
298
brem->
SetEmModel
(br2);
299
br1->
SetHighEnergyLimit
(
GeV
);
300
301
// register processes
302
ph->
RegisterProcess
(msc, particle);
303
ph->
RegisterProcess
(eioni, particle);
304
ph->
RegisterProcess
(brem, particle);
305
ph->
RegisterProcess
(ee, particle);
306
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
307
308
}
else
if
(particleName ==
"mu+"
||
309
particleName ==
"mu-"
) {
310
311
G4MuIonisation
* muIoni =
new
G4MuIonisation
();
312
313
ph->
RegisterProcess
(mumsc, particle);
314
ph->
RegisterProcess
(muIoni, particle);
315
ph->
RegisterProcess
(mub, particle);
316
ph->
RegisterProcess
(mup, particle);
317
318
}
else
if
(particleName ==
"alpha"
||
319
particleName ==
"He3"
) {
320
321
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
322
323
ph->
RegisterProcess
(hmsc, particle);
324
ph->
RegisterProcess
(ionIoni, particle);
325
ph->
RegisterProcess
(pnuc, particle);
326
327
}
else
if
(particleName ==
"GenericIon"
) {
328
329
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
330
G4VEmModel
* mod1 =
new
G4IonParametrisedLossModel
();
331
G4VEmModel
* mod2 =
new
G4LindhardSorensenIonModel
();
332
mod1->
SetHighEnergyLimit
(10*
MeV
);
333
ionIoni->
SetEmModel
(mod1);
334
ionIoni->
SetEmModel
(mod2);
335
ionIoni->
SetStepFunction
(0.1, 1*
um
);
336
337
ph->
RegisterProcess
(hmsc, particle);
338
ph->
RegisterProcess
(ionIoni, particle);
339
ph->
RegisterProcess
(
new
G4hBremsstrahlung
(), particle);
340
ph->
RegisterProcess
(
new
G4hPairProduction
(), particle);
341
ph->
RegisterProcess
(pnuc, particle);
342
343
}
else
if
(particleName ==
"pi+"
||
344
particleName ==
"pi-"
) {
345
346
G4hIonisation
* hIoni =
new
G4hIonisation
();
347
348
ph->
RegisterProcess
(pimsc, particle);
349
ph->
RegisterProcess
(hIoni, particle);
350
ph->
RegisterProcess
(pib, particle);
351
ph->
RegisterProcess
(pip, particle);
352
353
}
else
if
(particleName ==
"kaon+"
||
354
particleName ==
"kaon-"
) {
355
356
G4hIonisation
* hIoni =
new
G4hIonisation
();
357
358
ph->
RegisterProcess
(kmsc, particle);
359
ph->
RegisterProcess
(hIoni, particle);
360
ph->
RegisterProcess
(kb, particle);
361
ph->
RegisterProcess
(kp, particle);
362
363
}
else
if
(particleName ==
"proton"
||
364
particleName ==
"anti_proton"
) {
365
366
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
367
pmsc->
SetEmModel
(
new
G4LowEWentzelVIModel
());
368
G4hIonisation
* hIoni =
new
G4hIonisation
();
369
370
ph->
RegisterProcess
(pmsc, particle);
371
ph->
RegisterProcess
(hIoni, particle);
372
ph->
RegisterProcess
(pb, particle);
373
ph->
RegisterProcess
(pp, particle);
374
ph->
RegisterProcess
(pnuc, particle);
375
376
}
else
if
(particleName ==
"B+"
||
377
particleName ==
"B-"
||
378
particleName ==
"D+"
||
379
particleName ==
"D-"
||
380
particleName ==
"Ds+"
||
381
particleName ==
"Ds-"
||
382
particleName ==
"anti_He3"
||
383
particleName ==
"anti_alpha"
||
384
particleName ==
"anti_deuteron"
||
385
particleName ==
"anti_lambda_c+"
||
386
particleName ==
"anti_omega-"
||
387
particleName ==
"anti_sigma_c+"
||
388
particleName ==
"anti_sigma_c++"
||
389
particleName ==
"anti_sigma+"
||
390
particleName ==
"anti_sigma-"
||
391
particleName ==
"anti_triton"
||
392
particleName ==
"anti_xi_c+"
||
393
particleName ==
"anti_xi-"
||
394
particleName ==
"deuteron"
||
395
particleName ==
"lambda_c+"
||
396
particleName ==
"omega-"
||
397
particleName ==
"sigma_c+"
||
398
particleName ==
"sigma_c++"
||
399
particleName ==
"sigma+"
||
400
particleName ==
"sigma-"
||
401
particleName ==
"tau+"
||
402
particleName ==
"tau-"
||
403
particleName ==
"triton"
||
404
particleName ==
"xi_c+"
||
405
particleName ==
"xi-"
) {
406
407
ph->
RegisterProcess
(hmsc, particle);
408
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
409
ph->
RegisterProcess
(pnuc, particle);
410
}
411
}
412
// Deexcitation
413
//
414
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
415
man->
SetAtomDeexcitation
(de);
416
417
G4EmModelActivator
mact(
GetPhysicsName
());
418
}
419
420
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
electromagnetic
src
G4EmLowEPPhysics.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:26
using
1.8.2 with
ECCE GitHub integration