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
G4ionIonisation.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4ionIonisation.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
// GEANT4 Class file
30
//
31
//
32
// File name: G4ionIonisation
33
//
34
// Author: Vladimir Ivanchenko
35
//
36
// Creation date: 07.05.2002
37
//
38
// Modifications:
39
//
40
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
41
// 26-12-02 Secondary production moved to derived classes (V.Ivanchenko)
42
// 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko)
43
// 18-04-03 Use IonFluctuations (V.Ivanchenko)
44
// 03-08-03 Add effective charge (V.Ivanchenko)
45
// 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko)
46
// 27-05-04 Set integral to be a default regime (V.Ivanchenko)
47
// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
48
// 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
49
// 10-01-06 SetStepLimits -> SetStepFunction (V.Ivantchenko)
50
// 10-05-06 Add a possibility to download user data (V.Ivantchenko)
51
// 13-05-06 Add data for light ion stopping in water (V.Ivantchenko)
52
// 14-01-07 use SetEmModel() and SetFluctModel() from G4VEnergyLossProcess (mma)
53
// 16-05-07 Add data for light ion stopping only for GenericIon (V.Ivantchenko)
54
// 07-11-07 Fill non-ionizing energy loss (V.Ivantchenko)
55
// 12-09-08 Removed InitialiseMassCharge and CorrectionsAlongStep (VI)
56
//
57
//
58
// -------------------------------------------------------------------
59
//
60
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
61
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
62
63
#include "
G4ionIonisation.hh
"
64
#include "
G4PhysicalConstants.hh
"
65
#include "
G4SystemOfUnits.hh
"
66
#include "
G4Electron.hh
"
67
#include "
G4Proton.hh
"
68
#include "
G4GenericIon.hh
"
69
#include "
G4BraggModel.hh
"
70
#include "
G4BraggIonModel.hh
"
71
#include "
G4BetheBlochModel.hh
"
72
#include "
G4UnitsTable.hh
"
73
#include "
G4LossTableManager.hh
"
74
#include "
G4WaterStopping.hh
"
75
#include "
G4EmCorrections.hh
"
76
#include "
G4IonFluctuations.hh
"
77
#include "
G4EmParameters.hh
"
78
79
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
80
81
using namespace
std;
82
83
G4ionIonisation::G4ionIonisation
(
const
G4String
&
name
)
84
:
G4VEnergyLossProcess
(name),
85
theParticle(nullptr),
86
isInitialised(
false
),
87
stopDataActive(
false
)
88
{
89
SetLinearLossLimit
(0.02);
90
SetProcessSubType
(
fIonisation
);
91
SetSecondaryParticle
(
G4Electron::Electron
());
92
corr
=
G4LossTableManager::Instance
()->
EmCorrections
();
93
eth
= 2*
MeV
;
94
}
95
96
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
97
98
G4ionIonisation::~G4ionIonisation
()
99
{}
100
101
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
102
103
G4bool
G4ionIonisation::IsApplicable
(
const
G4ParticleDefinition
&
p
)
104
{
105
return
(p.
GetPDGCharge
() != 0.0 && !p.
IsShortLived
() &&
106
p.
GetParticleType
() ==
"nucleus"
);
107
}
108
109
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
110
111
G4double
G4ionIonisation::MinPrimaryEnergy
(
const
G4ParticleDefinition
*
p
,
112
const
G4Material
*,
113
G4double
cut)
114
{
115
return
116
p->
GetPDGMass
()*(std::sqrt(1. + 0.5*cut/
CLHEP::electron_mass_c2
) - 1.0);
117
}
118
119
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
120
121
void
G4ionIonisation::InitialiseEnergyLossProcess
(
122
const
G4ParticleDefinition
*
part
,
123
const
G4ParticleDefinition
* bpart)
124
{
125
const
G4ParticleDefinition
*
ion
=
G4GenericIon::GenericIon
();
126
127
if
(!
isInitialised
) {
128
129
theParticle
=
part
;
130
131
// define base particle
132
const
G4ParticleDefinition
* theBaseParticle =
nullptr
;
133
134
if
(part == ion) { theBaseParticle =
nullptr
; }
135
else
if
(bpart ==
nullptr
) { theBaseParticle = ion; }
136
else
{ theBaseParticle = bpart; }
137
138
SetBaseParticle
(theBaseParticle);
139
140
if
(!
EmModel
(0)) {
SetEmModel
(
new
G4BraggIonModel
()); }
141
142
G4EmParameters
* param =
G4EmParameters::Instance
();
143
EmModel
(0)->
SetLowEnergyLimit
(param->
MinKinEnergy
());
144
145
// model limit defined for protons
146
eth
= (
EmModel
(0)->
HighEnergyLimit
())*part->
GetPDGMass
()/
proton_mass_c2
;
147
EmModel
(0)->
SetHighEnergyLimit
(
eth
);
148
149
if
(!
FluctModel
()) {
SetFluctModel
(
new
G4IonFluctuations
()); }
150
AddEmModel
(1,
EmModel
(0),
FluctModel
());
151
152
G4double
emax
= param->
MaxKinEnergy
();
153
if
(
eth
< emax) {
154
if
(!
EmModel
(1)) {
SetEmModel
(
new
G4BetheBlochModel
()); }
155
EmModel
(1)->
SetLowEnergyLimit
(
eth
);
156
EmModel
(1)->
SetHighEnergyLimit
(emax);
157
AddEmModel
(2,
EmModel
(1),
FluctModel
());
158
159
// Add ion stoping tables for Generic Ion if the default
160
// model is used (with eth ~= 2 MeV)
161
if
(part == ion && (
EmModel
(1)->GetName() ==
"BetheBloch"
||
162
EmModel
(1)->GetName() ==
"BetheBlochGasIon"
)) {
163
stopDataActive
=
true
;
164
G4WaterStopping
ws(
corr
);
165
corr
->
SetIonisationModels
(
EmModel
(0),
EmModel
(1));
166
}
167
}
168
isInitialised
=
true
;
169
}
170
// reinitialisation of corrections for the new run
171
if
(part == ion) {
corr
->
InitialiseForNewRun
(); }
172
}
173
174
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
175
176
void
G4ionIonisation::StreamProcessInfo
(std::ostream& out)
const
177
{
178
if
(
stopDataActive
&&
G4GenericIon::GenericIon
() ==
theParticle
) {
179
out <<
" Stopping Power data for "
180
<<
corr
->
GetNumberOfStoppingVectors
()
181
<<
" ion/material pairs"
<<
G4endl
;
182
}
183
}
184
185
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
186
187
void
G4ionIonisation::AddStoppingData
(
G4int
Z
,
G4int
A
,
188
const
G4String
& mname,
189
G4PhysicsVector
* dVector)
190
{
191
corr
->
AddStoppingData
(Z, A, mname, dVector);
192
}
193
194
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
195
196
void
G4ionIonisation::ProcessDescription
(std::ostream& out)
const
197
{
198
out <<
" Ion ionisation"
;
199
G4VEnergyLossProcess::ProcessDescription
(out);
200
}
201
202
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
src
G4ionIonisation.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration