Geant4
11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4teoCrossSection.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
//
29
// History:
30
// -----------
31
// 21 Apr 2009 ALF 1st implementation
32
// 29 Apr 2009 ALF Updated Desing for Integration
33
// 15 Mar 2011 ALF introduced the usage of G4AtomicShellEnumerator
34
// 20 Oct 2011 ALF updated to take into account ECPSSR Form Factor
35
// 09 Mar 2012 LP update methods
36
// 09 Mar 2012 ALF update for M-shells Simulation
37
// 10 Nov 2021 S. Guatelli & S. Bakr Added ECPSSR form factor documented
38
// in Bakr et al, NIM B, vol. 436, pp:285-291, 2018 and
39
// called here ECPSSR_ANSTO
40
41
#include "
globals.hh
"
42
#include "
G4teoCrossSection.hh
"
43
#include "
G4Proton.hh
"
44
#include "
G4ecpssrBaseKxsModel.hh
"
45
#include "
G4ecpssrBaseLixsModel.hh
"
46
#include "
G4ecpssrFormFactorKxsModel.hh
"
47
#include "
G4ecpssrFormFactorLixsModel.hh
"
48
#include "
G4ecpssrFormFactorMixsModel.hh
"
49
#include "
G4ANSTOecpssrKxsModel.hh
"
50
#include "
G4ANSTOecpssrLixsModel.hh
"
51
#include "
G4ANSTOecpssrMixsModel.hh
"
52
53
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
54
G4teoCrossSection::G4teoCrossSection
(
const
G4String
& nam)
55
:
G4VhShellCrossSection
(nam),totalCS(0.0)
56
{
57
ecpssrShellMi =
nullptr
;
58
if
(nam ==
"ECPSSR_Analytical"
)
59
{
60
ecpssrShellK =
new
G4ecpssrBaseKxsModel
();
61
ecpssrShellLi =
new
G4ecpssrBaseLixsModel
();
62
}
63
else
if
(nam ==
"ECPSSR_FormFactor"
)
64
{
65
ecpssrShellK =
new
G4ecpssrFormFactorKxsModel
();
66
ecpssrShellLi =
new
G4ecpssrFormFactorLixsModel
();
67
ecpssrShellMi =
new
G4ecpssrFormFactorMixsModel
();
68
}
69
else
if
(nam ==
"ECPSSR_ANSTO"
)
70
{
71
ecpssrShellK =
new
G4ANSTOecpssrKxsModel
();
72
ecpssrShellLi =
new
G4ANSTOecpssrLixsModel
();
73
ecpssrShellMi =
new
G4ANSTOecpssrMixsModel
();
74
}
75
else
76
{
77
G4cout
<<
"G4teoCrossSection::G4teoCrossSection: ERROR "
78
<<
" in cross section name ECPSSR_Analytical is used"
79
<<
G4endl
;
80
ecpssrShellK =
new
G4ecpssrBaseKxsModel
();
81
ecpssrShellLi =
new
G4ecpssrBaseLixsModel
();
82
}
83
}
84
85
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
86
87
G4teoCrossSection::~G4teoCrossSection
()
88
{
89
delete
ecpssrShellK;
90
delete
ecpssrShellLi;
91
delete
ecpssrShellMi;
92
}
93
94
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
95
96
std::vector<G4double>
G4teoCrossSection::GetCrossSection
(
G4int
Z,
97
G4double
incidentEnergy,
98
G4double
mass,
99
G4double
,
100
const
G4Material
*)
101
{
102
std::vector<G4double> crossSections;
103
104
crossSections.push_back( ecpssrShellK->
CalculateCrossSection
(Z, mass, incidentEnergy) );
105
106
crossSections.push_back( ecpssrShellLi->
CalculateL1CrossSection
(Z, mass, incidentEnergy) );
107
crossSections.push_back( ecpssrShellLi->
CalculateL2CrossSection
(Z, mass, incidentEnergy) );
108
crossSections.push_back( ecpssrShellLi->
CalculateL3CrossSection
(Z, mass, incidentEnergy) );
109
110
if
(ecpssrShellMi) {
111
crossSections.push_back( ecpssrShellMi->
CalculateM1CrossSection
(Z, mass, incidentEnergy) );
112
crossSections.push_back( ecpssrShellMi->
CalculateM2CrossSection
(Z, mass, incidentEnergy) );
113
crossSections.push_back( ecpssrShellMi->
CalculateM3CrossSection
(Z, mass, incidentEnergy) );
114
crossSections.push_back( ecpssrShellMi->
CalculateM4CrossSection
(Z, mass, incidentEnergy) );
115
crossSections.push_back( ecpssrShellMi->
CalculateM5CrossSection
(Z, mass, incidentEnergy) );
116
}
117
return
crossSections;
118
}
119
120
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
121
122
G4double
G4teoCrossSection::CrossSection
(
G4int
Z,
G4AtomicShellEnumerator
shell,
123
G4double
incidentEnergy,
124
G4double
mass,
125
const
G4Material
*)
126
{
127
G4double
res = 0.0;
128
if
(shell > 3 && !ecpssrShellMi) {
129
return
res;
130
}
131
else
if
(shell > 8) {
132
return
res;
133
}
134
else
if
(
fKShell
== shell)
135
{
136
res = ecpssrShellK->
CalculateCrossSection
(Z, mass, incidentEnergy);
137
}
138
else
if
(
fL1Shell
== shell)
139
{
140
res = ecpssrShellLi->
CalculateL1CrossSection
(Z, mass, incidentEnergy);
141
}
142
else
if
(
fL2Shell
== shell)
143
{
144
res = ecpssrShellLi->
CalculateL2CrossSection
(Z, mass, incidentEnergy);
145
}
146
else
if
(
fL3Shell
== shell)
147
{
148
res = ecpssrShellLi->
CalculateL3CrossSection
(Z, mass, incidentEnergy);
149
}
150
else
if
(
fM1Shell
== shell)
151
{
152
res = ecpssrShellMi->
CalculateM1CrossSection
(Z, mass, incidentEnergy);
153
}
154
else
if
(
fM2Shell
== shell)
155
{
156
res = ecpssrShellMi->
CalculateM2CrossSection
(Z, mass, incidentEnergy);
157
}
158
else
if
(
fM3Shell
== shell)
159
{
160
res = ecpssrShellMi->
CalculateM3CrossSection
(Z, mass, incidentEnergy);
161
}
162
else
if
(
fM4Shell
== shell)
163
{
164
res = ecpssrShellMi->
CalculateM4CrossSection
(Z, mass, incidentEnergy);
165
}
166
else
if
(
fM5Shell
== shell)
167
{
168
res = ecpssrShellMi->
CalculateM5CrossSection
(Z, mass, incidentEnergy);
169
}
170
return
res;
171
}
172
173
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
174
175
std::vector<G4double>
G4teoCrossSection::Probabilities
(
G4int
Z,
176
G4double
incidentEnergy,
177
G4double
mass,
178
G4double
deltaEnergy,
179
const
G4Material
*)
180
{
181
std::vector<G4double> crossSections =
182
GetCrossSection
(Z, incidentEnergy, mass, deltaEnergy);
183
184
for
(
size_t
i=0; i<crossSections.size(); ++i ) {
185
if
(totalCS) {
186
crossSections[i] = crossSections[i]/totalCS;
187
}
188
}
189
return
crossSections;
190
}
191
192
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
193
194
void
G4teoCrossSection::SetTotalCS
(
G4double
val){
195
totalCS = val;
196
}
197
198
199
G4ANSTOecpssrKxsModel.hh
G4ANSTOecpssrLixsModel.hh
G4ANSTOecpssrMixsModel.hh
G4AtomicShellEnumerator
G4AtomicShellEnumerator
Definition
G4AtomicShellEnumerator.hh:50
fM4Shell
@ fM4Shell
Definition
G4AtomicShellEnumerator.hh:59
fL3Shell
@ fL3Shell
Definition
G4AtomicShellEnumerator.hh:55
fM2Shell
@ fM2Shell
Definition
G4AtomicShellEnumerator.hh:57
fL2Shell
@ fL2Shell
Definition
G4AtomicShellEnumerator.hh:54
fM5Shell
@ fM5Shell
Definition
G4AtomicShellEnumerator.hh:60
fM3Shell
@ fM3Shell
Definition
G4AtomicShellEnumerator.hh:58
fKShell
@ fKShell
Definition
G4AtomicShellEnumerator.hh:52
fM1Shell
@ fM1Shell
Definition
G4AtomicShellEnumerator.hh:56
fL1Shell
@ fL1Shell
Definition
G4AtomicShellEnumerator.hh:53
G4Proton.hh
G4double
double G4double
Definition
G4Types.hh:83
G4int
int G4int
Definition
G4Types.hh:85
G4ecpssrBaseKxsModel.hh
G4ecpssrBaseLixsModel.hh
G4ecpssrFormFactorKxsModel.hh
G4ecpssrFormFactorLixsModel.hh
G4ecpssrFormFactorMixsModel.hh
G4endl
#define G4endl
Definition
G4ios.hh:67
G4cout
G4GLOB_DLL std::ostream G4cout
G4teoCrossSection.hh
G4ANSTOecpssrKxsModel
Definition
G4ANSTOecpssrKxsModel.hh:50
G4ANSTOecpssrLixsModel
Definition
G4ANSTOecpssrLixsModel.hh:50
G4ANSTOecpssrMixsModel
Definition
G4ANSTOecpssrMixsModel.hh:50
G4Material
Definition
G4Material.hh:117
G4String
Definition
G4String.hh:62
G4VecpssrKModel::CalculateCrossSection
virtual G4double CalculateCrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrLiModel::CalculateL2CrossSection
virtual G4double CalculateL2CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrLiModel::CalculateL3CrossSection
virtual G4double CalculateL3CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrLiModel::CalculateL1CrossSection
virtual G4double CalculateL1CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrMiModel::CalculateM5CrossSection
virtual G4double CalculateM5CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrMiModel::CalculateM1CrossSection
virtual G4double CalculateM1CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrMiModel::CalculateM2CrossSection
virtual G4double CalculateM2CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrMiModel::CalculateM4CrossSection
virtual G4double CalculateM4CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VecpssrMiModel::CalculateM3CrossSection
virtual G4double CalculateM3CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)=0
G4VhShellCrossSection
Definition
G4VhShellCrossSection.hh:61
G4ecpssrBaseKxsModel
Definition
G4ecpssrBaseKxsModel.hh:38
G4ecpssrBaseLixsModel
Definition
G4ecpssrBaseLixsModel.hh:53
G4ecpssrFormFactorKxsModel
Definition
G4ecpssrFormFactorKxsModel.hh:49
G4ecpssrFormFactorLixsModel
Definition
G4ecpssrFormFactorLixsModel.hh:48
G4ecpssrFormFactorMixsModel
Definition
G4ecpssrFormFactorMixsModel.hh:49
G4teoCrossSection::SetTotalCS
void SetTotalCS(G4double) override
Definition
G4teoCrossSection.cc:194
G4teoCrossSection::CrossSection
G4double CrossSection(G4int Z, G4AtomicShellEnumerator shell, G4double incidentEnergy, G4double mass, const G4Material *mat) override
Definition
G4teoCrossSection.cc:122
G4teoCrossSection::GetCrossSection
std::vector< G4double > GetCrossSection(G4int Z, G4double incidentEnergy, G4double mass, G4double deltaEnergy=0, const G4Material *mat=nullptr) override
Definition
G4teoCrossSection.cc:96
G4teoCrossSection::Probabilities
std::vector< G4double > Probabilities(G4int Z, G4double incidentEnergy, G4double mass, G4double deltaEnergy=0, const G4Material *mat=nullptr) override
Definition
G4teoCrossSection.cc:175
G4teoCrossSection::~G4teoCrossSection
virtual ~G4teoCrossSection()
Definition
G4teoCrossSection.cc:87
G4teoCrossSection::G4teoCrossSection
G4teoCrossSection(const G4String &name)
Definition
G4teoCrossSection.cc:54
globals.hh
geant4-v11.2.2
source
processes
electromagnetic
lowenergy
src
G4teoCrossSection.cc
Generated by
1.12.0