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
ECCE @ EIC Software
Deprecated List
Modules
Namespaces
Classes
Files
File List
acts
analysis
coresoftware
Doxygen_Assist
ecce-detectors
fun4all_eicdetectors
geant4
tree
geant4-10.6-release
config
environments
examples
source
analysis
digits_hits
error_propagation
event
externals
g3tog4
geometry
global
graphics_reps
intercoms
interfaces
materials
parameterisations
particles
persistency
physics_lists
processes
biasing
cuts
decay
electromagnetic
hadronic
cross_sections
management
models
abla
abrasion
binary_cascade
cascade
coherent_elastic
include
src
G4AntiNuclElastic.cc
G4ChargeExchange.cc
G4ChargeExchangeProcess.cc
G4ChipsElasticModel.cc
G4DiffuseElastic.cc
G4DiffuseElasticV2.cc
G4ElasticHadrNucleusHE.cc
G4HadronElastic.cc
G4hhElastic.cc
G4LEHadronProtonElastic.cc
G4LEnp.cc
G4LEpp.cc
G4LMsdGenerator.cc
G4LowEHadronElastic.cc
G4NeutrinoElectronNcModel.cc
G4NeutronElectronElModel.cc
G4NuclNuclDiffuseElastic.cc
de_excitation
em_dissociation
fission
gamma_nuclear
im_r_matrix
inclxx
lend
lepto_nuclear
management
particle_hp
parton_string
pre_equilibrium
qmd
quasi_elastic
radioactive_decay
rpg
theo_high_energy
util
processes
stopping
util
management
optical
parameterisation
scoring
solidstate
transportation
readout
run
track
tracking
visualization
macros
online_distribution
tutorials
doxygen_mainpage.h
File Members
External Links
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4ChargeExchangeProcess.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4ChargeExchangeProcess.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 Hadron Charge Exchange Process -- source file
30
//
31
// Created 21 April 2006 V.Ivanchenko
32
//
33
// Modified:
34
// 24-Apr-06 V.Ivanchenko add neutron scattering on hydrogen from CHIPS
35
// 07-Jun-06 V.Ivanchenko fix problem of rotation of final state
36
// 25-Jul-06 V.Ivanchenko add 19 MeV low energy for CHIPS
37
// 23-Jan-07 V.Ivanchenko add cross section interfaces with Z and A
38
// and do not use CHIPS for cross sections
39
// 14-Sep-12 M.Kelsey -- Pass subType code to base ctor
40
// 06-Aug-15 A.Ribon migrating to G4Pow
41
42
#include "
G4ChargeExchangeProcess.hh
"
43
#include "
globals.hh
"
44
#include "
G4SystemOfUnits.hh
"
45
#include "
G4CrossSectionDataStore.hh
"
46
#include "
G4HadronElasticDataSet.hh
"
47
#include "
G4Element.hh
"
48
#include "
G4ElementVector.hh
"
49
#include "
G4IsotopeVector.hh
"
50
#include "
G4Neutron.hh
"
51
#include "
G4Proton.hh
"
52
#include "
G4PhysicsLinearVector.hh
"
53
54
#include "
G4Pow.hh
"
55
56
57
G4ChargeExchangeProcess::G4ChargeExchangeProcess
(
const
G4String
& procName)
58
:
G4HadronicProcess
(procName,
fChargeExchange
), first(
true
)
59
{
60
thEnergy
= 20.*
MeV
;
61
pPDG
= 0;
62
verboseLevel
= 1;
63
AddDataSet
(
new
G4HadronElasticDataSet
);
64
theProton
=
G4Proton::Proton
();
65
theNeutron
=
G4Neutron::Neutron
();
66
theAProton
=
G4AntiProton::AntiProton
();
67
theANeutron
=
G4AntiNeutron::AntiNeutron
();
68
thePiPlus
=
G4PionPlus::PionPlus
();
69
thePiMinus
=
G4PionMinus::PionMinus
();
70
thePiZero
=
G4PionZero::PionZero
();
71
theKPlus
=
G4KaonPlus::KaonPlus
();
72
theKMinus
=
G4KaonMinus::KaonMinus
();
73
theK0S
=
G4KaonZeroShort::KaonZeroShort
();
74
theK0L
=
G4KaonZeroLong::KaonZeroLong
();
75
theL
=
G4Lambda::Lambda
();
76
theAntiL
=
G4AntiLambda::AntiLambda
();
77
theSPlus
=
G4SigmaPlus::SigmaPlus
();
78
theASPlus
=
G4AntiSigmaPlus::AntiSigmaPlus
();
79
theSMinus
=
G4SigmaMinus::SigmaMinus
();
80
theASMinus
=
G4AntiSigmaMinus::AntiSigmaMinus
();
81
theS0
=
G4SigmaZero::SigmaZero
();
82
theAS0
=
G4AntiSigmaZero::AntiSigmaZero
();
83
theXiMinus
=
G4XiMinus::XiMinus
();
84
theXi0
=
G4XiZero::XiZero
();
85
theAXiMinus
=
G4AntiXiMinus::AntiXiMinus
();
86
theAXi0
=
G4AntiXiZero::AntiXiZero
();
87
theOmega
=
G4OmegaMinus::OmegaMinus
();
88
theAOmega
=
G4AntiOmegaMinus::AntiOmegaMinus
();
89
theD
=
G4Deuteron::Deuteron
();
90
theT
=
G4Triton::Triton
();
91
theA
=
G4Alpha::Alpha
();
92
theHe3
=
G4He3::He3
();
93
}
94
95
G4ChargeExchangeProcess::~G4ChargeExchangeProcess
()
96
{
97
if
(
factors
)
delete
factors
;
98
}
99
100
void
G4ChargeExchangeProcess::
101
BuildPhysicsTable
(
const
G4ParticleDefinition
& aParticleType)
102
{
103
if
(
first
) {
104
first
=
false
;
105
theParticle
= &aParticleType;
106
pPDG
=
theParticle
->
GetPDGEncoding
();
107
108
store
=
G4HadronicProcess::GetCrossSectionDataStore
();
109
110
const
size_t
n
= 10;
111
if
(
theParticle
==
thePiPlus
||
theParticle
==
thePiMinus
||
112
theParticle
==
theKPlus
||
theParticle
==
theKMinus
||
113
theParticle
==
theK0S
||
theParticle
==
theK0L
) {
114
115
G4double
F
[
n
] = {0.33,0.27,0.29,0.31,0.27,0.18,0.13,0.1,0.09,0.07};
116
factors
=
new
G4PhysicsLinearVector
(0.0,2.0*
GeV
,n);
117
for
(
size_t
i=0; i<
n
; i++) {
factors
->
PutValue
(i,F[i]);}
118
119
}
else
{
120
121
G4double
F
[
n
] = {0.50,0.45,0.40,0.35,0.30,0.25,0.06,0.04,0.005,0.0};
122
factors
=
new
G4PhysicsLinearVector
(0.0,4.0*
GeV
,n);
123
for
(
size_t
i=0; i<
n
; i++) {
factors
->
PutValue
(i,F[i]);}
124
}
125
//factors->SetSpline(true);
126
127
if
(
verboseLevel
>1)
128
G4cout
<<
"G4ChargeExchangeProcess for "
129
<<
theParticle
->
GetParticleName
()
130
<<
G4endl
;
131
}
132
G4HadronicProcess::BuildPhysicsTable
(aParticleType);
133
}
134
135
G4double
G4ChargeExchangeProcess::GetElementCrossSection
(
136
const
G4DynamicParticle
* dp,
137
const
G4Element
* elm,
138
const
G4Material
*
mat
)
139
{
140
// gives the microscopic cross section in GEANT4 internal units
141
G4double
Z
= elm->
GetZ
();
142
G4int
iz =
G4int
(Z);
143
G4double
x
= 0.0;
144
145
// The process is effective only above the threshold
146
if
(iz == 1 || dp->
GetKineticEnergy
() <
thEnergy
)
return
x;
147
148
if
(
verboseLevel
>1)
149
G4cout
<<
"G4ChargeExchangeProcess compute GHAD CS for element "
150
<< elm->
GetName
()
151
<<
G4endl
;
152
x =
store
->
GetCrossSection
(dp, elm, mat);
153
154
if
(
verboseLevel
>1)
155
G4cout
<<
"G4ChargeExchangeProcess cross(mb)= "
<< x/
millibarn
156
<<
" E(MeV)= "
<< dp->
GetKineticEnergy
()
157
<<
" "
<<
theParticle
->
GetParticleName
()
158
<<
" in Z= "
<< iz
159
<<
G4endl
;
160
G4bool
b
;
161
G4double
A
= elm->
GetN
();
162
G4double
ptot = dp->
GetTotalMomentum
();
163
x *=
factors
->
GetValue
(ptot, b)/
G4Pow::GetInstance
()->
powA
(A, 0.42);
164
if
(
theParticle
==
thePiPlus
||
theParticle
==
theProton
||
165
theParticle
==
theKPlus
||
theParticle
==
theANeutron
)
166
{ x *= (1.0 - Z/
A
); }
167
168
else
if
(
theParticle
==
thePiMinus
||
theParticle
==
theNeutron
||
169
theParticle
==
theKMinus
||
theParticle
==
theAProton
)
170
{ x *= Z/
A
; }
171
172
if
(
theParticle
->
GetPDGMass
() <
GeV
) {
173
if
(ptot > 2.*
GeV
) x *= 4.0*
GeV
*
GeV
/(ptot*ptot);
174
}
175
176
if
(
verboseLevel
>1)
177
G4cout
<<
"Corrected cross(mb)= "
<< x/
millibarn
<<
G4endl
;
178
179
return
x
;
180
}
181
182
G4bool
G4ChargeExchangeProcess::
183
IsApplicable
(
const
G4ParticleDefinition
& aParticleType)
184
{
185
const
G4ParticleDefinition
*
p
= &aParticleType;
186
return
(p ==
thePiPlus
|| p ==
thePiMinus
||
187
p ==
theProton
|| p ==
theNeutron
||
188
p ==
theAProton
|| p ==
theANeutron
||
189
p ==
theKPlus
|| p ==
theKMinus
||
190
p ==
theK0S
|| p ==
theK0L
||
191
p ==
theL
);
192
}
193
194
void
G4ChargeExchangeProcess::
195
DumpPhysicsTable
(
const
G4ParticleDefinition
& aParticleType)
196
{
197
store
->
DumpPhysicsTable
(aParticleType);
198
}
geant4
tree
geant4-10.6-release
source
processes
hadronic
models
coherent_elastic
src
G4ChargeExchangeProcess.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:40
using
1.8.2 with
ECCE GitHub integration