Geant4-11
Toggle main menu visibility
Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
m
n
p
r
s
t
w
y
Enumerations
a
b
c
d
e
f
g
l
m
p
r
s
t
v
y
z
Enumerator
a
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
z
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
g
i
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Related Functions
:
a
b
c
d
g
h
i
o
q
r
s
t
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
x
z
Enumerations
b
c
d
e
f
g
i
j
l
m
n
p
r
s
t
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
y
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
y
z
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
source
processes
hadronic
cross_sections
src
G4NeutrinoElectronNcXsc.cc
Go to the documentation of this file.
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
#include "
G4NeutrinoElectronNcXsc.hh
"
29
#include "
G4PhysicalConstants.hh
"
30
#include "
G4SystemOfUnits.hh
"
31
#include "
G4DynamicParticle.hh
"
32
#include "
G4ParticleTable.hh
"
33
#include "
G4IonTable.hh
"
34
#include "
G4HadTmpUtil.hh
"
35
#include "
G4Proton.hh
"
36
#include "
G4NistManager.hh
"
37
38
using namespace
std
;
39
using namespace
CLHEP
;
40
41
G4NeutrinoElectronNcXsc::G4NeutrinoElectronNcXsc
()
42
:
G4VCrossSectionDataSet
(
"NuElectronNcXsc"
)
43
{
44
// PDG2016: Gf=1.1663787(6)e-5*(hc)^3/GeV^2
45
// fCofXsc = Gf*Gf*MeC2*2/pi
46
47
fCofXsc
= 1.36044e-22;
48
fCofXsc
*=
hbarc
*
hbarc
*
electron_mass_c2
;
49
fCofXsc
/=
halfpi
;
50
51
// G4cout<<"hbarc = "<<hbarc/MeV/fermi<<" MeV*fermi"<<G4endl;
52
53
// PDG2016: sin^2 theta Weinberg
54
55
fSin2tW
= 0.23129;
// 0.2312;
56
57
fCutEnergy
= 0.;
// default value
58
fBiasingFactor
= 1.;
59
}
60
61
G4NeutrinoElectronNcXsc::~G4NeutrinoElectronNcXsc
()
62
{}
63
65
66
G4bool
67
G4NeutrinoElectronNcXsc::IsElementApplicable
(
const
G4DynamicParticle
* aPart,
G4int
,
const
G4Material
*)
68
{
69
G4bool
result =
false
;
70
G4String
pName = aPart->
GetDefinition
()->
GetParticleName
();
71
G4double
minEnergy = 0.,
energy
= aPart->
GetTotalEnergy
();
72
// Z *= 1;
73
if
(
fCutEnergy
> 0. )
// min detected recoil electron energy
74
{
75
minEnergy = 0.5*(
fCutEnergy
+sqrt(
fCutEnergy
*(
fCutEnergy
+2.*
electron_mass_c2
)));
76
}
77
if
( ( pName ==
"nu_e"
|| pName ==
"anti_nu_e"
||
78
pName ==
"nu_mu"
|| pName ==
"anti_nu_mu"
||
79
pName ==
"nu_tau"
|| pName ==
"anti_nu_tau"
) &&
80
energy
> minEnergy )
81
{
82
result =
true
;
83
}
84
return
result;
85
}
86
88
89
G4double
G4NeutrinoElectronNcXsc::
90
GetElementCrossSection
(
const
G4DynamicParticle
* aPart,
G4int
ZZ,
91
const
G4Material
*)
92
{
93
G4double
result = 0., cofL, cofR, cofL2, cofR2, cofLR;
94
95
G4double
energy
= aPart->
GetTotalEnergy
();
96
G4String
pName = aPart->
GetDefinition
()->
GetParticleName
();
97
98
if
( pName ==
"nu_e"
)
99
{
100
cofL = 0.5 +
fSin2tW
;
101
cofR =
fSin2tW
;
102
}
103
else
if
( pName ==
"anti_nu_e"
)
104
{
105
cofL =
fSin2tW
;
106
cofR = 0.5 +
fSin2tW
;
107
}
108
else
if
( pName ==
"nu_mu"
)
109
{
110
cofL = -0.5 +
fSin2tW
;
111
cofR =
fSin2tW
;
112
}
113
else
if
( pName ==
"anti_nu_mu"
)
114
{
115
cofL =
fSin2tW
;
116
cofR = -0.5 +
fSin2tW
;
117
}
118
else
if
( pName ==
"nu_tau"
)
// vmg: nu_tau as nu_mu ???
119
{
120
cofL = -0.5 +
fSin2tW
;
121
cofR =
fSin2tW
;
122
}
123
else
if
( pName ==
"anti_nu_tau"
)
124
{
125
cofL =
fSin2tW
;
126
cofR = -0.5 +
fSin2tW
;
127
}
128
else
129
{
130
return
result;
131
}
132
// if( energy <= electron_mass_c2 ) return result;
133
134
cofL2 = cofL*cofL;
135
cofR2 = cofR*cofR;
136
cofLR = cofL*cofR;
137
138
if
(
fCutEnergy
> 0. )
139
{
140
G4double
tM = 2.*
energy
*
energy
/(
electron_mass_c2
+ 2.*
energy
);
141
G4double
tM2 = tM*tM;
142
G4double
tM3 = tM*tM2;
143
G4double
tC =
fCutEnergy
;
144
G4double
tC2 = tC*tC;
145
G4double
tC3 = tC*tC2;
146
147
result = (cofL2+cofR2)*(tM-tC);
148
result -= (cofR2+cofLR*0.5*
electron_mass_c2
/
energy
)*(tM2-tC2)/
energy
;
149
result += cofR2*(tM3-tC3)/
energy
/
energy
/3.;
150
}
151
else
152
{
153
G4double
rtM = 2.*
energy
/(
electron_mass_c2
+ 2.*
energy
);
154
G4double
rtM2 = rtM*rtM;
155
G4double
rtM3 = rtM*rtM2;
156
157
result = (cofL2+cofR2)*rtM*
energy
;
158
result -= (cofR2*
energy
+cofLR*0.5*
electron_mass_c2
)*rtM2;
159
result += cofR2*rtM3*
energy
/3.;
160
}
161
// result = cofL*cofL + cofR*cofR/3.;
162
// G4cout<<"cofL2 + cofR2/3. = "<<result<<G4endl;
163
// result -= 0.5*cofL*cofR*electron_mass_c2/energy;
164
165
G4double
aa = 1.;
166
G4double
bb = 1.7;
167
G4double
gw = 2.141*
GeV
;
168
G4double
dd = 5000.;
169
G4double
mw = 80.385*
GeV
;
170
G4double
mz = 91.1876*
GeV
;
171
172
G4double
emass =
electron_mass_c2
;
173
G4double
totS = 2.*
energy
*emass + emass*emass;
174
175
if
(
energy
> 50.*
GeV
)
176
{
177
result *= bb;
178
result /= 1.+ aa*totS/mz/mz;
179
180
if
( pName ==
"anti_nu_e"
)
181
{
182
result *= 1. + dd*gw*gw*totS/( (totS-mw*mw)*(totS-mw*mw)+gw*gw*mw*mw );
183
}
184
}
185
186
result *=
fCofXsc
;
//*energy;
187
188
result *= ZZ;
// incoherent sum over all element electrons
189
190
result *=
fBiasingFactor
;
191
192
return
result;
193
}
194
G4DynamicParticle.hh
G4HadTmpUtil.hh
G4IonTable.hh
G4NeutrinoElectronNcXsc.hh
G4NistManager.hh
G4ParticleTable.hh
G4PhysicalConstants.hh
G4Proton.hh
GeV
static constexpr double GeV
Definition:
G4SIunits.hh:203
halfpi
static constexpr double halfpi
Definition:
G4SIunits.hh:57
G4SystemOfUnits.hh
G4double
double G4double
Definition:
G4Types.hh:83
G4bool
bool G4bool
Definition:
G4Types.hh:86
G4int
int G4int
Definition:
G4Types.hh:85
G4DynamicParticle
Definition:
G4DynamicParticle.hh:65
G4DynamicParticle::GetDefinition
G4ParticleDefinition * GetDefinition() const
G4DynamicParticle::GetTotalEnergy
G4double GetTotalEnergy() const
G4Material
Definition:
G4Material.hh:118
G4NeutrinoElectronNcXsc::GetElementCrossSection
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *)
Definition:
G4NeutrinoElectronNcXsc.cc:90
G4NeutrinoElectronNcXsc::fCutEnergy
G4double fCutEnergy
Definition:
G4NeutrinoElectronNcXsc.hh:64
G4NeutrinoElectronNcXsc::IsElementApplicable
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
Definition:
G4NeutrinoElectronNcXsc.cc:67
G4NeutrinoElectronNcXsc::~G4NeutrinoElectronNcXsc
~G4NeutrinoElectronNcXsc()
Definition:
G4NeutrinoElectronNcXsc.cc:61
G4NeutrinoElectronNcXsc::fBiasingFactor
G4double fBiasingFactor
Definition:
G4NeutrinoElectronNcXsc.hh:65
G4NeutrinoElectronNcXsc::fCofXsc
G4double fCofXsc
Definition:
G4NeutrinoElectronNcXsc.hh:58
G4NeutrinoElectronNcXsc::fSin2tW
G4double fSin2tW
Definition:
G4NeutrinoElectronNcXsc.hh:63
G4NeutrinoElectronNcXsc::G4NeutrinoElectronNcXsc
G4NeutrinoElectronNcXsc()
Definition:
G4NeutrinoElectronNcXsc.cc:41
G4ParticleDefinition::GetParticleName
const G4String & GetParticleName() const
Definition:
G4ParticleDefinition.hh:109
G4String
Definition:
G4String.hh:62
G4VCrossSectionDataSet
Definition:
G4VCrossSectionDataSet.hh:70
CLHEP
Definition:
DoubConv.h:17
G4INCL::KinematicsUtils::energy
G4double energy(const ThreeVector &p, const G4double m)
Definition:
G4INCLKinematicsUtils.cc:158
source.hepunit.electron_mass_c2
float electron_mass_c2
Definition:
hepunit.py:273
source.hepunit.hbarc
float hbarc
Definition:
hepunit.py:264
std
Definition:
G4VtkSceneHandler.cc:55
Generated by
1.9.3