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