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
G4EmStandardPhysicsGS.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmStandardPhysicsGS.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: G4EmStandardPhysicsGS
30
//
31
// Author: V.Ivanchenko 05.06.2015
32
//
33
// Modified:
34
//
35
// Class Description:
36
//
37
// Standard EM physics constructor for HEP applications with the Goudsmit
38
// -Saunderson MSC model for e-/e+ Coulomb scattering below 100 [MeV] (instead
39
// of the Urban model). Note, that the Goudsmit-Saunderson MSC model used here
40
// with its HEP settings (i.e. less accurate). The Goudsmit-Saunderson MSC
41
// model with its most accurate settings is used in the G4EmStandard_opt4
42
// physics constructor for e-/e+ Coulomb scattering.
43
//
44
//----------------------------------------------------------------------------
45
//
46
47
#include "
G4EmStandardPhysicsGS.hh
"
48
#include "
G4SystemOfUnits.hh
"
49
#include "
G4ParticleDefinition.hh
"
50
#include "
G4EmParameters.hh
"
51
#include "
G4LossTableManager.hh
"
52
53
#include "
G4ComptonScattering.hh
"
54
#include "
G4GammaConversion.hh
"
55
#include "
G4PhotoElectricEffect.hh
"
56
#include "
G4RayleighScattering.hh
"
57
#include "
G4LivermorePhotoElectricModel.hh
"
58
59
#include "
G4eMultipleScattering.hh
"
60
#include "
G4MuMultipleScattering.hh
"
61
#include "
G4hMultipleScattering.hh
"
62
#include "
G4CoulombScattering.hh
"
63
#include "
G4eCoulombScatteringModel.hh
"
64
#include "
G4WentzelVIModel.hh
"
65
#include "
G4UrbanMscModel.hh
"
66
#include "
G4GoudsmitSaundersonMscModel.hh
"
67
68
#include "
G4MuBremsstrahlungModel.hh
"
69
#include "
G4MuPairProductionModel.hh
"
70
#include "
G4hBremsstrahlungModel.hh
"
71
#include "
G4hPairProductionModel.hh
"
72
73
#include "
G4eIonisation.hh
"
74
#include "
G4eBremsstrahlung.hh
"
75
#include "
G4eplusAnnihilation.hh
"
76
#include "
G4UAtomicDeexcitation.hh
"
77
78
#include "
G4MuIonisation.hh
"
79
#include "
G4MuBremsstrahlung.hh
"
80
#include "
G4MuPairProduction.hh
"
81
#include "
G4hBremsstrahlung.hh
"
82
#include "
G4hPairProduction.hh
"
83
84
#include "
G4hIonisation.hh
"
85
#include "
G4ionIonisation.hh
"
86
#include "
G4alphaIonisation.hh
"
87
88
#include "
G4ParticleTable.hh
"
89
#include "
G4Gamma.hh
"
90
#include "
G4Electron.hh
"
91
#include "
G4Positron.hh
"
92
#include "
G4MuonPlus.hh
"
93
#include "
G4MuonMinus.hh
"
94
#include "
G4PionPlus.hh
"
95
#include "
G4PionMinus.hh
"
96
#include "
G4KaonPlus.hh
"
97
#include "
G4KaonMinus.hh
"
98
#include "
G4Proton.hh
"
99
#include "
G4AntiProton.hh
"
100
#include "
G4Deuteron.hh
"
101
#include "
G4Triton.hh
"
102
#include "
G4He3.hh
"
103
#include "
G4Alpha.hh
"
104
#include "
G4GenericIon.hh
"
105
106
#include "
G4PhysicsListHelper.hh
"
107
#include "
G4BuilderType.hh
"
108
#include "
G4EmModelActivator.hh
"
109
110
// factory
111
#include "
G4PhysicsConstructorFactory.hh
"
112
//
113
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmStandardPhysicsGS
);
114
115
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
116
117
G4EmStandardPhysicsGS::G4EmStandardPhysicsGS
(
G4int
ver,
const
G4String
&)
118
:
G4VPhysicsConstructor
(
"G4EmStandardGS"
), verbose(ver)
119
{
120
G4EmParameters
* param =
G4EmParameters::Instance
();
121
param->
SetDefaults
();
122
param->
SetVerbose
(
verbose
);
123
param->
SetMscRangeFactor
(0.06);
124
// param->SetMscStepLimitType(fUseSafetyPlus); // corresponds to the error-free stepping
125
// param->SetFluo(true);
126
SetPhysicsType
(
bElectromagnetic
);
127
}
128
129
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
130
131
G4EmStandardPhysicsGS::~G4EmStandardPhysicsGS
()
132
{}
133
134
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
135
136
void
G4EmStandardPhysicsGS::ConstructParticle
()
137
{
138
// gamma
139
G4Gamma::Gamma
();
140
141
// leptons
142
G4Electron::Electron
();
143
G4Positron::Positron
();
144
G4MuonPlus::MuonPlus
();
145
G4MuonMinus::MuonMinus
();
146
147
// mesons
148
G4PionPlus::PionPlusDefinition
();
149
G4PionMinus::PionMinusDefinition
();
150
G4KaonPlus::KaonPlusDefinition
();
151
G4KaonMinus::KaonMinusDefinition
();
152
153
// barions
154
G4Proton::Proton
();
155
G4AntiProton::AntiProton
();
156
157
// ions
158
G4Deuteron::Deuteron
();
159
G4Triton::Triton
();
160
G4He3::He3
();
161
G4Alpha::Alpha
();
162
G4GenericIon::GenericIonDefinition
();
163
}
164
165
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
166
167
void
G4EmStandardPhysicsGS::ConstructProcess
()
168
{
169
if
(
verbose
> 1) {
170
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
171
}
172
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
173
174
// muon & hadron bremsstrahlung and pair production
175
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
176
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
177
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
178
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
179
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
180
G4hPairProduction
* kp =
new
G4hPairProduction
();
181
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
182
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
183
184
// muon & hadron multiple scattering
185
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
186
mumsc->
SetEmModel
(
new
G4WentzelVIModel
());
187
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
188
189
G4hMultipleScattering
* pimsc =
new
G4hMultipleScattering
();
190
pimsc->
SetEmModel
(
new
G4WentzelVIModel
());
191
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
192
193
G4hMultipleScattering
* kmsc =
new
G4hMultipleScattering
();
194
kmsc->
SetEmModel
(
new
G4WentzelVIModel
());
195
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
196
197
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
(
"ionmsc"
);
198
199
// high energy limit for e+- scattering models
200
G4double
highEnergyLimit =
G4EmParameters::Instance
()->
MscEnergyLimit
();
201
202
// Add standard EM Processes
203
G4ParticleTable
* table =
G4ParticleTable::GetParticleTable
();
204
for
(
const
auto
& particleName :
partList
.
PartNames
()) {
205
G4ParticleDefinition
*
particle
= table->
FindParticle
(particleName);
206
if
(!particle) {
continue
; }
207
if
(particleName ==
"gamma"
) {
208
209
G4PhotoElectricEffect
* pee =
new
G4PhotoElectricEffect
();
210
pee->
SetEmModel
(
new
G4LivermorePhotoElectricModel
());
211
ph->
RegisterProcess
(pee, particle);
212
213
ph->
RegisterProcess
(
new
G4ComptonScattering
(), particle);
214
ph->
RegisterProcess
(
new
G4GammaConversion
(), particle);
215
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
216
217
}
else
if
(particleName ==
"e-"
) {
218
219
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
220
G4GoudsmitSaundersonMscModel
* msc1 =
new
G4GoudsmitSaundersonMscModel
();
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
G4GoudsmitSaundersonMscModel
* msc1 =
new
G4GoudsmitSaundersonMscModel
();
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
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
351
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
352
353
G4EmModelActivator
mact(
GetPhysicsName
());
354
}
355
356
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
electromagnetic
src
G4EmStandardPhysicsGS.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:27
using
1.8.2 with
ECCE GitHub integration