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
G4hImpactIonisation.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4hImpactIonisation.hh
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
// G4hImpactIonisation
29
//
30
//
31
// Author: Maria Grazia Pia (MariaGrazia.Pia@ge.infn.it)
32
//
33
// 08 Sep 2008 - MGP - Created (initially based on G4hLowEnergyIonisation)
34
// Added PIXE capabilities
35
// Partial clean-up of the implementation (more needed)
36
// Calculation of MicroscopicCrossSection delegated to specialised class
37
//
38
// ------------------------------------------------------------
39
40
// Class Description:
41
// Impact Ionisation process of charged hadrons and ions
42
// Initially based on G4hLowEnergyIonisation, to be subject to redesign
43
// and further evolution of physics capabilities
44
//
45
// The physics model of G4hLowEnergyIonisation is described in
46
// CERN-OPEN-99-121 and CERN-OPEN-99-300.
47
//
48
// Documentation available in:
49
// M.G. Pia et al., PIXE Simulation With Geant4,
50
// IEEE Trans. Nucl. Sci., vol. 56, no. 6, pp. 3614-3649, Dec. 2009.
51
52
// ------------------------------------------------------------
53
54
#ifndef G4HIMPACTIONISATION
55
#define G4HIMPACTIONISATION 1
56
57
#include <map>
58
#include <
CLHEP/Units/PhysicalConstants.h
>
59
60
#include "
globals.hh
"
61
#include "
G4hRDEnergyLoss.hh
"
62
#include "
G4DataVector.hh
"
63
#include "
G4AtomicDeexcitation.hh
"
64
#include "
G4PixeCrossSectionHandler.hh
"
65
66
class
G4VLowEnergyModel
;
67
class
G4VParticleChange
;
68
class
G4ParticleDefinition
;
69
class
G4PhysicsTable
;
70
class
G4MaterialCutsCouple
;
71
class
G4Track
;
72
class
G4Step
;
73
74
class
G4hImpactIonisation
:
public
G4hRDEnergyLoss
75
{
76
public
:
// With description
77
78
G4hImpactIonisation
(
const
G4String
& processName =
"hImpactIoni"
);
79
// The ionisation process for hadrons/ions to be include in the
80
// UserPhysicsList
81
82
~G4hImpactIonisation
();
83
// Destructor
84
85
G4bool
IsApplicable
(
const
G4ParticleDefinition
&);
86
// True for all charged hadrons/ions
87
88
void
BuildPhysicsTable
(
const
G4ParticleDefinition
& aParticleType) ;
89
// Build physics table during initialisation
90
91
G4double
GetMeanFreePath
(
const
G4Track
&
track
,
92
G4double
previousStepSize,
93
enum
G4ForceCondition
*
condition
);
94
// Return MeanFreePath until delta-electron production
95
96
void
PrintInfoDefinition
()
const
;
97
// Print out of the class parameters
98
99
void
SetHighEnergyForProtonParametrisation
(
G4double
energy
) {
protonHighEnergy
=
energy
;} ;
100
// Definition of the boundary proton energy. For higher energies
101
// Bethe-Bloch formula is used, for lower energies a parametrisation
102
// of the energy losses is performed. Default is 2 MeV.
103
104
void
SetLowEnergyForProtonParametrisation
(
G4double
energy
) {
protonLowEnergy
=
energy
;} ;
105
// Set of the boundary proton energy. For lower energies
106
// the Free Electron Gas model is used for the energy losses.
107
// Default is 1 keV.
108
109
void
SetHighEnergyForAntiProtonParametrisation
(
G4double
energy
) {
antiprotonHighEnergy
=
energy
;} ;
110
// Set of the boundary antiproton energy. For higher energies
111
// Bethe-Bloch formula is used, for lower energies parametrisation
112
// of the energy losses is performed. Default is 2 MeV.
113
114
void
SetLowEnergyForAntiProtonParametrisation
(
G4double
energy
) {
antiprotonLowEnergy
=
energy
;} ;
115
// Set of the boundary antiproton energy. For lower energies
116
// the Free Electron Gas model is used for the energy losses.
117
// Default is 1 keV.
118
119
G4double
GetContinuousStepLimit
(
const
G4Track
& track,
120
G4double
previousStepSize,
121
G4double
currentMinimumStep,
122
G4double
& currentSafety);
123
// Calculation of the step limit due to ionisation losses
124
125
void
SetElectronicStoppingPowerModel
(
const
G4ParticleDefinition
* aParticle,
126
const
G4String
& dedxTable);
127
// This method defines the electron ionisation parametrisation method
128
// via the name of the table. Default is "ICRU_49p".
129
130
void
SetNuclearStoppingPowerModel
(
const
G4String
& dedxTable)
131
{
theNuclearTable
= dedxTable;
SetNuclearStoppingOn
();};
132
// This method defines the nuclear ionisation parametrisation method
133
// via the name of the table. Default is "ICRU_49".
134
135
// ---- MGP ---- The following design of On/Off is nonsense; to be modified
136
// in a following design iteration
137
138
void
SetNuclearStoppingOn
() {
nStopping
=
true
;};
139
// This method switch on calculation of the nuclear stopping power.
140
141
void
SetNuclearStoppingOff
() {
nStopping
=
false
;};
142
// This method switch off calculation of the nuclear stopping power.
143
144
void
SetBarkasOn
() {
theBarkas
=
true
;};
145
// This method switch on calculation of the Barkas and Bloch effects.
146
147
void
SetBarkasOff
() {
theBarkas
=
false
;};
148
// This method switch off calculation of the Barkas and Bloch effects.
149
150
void
SetPixe
(
const
G4bool
/* val */
) {
pixeIsActive
=
true
;};
151
// This method switches atomic relaxation on/off; currently always on
152
153
G4VParticleChange
*
AlongStepDoIt
(
const
G4Track
& trackData ,
154
const
G4Step
& stepData ) ;
155
// Function to determine total energy deposition on the step
156
157
G4VParticleChange
*
PostStepDoIt
(
const
G4Track
& track,
158
const
G4Step
& Step ) ;
159
// Simulation of delta-ray production.
160
161
G4double
ComputeDEDX
(
const
G4ParticleDefinition
* aParticle,
162
const
G4MaterialCutsCouple
* couple,
163
G4double
kineticEnergy);
164
// This method returns electronic dE/dx for protons or antiproton
165
166
void
SetCutForSecondaryPhotons
(
G4double
cut);
167
// Set threshold energy for fluorescence
168
169
void
SetCutForAugerElectrons
(
G4double
cut);
170
// Set threshold energy for Auger electron production
171
172
void
ActivateAugerElectronProduction
(
G4bool
val);
173
// Set Auger electron production flag on/off
174
175
// Accessors to configure PIXE
176
void
SetPixeCrossSectionK
(
const
G4String
&
name
) {
modelK
=
name
; }
177
void
SetPixeCrossSectionL
(
const
G4String
&
name
) {
modelL
=
name
; }
178
void
SetPixeCrossSectionM
(
const
G4String
&
name
) {
modelM
=
name
; }
179
void
SetPixeProjectileMinEnergy
(
G4double
energy
) {
eMinPixe
=
energy
; }
180
void
SetPixeProjectileMaxEnergy
(
G4double
energy
) {
eMaxPixe
=
energy
; }
181
182
protected
:
183
184
private
:
185
186
void
InitializeMe
();
187
void
InitializeParametrisation
();
188
void
BuildLossTable
(
const
G4ParticleDefinition
& aParticleType);
189
// void BuildDataForFluorescence(const G4ParticleDefinition& aParticleType);
190
void
BuildLambdaTable
(
const
G4ParticleDefinition
& aParticleType);
191
void
SetProtonElectronicStoppingPowerModel
(
const
G4String
& dedxTable)
192
{
protonTable
= dedxTable ;};
193
// This method defines the ionisation parametrisation method via its name
194
195
void
SetAntiProtonElectronicStoppingPowerModel
(
const
G4String
& dedxTable)
196
{
antiprotonTable
= dedxTable;};
197
198
G4double
MicroscopicCrossSection
(
const
G4ParticleDefinition
& aParticleType,
199
G4double
kineticEnergy,
200
G4double
atomicNumber,
201
G4double
deltaCutInEnergy)
const
;
202
203
G4double
GetConstraints
(
const
G4DynamicParticle
*
particle
,
204
const
G4MaterialCutsCouple
* couple);
205
// Function to determine StepLimit
206
207
G4double
ProtonParametrisedDEDX
(
const
G4MaterialCutsCouple
* couple,
208
G4double
kineticEnergy)
const
;
209
210
G4double
AntiProtonParametrisedDEDX
(
const
G4MaterialCutsCouple
* couple,
211
G4double
kineticEnergy)
const
;
212
213
G4double
DeltaRaysEnergy
(
const
G4MaterialCutsCouple
* couple,
214
G4double
kineticEnergy,
215
G4double
particleMass)
const
;
216
// This method returns average energy loss due to delta-rays emission with
217
// energy higher than the cut energy for given material.
218
219
G4double
BarkasTerm
(
const
G4Material
*
material
,
220
G4double
kineticEnergy)
const
;
221
// Function to compute the Barkas term for protons
222
223
G4double
BlochTerm
(
const
G4Material
*
material
,
224
G4double
kineticEnergy,
225
G4double
cSquare)
const
;
226
// Function to compute the Bloch term for protons
227
228
G4double
ElectronicLossFluctuation
(
const
G4DynamicParticle
*
particle
,
229
const
G4MaterialCutsCouple
*
material
,
230
G4double
meanLoss,
231
G4double
step
)
const
;
232
// Function to sample electronic losses
233
234
// hide assignment operator
235
G4hImpactIonisation
&
operator=
(
const
G4hImpactIonisation
&
right
);
236
G4hImpactIonisation
(
const
G4hImpactIonisation
&);
237
238
private
:
239
// private data members ...............................
240
G4VLowEnergyModel
*
betheBlochModel
;
241
G4VLowEnergyModel
*
protonModel
;
242
G4VLowEnergyModel
*
antiprotonModel
;
243
G4VLowEnergyModel
*
theIonEffChargeModel
;
244
G4VLowEnergyModel
*
theNuclearStoppingModel
;
245
G4VLowEnergyModel
*
theIonChuFluctuationModel
;
246
G4VLowEnergyModel
*
theIonYangFluctuationModel
;
247
248
// std::map<G4int,G4double,std::less<G4int> > totalCrossSectionMap;
249
250
// name of parametrisation table of electron stopping power
251
G4String
protonTable
;
252
G4String
antiprotonTable
;
253
G4String
theNuclearTable
;
254
255
// interval of parametrisation of electron stopping power
256
G4double
protonLowEnergy
;
257
G4double
protonHighEnergy
;
258
G4double
antiprotonLowEnergy
;
259
G4double
antiprotonHighEnergy
;
260
261
// flag of parametrisation of nucleus stopping power
262
G4bool
nStopping
;
263
G4bool
theBarkas
;
264
265
G4DataVector
cutForDelta
;
266
G4DataVector
cutForGamma
;
267
G4double
minGammaEnergy
;
268
G4double
minElectronEnergy
;
269
G4PhysicsTable
*
theMeanFreePathTable
;
270
271
const
G4double
paramStepLimit
;
// parameter limits the step at low energy
272
273
G4double
fdEdx
;
// computed in GetContraints
274
G4double
fRangeNow
;
//
275
G4double
charge
;
//
276
G4double
chargeSquare
;
//
277
G4double
initialMass
;
// mass to calculate Lambda tables
278
G4double
fBarkas
;
279
280
G4PixeCrossSectionHandler
*
pixeCrossSectionHandler
;
281
G4AtomicDeexcitation
atomicDeexcitation
;
282
G4String
modelK
;
283
G4String
modelL
;
284
G4String
modelM
;
285
G4double
eMinPixe
;
286
G4double
eMaxPixe
;
287
288
G4bool
pixeIsActive
;
289
290
};
291
292
293
inline
G4double
G4hImpactIonisation::GetContinuousStepLimit
(
const
G4Track
&
track
,
294
G4double
,
295
G4double
currentMinimumStep,
296
G4double
&)
297
{
298
G4double
step
=
GetConstraints
(track.
GetDynamicParticle
(),track.
GetMaterialCutsCouple
()) ;
299
300
// ---- MGP ---- The following line, taken as is from G4hLowEnergyIonisation,
301
// is meaningless: currentMinimumStep is passed by value,
302
// therefore any local modification to it has no effect
303
304
if
((step > 0.) && (step < currentMinimumStep)) currentMinimumStep =
step
;
305
306
return
step
;
307
}
308
309
310
inline
G4bool
G4hImpactIonisation::IsApplicable
(
const
G4ParticleDefinition
&
particle
)
311
{
312
// ---- MGP ---- Better criterion for applicability to be defined;
313
// now hard-coded particle mass > 0.1 * proton_mass
314
315
return
(particle.
GetPDGCharge
() != 0.0 && particle.
GetPDGMass
() >
CLHEP::proton_mass_c2
*0.1);
316
}
317
318
#endif
319
320
321
322
323
324
325
326
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
pii
include
G4hImpactIonisation.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:33
using
1.8.2 with
ECCE GitHub integration