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
G4IonCoulombCrossSection.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4IonCoulombCrossSection.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
// G4IonCoulombCrossSection.cc
27
//-------------------------------------------------------------------
28
//
29
// GEANT4 Class header file
30
//
31
// File name: G4IonCoulombCrossSection
32
//
33
// Author: Cristina Consolandi
34
//
35
// Creation date: 05.10.2010 from G4eCoulombScatteringModel
36
//
37
// Class Description:
38
// Computation of Screen-Coulomb Cross Section
39
// for protons, alpha and heavy Ions
40
//
41
//
42
// Reference:
43
// M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss
44
// for Coulomb Scattered Particles from Low Energy up to Relativistic
45
// Regime in Space Radiation Environment"
46
// Accepted for publication in the Proceedings of the ICATPP Conference
47
// on Cosmic Rays for Particle and Astroparticle Physics, Villa Olmo, 7-8
48
// October, 2010, to be published by World Scientific (Singapore).
49
//
50
// Available for downloading at:
51
// http://arxiv.org/abs/1011.4822
52
//
53
// -------------------------------------------------------------------
54
//
55
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
56
57
#include "
G4IonCoulombCrossSection.hh
"
58
#include "
G4PhysicalConstants.hh
"
59
#include "
Randomize.hh
"
60
#include "
G4Proton.hh
"
61
#include "
G4Exp.hh
"
62
#include "
G4Log.hh
"
63
64
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
65
66
using namespace
std;
67
68
const
G4double
a0
=
CLHEP::electron_mass_c2
/0.88534;
69
70
G4IonCoulombCrossSection::G4IonCoulombCrossSection
():
71
cosThetaMin(1.0),
72
cosThetaMax(-1.0),
73
alpha2(
fine_structure_const
*
fine_structure_const
)
74
{
75
fNistManager
=
G4NistManager::Instance
();
76
fG4pow
=
G4Pow::GetInstance
();
77
theProton
=
G4Proton::Proton
();
78
particle
=0;
79
80
G4double
p0 =
electron_mass_c2
*
classic_electr_radius
;
81
coeff
=
twopi
*p0*p0;
82
83
cosTetMinNuc
=0;
84
cosTetMaxNuc
=0;
85
nucXSection
=0;
86
87
chargeSquare
=
spin
=
mass
= 0.0;
88
tkinLab
=
momLab2
=
invbetaLab2
=
tkin
=
mom2
=
invbeta2
= 0.0;
89
90
targetZ
=
targetMass
=
screenZ
=
ScreenRSquare
=
etag
= 0.0;
91
}
92
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
93
94
G4IonCoulombCrossSection::~G4IonCoulombCrossSection
()
95
{}
96
97
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
98
99
void
G4IonCoulombCrossSection::Initialise
(
const
G4ParticleDefinition
*
p
,
100
G4double
CosThetaLim)
101
{
102
SetupParticle
(p);
103
nucXSection
=
tkin
=
targetZ
=
mom2
= 0.0;
104
etag
=
DBL_MAX
;
105
particle
=
p
;
106
cosThetaMin
= CosThetaLim;
107
}
108
109
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
110
111
void
G4IonCoulombCrossSection::SetupKinematic
(
G4double
ekin,
G4double
tmass)
112
{
113
if
(ekin !=
tkinLab
|| tmass !=
targetMass
) {
114
115
// lab
116
tkinLab
= ekin;
117
momLab2
=
tkinLab
*(
tkinLab
+ 2.0*
mass
);
118
invbetaLab2
= 1.0 +
mass
*
mass
/
momLab2
;
119
120
G4double
etot =
tkinLab
+
mass
;
121
G4double
ptot = sqrt(
momLab2
);
122
G4double
m12 = mass*
mass
;
123
// relativistic reduced mass from publucation
124
// A.P. Martynenko, R.N. Faustov, Teoret. mat. Fiz. 64 (1985) 179
125
126
//incident particle & target nucleus
127
targetMass
= tmass;
128
G4double
Ecm=sqrt(m12 +
targetMass
*
targetMass
+ 2.0*etot*
targetMass
);
129
G4double
mu_rel=mass*targetMass/Ecm;
130
G4double
momCM= ptot*targetMass/Ecm;
131
// relative system
132
mom2
= momCM*momCM;
133
invbeta2
= 1.0 + mu_rel*mu_rel/
mom2
;
134
tkin
= momCM*sqrt(
invbeta2
) - mu_rel;
//Ekin of mu_rel
135
136
cosTetMinNuc
=
cosThetaMin
;
137
cosTetMaxNuc
=
cosThetaMax
;
138
}
139
}
140
141
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
142
143
void
G4IonCoulombCrossSection::SetupTarget
(
G4double
Z
,
G4double
e
,
144
G4int
)
145
{
146
if
(Z !=
targetZ
|| e !=
etag
) {
147
etag
=
e
;
148
targetZ
=
Z
;
149
G4int
iz=
G4lrint
(Z);
150
151
SetScreenRSquare
(iz);
152
screenZ
= 0;
153
screenZ
=
ScreenRSquare
/
mom2
;
154
//heavycorr = 0;
155
// G4cout<< "heavycorr "<<heavycorr<<G4endl;
156
157
G4double
corr=5.*
twopi
*Z*std::sqrt(
chargeSquare
*
alpha2
);
158
corr=
G4Exp
(
G4Log
(corr)*0.04);
159
screenZ
*=0.5*(1.13 + corr*3.76*Z*Z*
chargeSquare
*
invbeta2
*
alpha2
);
160
// G4cout<<" heavycorr Z e corr....2As "<< heavycorr << "\t"
161
// <<Z <<"\t"<<e/MeV <<"\t"<<screenZ<<G4endl;
162
163
if
(1 == iz &&
particle
==
theProton
&&
cosTetMaxNuc
< 0.0) {
164
cosTetMaxNuc
= 0.0;
165
}
166
}
167
}
168
169
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
170
171
void
G4IonCoulombCrossSection::SetScreenRSquare
(
G4int
iz)
172
{
173
//for proton Thomas-Fermi screening length
174
G4int
Z1
=
G4lrint
(std::sqrt(
chargeSquare
));
175
G4double
Z113 =
fG4pow
->
Z13
(iz);
176
G4double
Z1023 =
fG4pow
->
powZ
(Z1,0.23);
177
G4double
Z2023 =
fG4pow
->
powZ
(iz,0.23);
178
G4double
x
=
a0
*(Z1023+Z2023);
179
180
// Universal screening length
181
if
(
particle
==
theProton
){
182
x =
a0
*Z113;
183
}
184
185
ScreenRSquare
=
alpha2
*x*
x
;
186
}
187
188
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
189
190
G4double
G4IonCoulombCrossSection::NuclearCrossSection
()
191
{
192
// This method needs initialisation before be called
193
// scattering with target nucleus
194
G4double
fac
=
coeff
*
targetZ
*(
targetZ
)*
chargeSquare
*
invbeta2
/
mom2
;
195
196
nucXSection
= 0.0;
197
198
G4double
x
= 1.0 -
cosTetMinNuc
;
199
G4double
x1
= x +
screenZ
;
200
201
// scattering with nucleus
202
if
(
cosTetMaxNuc
<
cosTetMinNuc
) {
203
nucXSection = fac*(
cosTetMinNuc
-
cosTetMaxNuc
)/
204
(x1*(1.0 -
cosTetMaxNuc
+ screenZ));
205
}
206
207
return
nucXSection
;
208
}
209
210
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
211
212
G4double
G4IonCoulombCrossSection::SampleCosineTheta
()
213
{
214
G4double
z1
= 0.0;
215
if
(
cosTetMaxNuc
<
cosTetMinNuc
) {
216
217
G4double
x1
= 1. -
cosTetMinNuc
+
screenZ
;
218
G4double
x2
= 1. -
cosTetMaxNuc
+
screenZ
;
219
G4double
dx
=
cosTetMinNuc
-
cosTetMaxNuc
;
220
z1 = x1*x2/(x1 +
G4UniformRand
()*
dx
) - screenZ;
221
}
222
return
z1
;
223
}
224
225
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
226
227
228
229
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
src
G4IonCoulombCrossSection.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration