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
PhysListEmPenelope.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PhysListEmPenelope.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
//
31
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33
34
#include "PhysListEmPenelope.hh"
35
#include "
G4BuilderType.hh
"
36
#include "
G4ParticleDefinition.hh
"
37
#include "
G4ProcessManager.hh
"
38
#include "
G4PhysicsListHelper.hh
"
39
40
// gamma
41
42
#include "
G4PhotoElectricEffect.hh
"
43
#include "
G4PenelopePhotoElectricModel.hh
"
44
45
#include "
G4ComptonScattering.hh
"
46
#include "
G4PenelopeComptonModel.hh
"
47
48
#include "
G4GammaConversion.hh
"
49
#include "
G4PenelopeGammaConversionModel.hh
"
50
51
#include "
G4RayleighScattering.hh
"
52
#include "
G4PenelopeRayleighModel.hh
"
53
54
// e-
55
56
#include "
G4eIonisation.hh
"
57
#include "
G4PenelopeIonisationModel.hh
"
58
#include "
G4UniversalFluctuation.hh
"
59
60
#include "
G4eBremsstrahlung.hh
"
61
#include "
G4PenelopeBremsstrahlungModel.hh
"
62
63
// e+
64
65
#include "
G4eplusAnnihilation.hh
"
66
#include "
G4PenelopeAnnihilationModel.hh
"
67
68
// mu
69
70
#include "
G4MuIonisation.hh
"
71
#include "
G4MuBremsstrahlung.hh
"
72
#include "
G4MuPairProduction.hh
"
73
74
// hadrons, ions
75
76
#include "
G4hIonisation.hh
"
77
#include "
G4ionIonisation.hh
"
78
79
// deexcitation
80
81
#include "
G4LossTableManager.hh
"
82
#include "
G4UAtomicDeexcitation.hh
"
83
84
#include "
G4SystemOfUnits.hh
"
85
86
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
87
88
PhysListEmPenelope::PhysListEmPenelope
(
const
G4String
&
name
)
89
:
G4VPhysicsConstructor
(name)
90
{
91
G4EmParameters
* param =
G4EmParameters::Instance
();
92
param->
SetDefaults
();
93
param->
SetMinEnergy
(10*
eV
);
94
param->
SetMaxEnergy
(10*
TeV
);
95
param->
SetNumberOfBinsPerDecade
(10);
96
param->
SetBuildCSDARange
(
true
);
97
param->
SetMaxEnergyForCSDARange
(10*
TeV
);
98
SetPhysicsType
(
bElectromagnetic
);
99
100
param->
SetVerbose
(0);
101
param->
Dump
();
102
}
103
104
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
105
106
PhysListEmPenelope::~PhysListEmPenelope
()
107
{ }
108
109
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
110
111
void
PhysListEmPenelope::ConstructProcess
()
112
{
113
G4PhysicsListHelper
* list =
G4PhysicsListHelper::GetPhysicsListHelper
();
114
115
// Add standard EM Processes
116
117
auto
particleIterator
=
GetParticleIterator
();
118
particleIterator
->reset();
119
while
( (*
particleIterator
)() ){
120
G4ParticleDefinition
*
particle
=
particleIterator
->value();
121
G4String
particleName = particle->
GetParticleName
();
122
123
//Applicability range for Penelope models
124
//for higher energies, the Standard models are used
125
G4double
highEnergyLimit = 1*
GeV
;
126
127
if
(particleName ==
"gamma"
) {
128
// gamma
129
130
G4PhotoElectricEffect
* phot =
new
G4PhotoElectricEffect
();
131
G4PenelopePhotoElectricModel
*
132
photModel =
new
G4PenelopePhotoElectricModel
();
133
photModel->
SetHighEnergyLimit
(highEnergyLimit);
134
phot->
AddEmModel
(0, photModel);
135
list->
RegisterProcess
(phot, particle);
136
137
G4ComptonScattering
* compt =
new
G4ComptonScattering
();
138
G4PenelopeComptonModel
*
139
comptModel =
new
G4PenelopeComptonModel
();
140
comptModel->
SetHighEnergyLimit
(highEnergyLimit);
141
compt->
AddEmModel
(0, comptModel);
142
list->
RegisterProcess
(compt, particle);
143
144
G4GammaConversion
* conv =
new
G4GammaConversion
();
145
G4PenelopeGammaConversionModel
*
146
convModel =
new
G4PenelopeGammaConversionModel
();
147
convModel->
SetHighEnergyLimit
(highEnergyLimit);
148
conv->
AddEmModel
(0, convModel);
149
list->
RegisterProcess
(conv, particle);
150
151
G4RayleighScattering
* rayl =
new
G4RayleighScattering
();
152
G4PenelopeRayleighModel
*
153
raylModel =
new
G4PenelopeRayleighModel
();
154
raylModel->
SetHighEnergyLimit
(highEnergyLimit);
155
rayl->
AddEmModel
(0, raylModel);
156
list->
RegisterProcess
(rayl, particle);
157
158
}
else
if
(particleName ==
"e-"
) {
159
//electron
160
161
G4eIonisation
* eIoni =
new
G4eIonisation
();
162
G4PenelopeIonisationModel
*
163
eIoniModel =
new
G4PenelopeIonisationModel
();
164
eIoniModel->
SetHighEnergyLimit
(highEnergyLimit);
165
eIoni->
AddEmModel
(0, eIoniModel,
new
G4UniversalFluctuation
() );
166
list->
RegisterProcess
(eIoni, particle);
167
168
G4eBremsstrahlung
* eBrem =
new
G4eBremsstrahlung
();
169
G4PenelopeBremsstrahlungModel
*
170
eBremModel =
new
G4PenelopeBremsstrahlungModel
();
171
eBremModel->
SetHighEnergyLimit
(highEnergyLimit);
172
eBrem->
AddEmModel
(0, eBremModel);
173
list->
RegisterProcess
(eBrem, particle);
174
175
}
else
if
(particleName ==
"e+"
) {
176
//positron
177
G4eIonisation
* eIoni =
new
G4eIonisation
();
178
G4PenelopeIonisationModel
*
179
eIoniModel =
new
G4PenelopeIonisationModel
();
180
eIoniModel->
SetHighEnergyLimit
(highEnergyLimit);
181
eIoni->
AddEmModel
(0, eIoniModel,
new
G4UniversalFluctuation
() );
182
list->
RegisterProcess
(eIoni, particle);
183
184
G4eBremsstrahlung
* eBrem =
new
G4eBremsstrahlung
();
185
G4PenelopeBremsstrahlungModel
*
186
eBremModel =
new
G4PenelopeBremsstrahlungModel
();
187
eBremModel->
SetHighEnergyLimit
(highEnergyLimit);
188
eBrem->
AddEmModel
(0, eBremModel);
189
list->
RegisterProcess
(eBrem, particle);
190
191
G4eplusAnnihilation
* eAnni =
new
G4eplusAnnihilation
();
192
G4PenelopeAnnihilationModel
*
193
eAnniModel =
new
G4PenelopeAnnihilationModel
();
194
eAnniModel->
SetHighEnergyLimit
(highEnergyLimit);
195
eAnni->
AddEmModel
(0, eAnniModel);
196
list->
RegisterProcess
(eAnni, particle);
197
198
}
else
if
( particleName ==
"mu+"
||
199
particleName ==
"mu-"
) {
200
//muon
201
list->
RegisterProcess
(
new
G4MuIonisation
, particle);
202
list->
RegisterProcess
(
new
G4MuBremsstrahlung
, particle);
203
list->
RegisterProcess
(
new
G4MuPairProduction
, particle);
204
205
}
else
if
( particleName ==
"alpha"
|| particleName ==
"GenericIon"
) {
206
list->
RegisterProcess
(
new
G4ionIonisation
, particle);
207
208
}
else
if
((!particle->
IsShortLived
()) &&
209
(particle->
GetPDGCharge
() != 0.0) &&
210
(particle->
GetParticleName
() !=
"chargedgeantino"
)) {
211
//all others charged particles except geantino
212
list->
RegisterProcess
(
new
G4hIonisation
, particle);
213
}
214
}
215
// Deexcitation
216
//
217
G4VAtomDeexcitation
* deex =
new
G4UAtomicDeexcitation
();
218
G4LossTableManager::Instance
()->
SetAtomDeexcitation
(deex);
219
}
220
221
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
222
geant4
tree
geant4-10.6-release
examples
extended
electromagnetic
TestEm18
src
PhysListEmPenelope.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration