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
PhysListEmStandardNR.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PhysListEmStandardNR.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
//
28
//
29
//
30
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
31
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32
33
#include "
PhysListEmStandardNR.hh
"
34
35
#include "
G4SystemOfUnits.hh
"
36
#include "
G4ParticleDefinition.hh
"
37
#include "
G4LossTableManager.hh
"
38
#include "
G4EmProcessOptions.hh
"
39
40
#include "
G4ComptonScattering.hh
"
41
#include "
G4GammaConversion.hh
"
42
#include "
G4PhotoElectricEffect.hh
"
43
#include "
G4RayleighScattering.hh
"
44
#include "
G4PEEffectFluoModel.hh
"
45
#include "
G4KleinNishinaModel.hh
"
46
#include "
G4LowEPComptonModel.hh
"
47
#include "
G4PenelopeGammaConversionModel.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 "
G4UrbanMscModel.hh
"
56
57
#include "
G4eIonisation.hh
"
58
#include "
G4eBremsstrahlung.hh
"
59
#include "
G4Generator2BS.hh
"
60
#include "
G4SeltzerBergerModel.hh
"
61
#include "
G4PenelopeIonisationModel.hh
"
62
#include "
G4UniversalFluctuation.hh
"
63
64
#include "
G4eplusAnnihilation.hh
"
65
#include "
G4UAtomicDeexcitation.hh
"
66
67
#include "
G4MuIonisation.hh
"
68
#include "
G4MuBremsstrahlung.hh
"
69
#include "
G4MuPairProduction.hh
"
70
71
#include "
G4hIonisation.hh
"
72
#include "
G4ionIonisation.hh
"
73
#include "
G4IonParametrisedLossModel.hh
"
74
75
#include "
G4ScreenedNuclearRecoil.hh
"
76
77
#include "
G4PhysicsListHelper.hh
"
78
#include "
G4BuilderType.hh
"
79
80
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
81
82
PhysListEmStandardNR::PhysListEmStandardNR
(
const
G4String
&
name
)
83
:
G4VPhysicsConstructor
(name)
84
{
85
G4LossTableManager::Instance
();
86
SetPhysicsType
(
bElectromagnetic
);
87
}
88
89
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
90
91
PhysListEmStandardNR::~PhysListEmStandardNR
()
92
{}
93
94
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
95
96
void
PhysListEmStandardNR::ConstructProcess
()
97
{
98
G4PhysicsListHelper
* ph =
G4PhysicsListHelper::GetPhysicsListHelper
();
99
100
// muon & hadron bremsstrahlung and pair production
101
G4MuBremsstrahlung
* mub =
new
G4MuBremsstrahlung
();
102
G4MuPairProduction
*
mup
=
new
G4MuPairProduction
();
103
104
G4ScreenedNuclearRecoil
* nucr =
new
G4ScreenedNuclearRecoil
();
105
G4double
energyLimit = 100.*
MeV
;
106
nucr->
SetMaxEnergyForScattering
(energyLimit);
107
G4eCoulombScatteringModel
* csm =
new
G4eCoulombScatteringModel
();
108
csm->
SetActivationLowEnergyLimit
(energyLimit);
109
110
auto
particleIterator
=
GetParticleIterator
();
111
particleIterator
->reset();
112
while
( (*
particleIterator
)() ){
113
G4ParticleDefinition
*
particle
=
particleIterator
->value();
114
G4String
particleName = particle->
GetParticleName
();
115
116
if
(particleName ==
"gamma"
) {
117
118
// Compton scattering
119
G4ComptonScattering
* cs =
new
G4ComptonScattering
;
120
cs->
SetEmModel
(
new
G4KleinNishinaModel
(),1);
121
ph->
RegisterProcess
(cs, particle);
122
123
// Photoelectric
124
G4PhotoElectricEffect
* pe =
new
G4PhotoElectricEffect
();
125
G4VEmModel
* theLivermorePEModel =
new
G4LivermorePhotoElectricModel
();
126
theLivermorePEModel->
SetHighEnergyLimit
(10*
GeV
);
127
pe->
SetEmModel
(theLivermorePEModel,1);
128
ph->
RegisterProcess
(pe, particle);
129
130
// Gamma conversion
131
G4GammaConversion
* gc =
new
G4GammaConversion
();
132
G4VEmModel
* thePenelopeGCModel =
new
G4PenelopeGammaConversionModel
();
133
thePenelopeGCModel->
SetHighEnergyLimit
(1*
GeV
);
134
gc->
SetEmModel
(thePenelopeGCModel,1);
135
ph->
RegisterProcess
(gc, particle);
136
137
// Rayleigh scattering
138
ph->
RegisterProcess
(
new
G4RayleighScattering
(), particle);
139
140
}
else
if
(particleName ==
"e-"
) {
141
142
// ionisation
143
G4eIonisation
* eIoni =
new
G4eIonisation
();
144
eIoni->
SetStepFunction
(0.2, 100*
um
);
145
146
// bremsstrahlung
147
G4eBremsstrahlung
* eBrem =
new
G4eBremsstrahlung
();
148
149
ph->
RegisterProcess
(
new
G4eMultipleScattering
(), particle);
150
ph->
RegisterProcess
(eIoni, particle);
151
ph->
RegisterProcess
(eBrem, particle);
152
153
}
else
if
(particleName ==
"e+"
) {
154
// ionisation
155
G4eIonisation
* eIoni =
new
G4eIonisation
();
156
eIoni->
SetStepFunction
(0.2, 100*
um
);
157
158
// bremsstrahlung
159
G4eBremsstrahlung
* eBrem =
new
G4eBremsstrahlung
();
160
161
ph->
RegisterProcess
(
new
G4eMultipleScattering
(), particle);
162
ph->
RegisterProcess
(eIoni, particle);
163
ph->
RegisterProcess
(eBrem, particle);
164
165
// annihilation at rest and in flight
166
ph->
RegisterProcess
(
new
G4eplusAnnihilation
(), particle);
167
168
}
else
if
(particleName ==
"mu+"
||
169
particleName ==
"mu-"
) {
170
171
G4MuIonisation
* muIoni =
new
G4MuIonisation
();
172
muIoni->
SetStepFunction
(0.2, 50*
um
);
173
174
ph->
RegisterProcess
(muIoni, particle);
175
ph->
RegisterProcess
(mub, particle);
176
ph->
RegisterProcess
(mup, particle);
177
ph->
RegisterProcess
(
new
G4CoulombScattering
(), particle);
178
179
}
else
if
(particleName ==
"alpha"
|| particleName ==
"He3"
) {
180
181
G4hMultipleScattering
* msc =
new
G4hMultipleScattering
();
182
G4UrbanMscModel
*
model
=
new
G4UrbanMscModel
();
183
model->
SetActivationLowEnergyLimit
(energyLimit);
184
msc->
SetEmModel
(model, 1);
185
ph->
RegisterProcess
(msc, particle);
186
187
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
188
ionIoni->
SetStepFunction
(0.1, 10*
um
);
189
ph->
RegisterProcess
(ionIoni, particle);
190
191
ph->
RegisterProcess
(nucr, particle);
192
193
}
else
if
(particleName ==
"GenericIon"
) {
194
195
G4hMultipleScattering
* msc =
new
G4hMultipleScattering
();
196
G4UrbanMscModel
*
model
=
new
G4UrbanMscModel
();
197
model->
SetActivationLowEnergyLimit
(energyLimit);
198
msc->
SetEmModel
(model, 1);
199
ph->
RegisterProcess
(msc, particle);
200
201
G4ionIonisation
* ionIoni =
new
G4ionIonisation
();
202
ionIoni->
SetEmModel
(
new
G4IonParametrisedLossModel
());
203
ionIoni->
SetStepFunction
(0.1, 1*
um
);
204
ph->
RegisterProcess
(ionIoni, particle);
205
206
ph->
RegisterProcess
(nucr, particle);
207
208
}
else
if
(particleName ==
"proton"
||
209
particleName ==
"deuteron"
||
210
particleName ==
"triton"
) {
211
212
G4hMultipleScattering
* msc =
new
G4hMultipleScattering
();
213
G4UrbanMscModel
*
model
=
new
G4UrbanMscModel
();
214
model->
SetActivationLowEnergyLimit
(energyLimit);
215
msc->
SetEmModel
(model, 1);
216
ph->
RegisterProcess
(msc, particle);
217
218
G4hIonisation
* hIoni =
new
G4hIonisation
();
219
hIoni->
SetStepFunction
(0.05, 1*
um
);
220
ph->
RegisterProcess
(hIoni, particle);
221
222
ph->
RegisterProcess
(nucr, particle);
223
224
}
else
if
((!particle->
IsShortLived
()) &&
225
(particle->
GetPDGCharge
() != 0.0) &&
226
(particle->
GetParticleName
() !=
"chargedgeantino"
)) {
227
//all others charged particles except geantino
228
229
ph->
RegisterProcess
(
new
G4hMultipleScattering
(), particle);
230
ph->
RegisterProcess
(
new
G4hIonisation
(), particle);
231
}
232
}
233
234
// Em options
235
//
236
// Main options and setting parameters are shown here.
237
// Several of them have default values.
238
//
239
G4EmProcessOptions
emOptions;
240
241
//physics tables
242
//
243
emOptions.
SetMinEnergy
(10*
eV
);
244
emOptions.
SetMaxEnergy
(10*
TeV
);
245
emOptions.
SetDEDXBinning
(12*20);
246
emOptions.
SetLambdaBinning
(12*20);
247
248
// scattering
249
emOptions.
SetPolarAngleLimit
(0.0);
250
251
// Deexcitation
252
G4VAtomDeexcitation
* de =
new
G4UAtomicDeexcitation
();
253
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(de);
254
de->
SetFluo
(
true
);
255
}
256
257
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
258
geant4
tree
geant4-10.6-release
examples
extended
electromagnetic
TestEm7
src
PhysListEmStandardNR.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration