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
G4EmStandardPhysicsWVI.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4EmStandardPhysicsWVI.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: G4EmStandardPhysicsWVI
30
//
31
// Author: V.Ivanchenko 09.11.2005
32
//
33
// Modified:
34
// 05.12.2005 V.Ivanchenko add controlled verbosity
35
// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
36
// 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
37
// 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons
38
// 13.02.2007 V.Ivanchenko set skin=0.0
39
// 21.04.2008 V.Ivanchenko add long-lived D and B mesons
40
//
41
//----------------------------------------------------------------------------
42
//
43
44
#include "
G4EmStandardPhysicsWVI.hh
"
45
#include "
G4SystemOfUnits.hh
"
46
#include "
G4ParticleDefinition.hh
"
47
#include "
G4EmParameters.hh
"
48
#include "
G4LossTableManager.hh
"
49
50
#include "
G4ComptonScattering.hh
"
51
#include "
G4GammaConversion.hh
"
52
#include "
G4PhotoElectricEffect.hh
"
53
#include "
G4RayleighScattering.hh
"
54
55
#include "
G4KleinNishinaModel.hh
"
56
#include "
G4LivermorePhotoElectricModel.hh
"
57
#include "
G4eMultipleScattering.hh
"
58
#include "
G4MuMultipleScattering.hh
"
59
#include "
G4hMultipleScattering.hh
"
60
#include "
G4CoulombScattering.hh
"
61
#include "
G4WentzelVIModel.hh
"
62
#include "
G4WentzelVIRelModel.hh
"
63
#include "
G4hCoulombScatteringModel.hh
"
64
65
#include "
G4MuBremsstrahlungModel.hh
"
66
#include "
G4MuPairProductionModel.hh
"
67
#include "
G4hBremsstrahlungModel.hh
"
68
#include "
G4hPairProductionModel.hh
"
69
70
#include "
G4eIonisation.hh
"
71
#include "
G4eBremsstrahlung.hh
"
72
#include "
G4eplusAnnihilation.hh
"
73
#include "
G4UAtomicDeexcitation.hh
"
74
75
#include "
G4MuIonisation.hh
"
76
#include "
G4MuBremsstrahlung.hh
"
77
#include "
G4MuPairProduction.hh
"
78
#include "
G4hBremsstrahlung.hh
"
79
#include "
G4hPairProduction.hh
"
80
81
#include "
G4hIonisation.hh
"
82
#include "
G4ionIonisation.hh
"
83
#include "
G4alphaIonisation.hh
"
84
#include "
G4AtimaEnergyLossModel.hh
"
85
#include "
G4AtimaFluctuations.hh
"
86
#include "
G4IonParametrisedLossModel.hh
"
87
#include "
G4BraggIonModel.hh
"
88
#include "
G4NuclearStopping.hh
"
89
#include "
G4eplusTo2GammaOKVIModel.hh
"
90
91
#include "
G4ParticleTable.hh
"
92
#include "
G4Gamma.hh
"
93
#include "
G4Electron.hh
"
94
#include "
G4Positron.hh
"
95
#include "
G4MuonPlus.hh
"
96
#include "
G4MuonMinus.hh
"
97
#include "
G4PionPlus.hh
"
98
#include "
G4PionMinus.hh
"
99
#include "
G4KaonPlus.hh
"
100
#include "
G4KaonMinus.hh
"
101
#include "
G4Proton.hh
"
102
#include "
G4AntiProton.hh
"
103
#include "
G4Deuteron.hh
"
104
#include "
G4Triton.hh
"
105
#include "
G4He3.hh
"
106
#include "
G4Alpha.hh
"
107
#include "
G4GenericIon.hh
"
108
109
110
#include "
G4PhysicsListHelper.hh
"
111
#include "
G4BuilderType.hh
"
112
#include "
G4EmModelActivator.hh
"
113
114
// factory
115
#include "
G4PhysicsConstructorFactory.hh
"
116
//
117
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4EmStandardPhysicsWVI
);
118
119
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120
121
G4EmStandardPhysicsWVI::G4EmStandardPhysicsWVI
(
G4int
ver)
122
:
G4VPhysicsConstructor
(
"G4EmStandardWVI"
), verbose(ver)
123
{
124
G4EmParameters
* param =
G4EmParameters::Instance
();
125
param->
SetDefaults
();
126
param->
SetVerbose
(
verbose
);
127
param->
SetMinEnergy
(10*
eV
);
128
param->
SetLowestElectronEnergy
(10*
eV
);
129
param->
SetNumberOfBinsPerDecade
(20);
130
param->
ActivateAngularGeneratorForIonisation
(
true
);
131
param->
SetStepFunction
(0.2, 100*
um
);
132
param->
SetStepFunctionMuHad
(0.2, 50*
um
);
133
param->
SetUseMottCorrection
(
true
);
134
param->
SetMuHadLateralDisplacement
(
true
);
135
param->
SetMscThetaLimit
(0.15);
136
param->
SetFluo
(
true
);
137
SetPhysicsType
(
bElectromagnetic
);
138
}
139
140
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
141
142
G4EmStandardPhysicsWVI::~G4EmStandardPhysicsWVI
()
143
{}
144
145
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
146
147
void
G4EmStandardPhysicsWVI::ConstructParticle
()
148
{
149
// gamma
150
G4Gamma::Gamma
();
151
152
// leptons
153
G4Electron::Electron
();
154
G4Positron::Positron
();
155
G4MuonPlus::MuonPlus
();
156
G4MuonMinus::MuonMinus
();
157
158
// mesons
159
G4PionPlus::PionPlusDefinition
();
160
G4PionMinus::PionMinusDefinition
();
161
G4KaonPlus::KaonPlusDefinition
();
162
G4KaonMinus::KaonMinusDefinition
();
163
164
// barions
165
G4Proton::Proton
();
166
G4AntiProton::AntiProton
();
167
168
// ions
169
G4Deuteron::Deuteron
();
170
G4Triton::Triton
();
171
G4He3::He3
();
172
G4Alpha::Alpha
();
173
G4GenericIon::GenericIonDefinition
();
174
}
175
176
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
177
178
void
G4EmStandardPhysicsWVI::ConstructProcess
()
179
{
180
if
(
verbose
> 1) {
181
G4cout
<<
"### "
<<
GetPhysicsName
() <<
" Construct Processes "
<<
G4endl
;
182
}
183
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
184
185
// muon & hadron bremsstrahlung and pair production
186
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
187
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
188
G4hBremsstrahlung
* pib =
new
G4hBremsstrahlung
();
189
G4hPairProduction
*
pip
=
new
G4hPairProduction
();
190
G4hBremsstrahlung
* kb =
new
G4hBremsstrahlung
();
191
G4hPairProduction
* kp =
new
G4hPairProduction
();
192
G4hBremsstrahlung
* pb =
new
G4hBremsstrahlung
();
193
G4hPairProduction
*
pp
=
new
G4hPairProduction
();
194
195
// muon & hadron multiple scattering
196
G4MuMultipleScattering
* mumsc =
new
G4MuMultipleScattering
();
197
mumsc->
SetEmModel
(
new
G4WentzelVIRelModel
());
198
G4CoulombScattering
* muss =
new
G4CoulombScattering
();
199
muss->
SetEmModel
(
new
G4hCoulombScatteringModel
());
200
201
G4hMultipleScattering
* pimsc =
new
G4hMultipleScattering
();
202
pimsc->
SetEmModel
(
new
G4WentzelVIRelModel
());
203
G4CoulombScattering
* piss =
new
G4CoulombScattering
();
204
piss->
SetEmModel
(
new
G4hCoulombScatteringModel
());
205
206
G4hMultipleScattering
* kmsc =
new
G4hMultipleScattering
();
207
kmsc->
SetEmModel
(
new
G4WentzelVIRelModel
());
208
G4CoulombScattering
* kss =
new
G4CoulombScattering
();
209
kss->
SetEmModel
(
new
G4hCoulombScatteringModel
());
210
211
G4hMultipleScattering
* hmsc =
new
G4hMultipleScattering
(
"ionmsc"
);
212
213
// nuclear stopping
214
G4NuclearStopping
* pnuc =
new
G4NuclearStopping
();
215
pnuc->
SetMaxKinEnergy
(
MeV
);
216
217
// Add standard EM Processes
218
G4ParticleTable
* table =
G4ParticleTable::GetParticleTable
();
219
for
(
const
auto
& particleName :
partList
.
PartNames
()) {
220
G4ParticleDefinition
*
particle
= table->
FindParticle
(particleName);
221
if
(!particle) {
continue
; }
222
if
(particleName ==
"gamma"
) {
223
224
G4PhotoElectricEffect
* pee =
new
G4PhotoElectricEffect
();
225
pee->
SetEmModel
(
new
G4LivermorePhotoElectricModel
());
226
227
G4ComptonScattering
* cs =
new
G4ComptonScattering
;
228
cs->
SetEmModel
(
new
G4KleinNishinaModel
());
229
230
ph->
RegisterProcess
(pee, particle);
231
ph->
RegisterProcess
(cs, particle);
232
ph->
RegisterProcess
(
new
G4GammaConversion
(), particle);
233
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
234
235
}
else
if
(particleName ==
"e-"
) {
236
237
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
238
msc->
SetEmModel
(
new
G4WentzelVIModel
());
239
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
240
241
ph->
RegisterProcess
(msc, particle);
242
ph->
RegisterProcess
(
new
G4eIonisation
(), particle);
243
ph->
RegisterProcess
(
new
G4eBremsstrahlung
(), particle);
244
ph->
RegisterProcess
(ss, particle);
245
246
}
else
if
(particleName ==
"e+"
) {
247
248
G4eMultipleScattering
* msc =
new
G4eMultipleScattering
;
249
msc->
SetEmModel
(
new
G4WentzelVIModel
());
250
G4CoulombScattering
* ss =
new
G4CoulombScattering
();
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
ph->
RegisterProcess
(pnuc, particle);
276
277
}
else
if
(particleName ==
"GenericIon"
) {
278
279
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
280
ionIoni->
SetEmModel
(
new
G4BraggIonModel
(),0);
281
ionIoni->
SetEmModel
(
new
G4AtimaEnergyLossModel
(),1);
282
ionIoni->
SetFluctModel
(
new
G4AtimaFluctuations
());
283
ionIoni->
SetStepFunction
(0.1, 1*
um
);
284
285
ph->
RegisterProcess
(hmsc, particle);
286
ph->
RegisterProcess
(ionIoni, particle);
287
ph->
RegisterProcess
(pnuc, particle);
288
289
}
else
if
(particleName ==
"pi+"
||
290
particleName ==
"pi-"
) {
291
292
ph->
RegisterProcess
(pimsc, particle);
293
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
294
ph->
RegisterProcess
(pib, particle);
295
ph->
RegisterProcess
(pip, particle);
296
ph->
RegisterProcess
(piss, particle);
297
298
}
else
if
(particleName ==
"kaon+"
||
299
particleName ==
"kaon-"
) {
300
301
ph->
RegisterProcess
(kmsc, particle);
302
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
303
ph->
RegisterProcess
(kb, particle);
304
ph->
RegisterProcess
(kp, particle);
305
ph->
RegisterProcess
(kss, particle);
306
307
}
else
if
(particleName ==
"proton"
||
308
particleName ==
"anti_proton"
) {
309
310
G4hMultipleScattering
* pmsc =
new
G4hMultipleScattering
();
311
pmsc->
SetEmModel
(
new
G4WentzelVIRelModel
());
312
G4CoulombScattering
* pss =
new
G4CoulombScattering
();
313
pss->
SetEmModel
(
new
G4hCoulombScatteringModel
());
314
315
ph->
RegisterProcess
(pmsc, particle);
316
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
317
ph->
RegisterProcess
(pb, particle);
318
ph->
RegisterProcess
(pp, particle);
319
ph->
RegisterProcess
(pss, particle);
320
321
}
else
if
(particleName ==
"B+"
||
322
particleName ==
"B-"
||
323
particleName ==
"D+"
||
324
particleName ==
"D-"
||
325
particleName ==
"Ds+"
||
326
particleName ==
"Ds-"
||
327
particleName ==
"anti_He3"
||
328
particleName ==
"anti_alpha"
||
329
particleName ==
"anti_deuteron"
||
330
particleName ==
"anti_lambda_c+"
||
331
particleName ==
"anti_omega-"
||
332
particleName ==
"anti_sigma_c+"
||
333
particleName ==
"anti_sigma_c++"
||
334
particleName ==
"anti_sigma+"
||
335
particleName ==
"anti_sigma-"
||
336
particleName ==
"anti_triton"
||
337
particleName ==
"anti_xi_c+"
||
338
particleName ==
"anti_xi-"
||
339
particleName ==
"deuteron"
||
340
particleName ==
"lambda_c+"
||
341
particleName ==
"omega-"
||
342
particleName ==
"sigma_c+"
||
343
particleName ==
"sigma_c++"
||
344
particleName ==
"sigma+"
||
345
particleName ==
"sigma-"
||
346
particleName ==
"tau+"
||
347
particleName ==
"tau-"
||
348
particleName ==
"triton"
||
349
particleName ==
"xi_c+"
||
350
particleName ==
"xi-"
) {
351
352
ph->
RegisterProcess
(hmsc, particle);
353
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
354
ph->
RegisterProcess
(pnuc, particle);
355
}
356
}
357
358
// Deexcitation
359
//
360
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
361
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
362
363
G4EmModelActivator
mact(
GetPhysicsName
());
364
}
365
366
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
electromagnetic
src
G4EmStandardPhysicsWVI.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:27
using
1.8.2 with
ECCE GitHub integration