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
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