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
G4EmStandardPhysics.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmStandardPhysics.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: G4EmStandardPhysics
30
//
31
// Author: V.Ivanchenko 09.11.2005
32
//
33
// Modified:
34
//
35
//----------------------------------------------------------------------------
36
//
37
38
#include "
G4EmStandardPhysics.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 "
G4LivermorePhotoElectricModel.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 "
G4ParticleTable.hh
"
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
#include "
G4EmModelActivator.hh
"
99
#include "
G4GammaGeneralProcess.hh
"
100
101
// factory
102
#include "
G4PhysicsConstructorFactory.hh
"
103
//
104
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmStandardPhysics
);
105
106
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
107
108
G4EmStandardPhysics::G4EmStandardPhysics
(
G4int
ver,
const
G4String
&)
109
:
G4VPhysicsConstructor
(
"G4EmStandard"
), verbose(ver)
110
{
111
G4EmParameters
* param =
G4EmParameters::Instance
();
112
param->
SetDefaults
();
113
param->
SetVerbose
(
verbose
);
114
SetPhysicsType
(
bElectromagnetic
);
115
}
116
117
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
118
119
G4EmStandardPhysics::~G4EmStandardPhysics
()
120
{}
121
122
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
123
124
void
G4EmStandardPhysics::ConstructParticle
()
125
{
126
// gamma
127
G4Gamma::Gamma
();
128
129
// leptons
130
G4Electron::Electron
();
131
G4Positron::Positron
();
132
G4MuonPlus::MuonPlus
();
133
G4MuonMinus::MuonMinus
();
134
135
// mesons
136
G4PionPlus::PionPlusDefinition
();
137
G4PionMinus::PionMinusDefinition
();
138
G4KaonPlus::KaonPlusDefinition
();
139
G4KaonMinus::KaonMinusDefinition
();
140
141
// barions
142
G4Proton::Proton
();
143
G4AntiProton::AntiProton
();
144
145
// ions
146
G4Deuteron::Deuteron
();
147
G4Triton::Triton
();
148
G4He3::He3
();
149
G4Alpha::Alpha
();
150
G4GenericIon::GenericIonDefinition
();
151
}
152
153
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
154
155
void
G4EmStandardPhysics::ConstructProcess
()
156
{
157
if
(
verbose
> 1) {
158
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
159
}
160
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
161
G4LossTableManager
* man =
G4LossTableManager::Instance
();
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->
SetEmModel
(
new
G4WentzelVIModel
());
176
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
177
178
G4hMultipleScattering
* pimsc =
new
G4hMultipleScattering
();
179
pimsc->
SetEmModel
(
new
G4WentzelVIModel
());
180
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
181
182
G4hMultipleScattering
* kmsc =
new
G4hMultipleScattering
();
183
kmsc->
SetEmModel
(
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 =
G4EmParameters::Instance
()->
MscEnergyLimit
();
190
191
// Add standard EM Processes
192
G4ParticleTable
* table =
G4ParticleTable::GetParticleTable
();
193
for
(
const
auto
& particleName :
partList
.
PartNames
()) {
194
G4ParticleDefinition
*
particle
= table->
FindParticle
(particleName);
195
if
(!particle) {
continue
; }
196
if
(particleName ==
"gamma"
) {
197
198
G4PhotoElectricEffect
* pee =
new
G4PhotoElectricEffect
();
199
pee->
SetEmModel
(
new
G4LivermorePhotoElectricModel
());
200
201
if
(
G4EmParameters::Instance
()->GeneralProcessActive()) {
202
G4GammaGeneralProcess
*
sp
=
new
G4GammaGeneralProcess
();
203
sp->
AddEmProcess
(pee);
204
sp->
AddEmProcess
(
new
G4ComptonScattering
());
205
sp->
AddEmProcess
(
new
G4GammaConversion
());
206
sp->
AddEmProcess
(
new
G4RayleighScattering
());
207
man->
SetGammaGeneralProcess
(sp);
208
ph->
RegisterProcess
(sp, particle);
209
210
}
else
{
211
ph->
RegisterProcess
(pee, particle);
212
ph->
RegisterProcess
(
new
G4ComptonScattering
(), particle);
213
ph->
RegisterProcess
(
new
G4GammaConversion
(), particle);
214
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
215
}
216
217
}
else
if
(particleName ==
"e-"
) {
218
219
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
220
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
221
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
222
msc1->
SetHighEnergyLimit
(highEnergyLimit);
223
msc2->
SetLowEnergyLimit
(highEnergyLimit);
224
msc->
SetEmModel
(msc1);
225
msc->
SetEmModel
(msc2);
226
227
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
228
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
229
ss->
SetEmModel
(ssm);
230
ss->
SetMinKinEnergy
(highEnergyLimit);
231
ssm->
SetLowEnergyLimit
(highEnergyLimit);
232
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
233
234
ph->
RegisterProcess
(msc, particle);
235
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
236
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
237
ph->
RegisterProcess
(ss, particle);
238
239
}
else
if
(particleName ==
"e+"
) {
240
241
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
242
G4UrbanMscModel
* msc1 =
new
G4UrbanMscModel
();
243
G4WentzelVIModel
* msc2 =
new
G4WentzelVIModel
();
244
msc1->
SetHighEnergyLimit
(highEnergyLimit);
245
msc2->
SetLowEnergyLimit
(highEnergyLimit);
246
msc->
SetEmModel
(msc1);
247
msc->
SetEmModel
(msc2);
248
249
G4eCoulombScatteringModel
* ssm =
new
G4eCoulombScatteringModel
();
250
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
251
ss->
SetEmModel
(ssm);
252
ss->
SetMinKinEnergy
(highEnergyLimit);
253
ssm->
SetLowEnergyLimit
(highEnergyLimit);
254
ssm->
SetActivationLowEnergyLimit
(highEnergyLimit);
255
256
ph->
RegisterProcess
(msc, particle);
257
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
258
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
259
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
260
ph->
RegisterProcess
(ss, particle);
261
262
}
else
if
(particleName ==
"mu+"
||
263
particleName ==
"mu-"
) {
264
265
ph->
RegisterProcess
(mumsc, particle);
266
ph->
RegisterProcess
(
new
G4MuIonisation
(), particle);
267
ph->
RegisterProcess
(mub, particle);
268
ph->
RegisterProcess
(mup, particle);
269
ph->
RegisterProcess
(muss, particle);
270
271
}
else
if
(particleName ==
"alpha"
||
272
particleName ==
"He3"
) {
273
274
ph->
RegisterProcess
(
new
G4hMultipleScattering
(), particle);
275
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
276
277
}
else
if
(particleName ==
"GenericIon"
) {
278
279
ph->
RegisterProcess
(hmsc, particle);
280
ph->
RegisterProcess
(
new
G4ionIonisation
(), particle);
281
282
}
else
if
(particleName ==
"pi+"
||
283
particleName ==
"pi-"
) {
284
285
ph->
RegisterProcess
(pimsc, particle);
286
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
287
ph->
RegisterProcess
(pib, particle);
288
ph->
RegisterProcess
(pip, particle);
289
ph->
RegisterProcess
(piss, particle);
290
291
}
else
if
(particleName ==
"kaon+"
||
292
particleName ==
"kaon-"
) {
293
294
ph->
RegisterProcess
(kmsc, particle);
295
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
296
ph->
RegisterProcess
(kb, particle);
297
ph->
RegisterProcess
(kp, particle);
298
ph->
RegisterProcess
(kss, particle);
299
300
}
else
if
(particleName ==
"proton"
||
301
particleName ==
"anti_proton"
) {
302
303
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
304
pmsc->
SetEmModel
(
new
G4WentzelVIModel
());
305
306
ph->
RegisterProcess
(pmsc, particle);
307
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
308
ph->
RegisterProcess
(pb, particle);
309
ph->
RegisterProcess
(pp, particle);
310
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
311
312
}
else
if
(particleName ==
"B+"
||
313
particleName ==
"B-"
||
314
particleName ==
"D+"
||
315
particleName ==
"D-"
||
316
particleName ==
"Ds+"
||
317
particleName ==
"Ds-"
||
318
particleName ==
"anti_He3"
||
319
particleName ==
"anti_alpha"
||
320
particleName ==
"anti_deuteron"
||
321
particleName ==
"anti_lambda_c+"
||
322
particleName ==
"anti_omega-"
||
323
particleName ==
"anti_sigma_c+"
||
324
particleName ==
"anti_sigma_c++"
||
325
particleName ==
"anti_sigma+"
||
326
particleName ==
"anti_sigma-"
||
327
particleName ==
"anti_triton"
||
328
particleName ==
"anti_xi_c+"
||
329
particleName ==
"anti_xi-"
||
330
particleName ==
"deuteron"
||
331
particleName ==
"lambda_c+"
||
332
particleName ==
"omega-"
||
333
particleName ==
"sigma_c+"
||
334
particleName ==
"sigma_c++"
||
335
particleName ==
"sigma+"
||
336
particleName ==
"sigma-"
||
337
particleName ==
"tau+"
||
338
particleName ==
"tau-"
||
339
particleName ==
"triton"
||
340
particleName ==
"xi_c+"
||
341
particleName ==
"xi-"
) {
342
343
ph->
RegisterProcess
(hmsc, particle);
344
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
345
}
346
}
347
348
// Deexcitation
349
//
350
man->
SetAtomDeexcitation
(
new
G4UAtomicDeexcitation
());
351
352
G4EmModelActivator
mact(
GetPhysicsName
());
353
}
354
355
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
electromagnetic
src
G4EmStandardPhysics.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:26
using
1.8.2 with
ECCE GitHub integration