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
G4PAIxSection.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4PAIxSection.hh
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
// G4PAIxSection.hh -- header file
30
//
31
// GEANT 4 class header file --- Copyright CERN 1995
32
// CERB Geneva Switzerland
33
//
34
// for information related to this code, please, contact
35
// CERN, CN Division, ASD Group
36
//
37
// Preparation of ionizing collision cross section according to Photo Absorption
38
// Ionization (PAI) model for simulation of ionization energy losses in very thin
39
// absorbers. Author: Vladimir.Grichine@cern.ch
40
//
41
// History:
42
//
43
// 28.10.11, V. Ivanchenko: Migration of exceptions to the new design
44
// 19.10.03, V. Grichine: Integral dEdx was added for G4PAIModel class
45
// 13.05.03, V. Grichine: Numerical instability was fixed in SumOverInterval/Border
46
// functions
47
// 10.02.02, V. Grichine: New functions and arrays/gets for Cerenkov and
48
// plasmon collisions dN/dx
49
// 27.10.99, V. Grichine: Bug fixed in constructors, 3rd constructor and
50
// GetStepEnergyLoss(step) were added, fDelta = 0.005
51
// 30.11.97, V. Grichine: 2nd version
52
// 11.06.97, V. Grichine: 1st version
53
54
#ifndef G4PAIXSECTION_HH
55
#define G4PAIXSECTION_HH
56
57
#include "
G4ios.hh
"
58
#include "
globals.hh
"
59
#include "
Randomize.hh
"
60
61
#include"
G4SandiaTable.hh
"
62
63
class
G4MaterialCutsCouple
;
64
class
G4Sandiatable;
65
66
67
class
G4PAIxSection
68
{
69
public
:
70
// Constructors
71
G4PAIxSection
();
72
G4PAIxSection
(
G4MaterialCutsCouple
* matCC);
73
74
G4PAIxSection
(
G4int
materialIndex,
75
G4double
maxEnergyTransfer );
76
77
G4PAIxSection
(
G4int
materialIndex,
// for proton loss table
78
G4double
maxEnergyTransfer,
79
G4double
betaGammaSq ,
80
G4double
** photoAbsCof,
G4int
intNumber );
81
82
G4PAIxSection
(
G4int
materialIndex,
// test constructor
83
G4double
maxEnergyTransfer,
84
G4double
betaGammaSq );
85
86
~G4PAIxSection
();
87
88
void
Initialize
(
const
G4Material
*
material
,
G4double
maxEnergyTransfer,
89
G4double
betaGammaSq,
G4SandiaTable
*);
90
91
// General control functions
92
93
void
ComputeLowEnergyCof
(
const
G4Material
* material);
94
void
ComputeLowEnergyCof
();
95
96
void
InitPAI
();
97
98
void
NormShift
(
G4double
betaGammaSq );
99
100
void
SplainPAI
(
G4double
betaGammaSq );
101
102
// Physical methods
103
104
G4double
RutherfordIntegral
(
G4int
intervalNumber,
105
G4double
limitLow,
106
G4double
limitHigh );
107
108
G4double
ImPartDielectricConst
(
G4int
intervalNumber,
109
G4double
energy
);
110
111
G4double
GetPhotonRange
(
G4double
energy );
112
G4double
GetElectronRange
(
G4double
energy );
113
114
G4double
RePartDielectricConst
(
G4double
energy);
115
116
G4double
DifPAIxSection
(
G4int
intervalNumber,
117
G4double
betaGammaSq );
118
119
G4double
PAIdNdxCerenkov
(
G4int
intervalNumber,
120
G4double
betaGammaSq );
121
G4double
PAIdNdxMM
(
G4int
intervalNumber,
122
G4double
betaGammaSq );
123
124
G4double
PAIdNdxPlasmon
(
G4int
intervalNumber,
125
G4double
betaGammaSq );
126
127
G4double
PAIdNdxResonance
(
G4int
intervalNumber,
128
G4double
betaGammaSq );
129
130
131
void
IntegralPAIxSection
();
132
void
IntegralCerenkov
();
133
void
IntegralMM
();
134
void
IntegralPlasmon
();
135
void
IntegralResonance
();
136
137
G4double
SumOverInterval
(
G4int
intervalNumber);
138
G4double
SumOverIntervaldEdx
(
G4int
intervalNumber);
139
G4double
SumOverInterCerenkov
(
G4int
intervalNumber);
140
G4double
SumOverInterMM
(
G4int
intervalNumber);
141
G4double
SumOverInterPlasmon
(
G4int
intervalNumber);
142
G4double
SumOverInterResonance
(
G4int
intervalNumber);
143
144
G4double
SumOverBorder
(
G4int
intervalNumber,
145
G4double
energy );
146
G4double
SumOverBorderdEdx
(
G4int
intervalNumber,
147
G4double
energy );
148
G4double
SumOverBordCerenkov
(
G4int
intervalNumber,
149
G4double
energy );
150
G4double
SumOverBordMM
(
G4int
intervalNumber,
151
G4double
energy );
152
G4double
SumOverBordPlasmon
(
G4int
intervalNumber,
153
G4double
energy );
154
G4double
SumOverBordResonance
(
G4int
intervalNumber,
155
G4double
energy );
156
157
G4double
GetStepEnergyLoss
(
G4double
step
);
158
G4double
GetStepCerenkovLoss
(
G4double
step );
159
G4double
GetStepMMLoss
(
G4double
step );
160
G4double
GetStepPlasmonLoss
(
G4double
step );
161
G4double
GetStepResonanceLoss
(
G4double
step );
162
163
G4double
GetEnergyTransfer
();
164
G4double
GetCerenkovEnergyTransfer
();
165
G4double
GetMMEnergyTransfer
();
166
G4double
GetPlasmonEnergyTransfer
();
167
G4double
GetResonanceEnergyTransfer
();
168
G4double
GetRutherfordEnergyTransfer
();
169
170
// Inline access functions
171
172
G4int
GetNumberOfGammas
()
const
{
return
fNumberOfGammas
; }
173
174
G4int
GetSplineSize
()
const
{
return
fSplineNumber
; }
175
176
G4int
GetIntervalNumber
()
const
{
return
fIntervalNumber
; }
177
178
G4double
GetEnergyInterval
(
G4int
i){
return
fEnergyInterval
[i]; }
179
180
G4double
GetDifPAIxSection
(
G4int
i){
return
fDifPAIxSection
[i]; }
181
G4double
GetPAIdNdxCerenkov
(
G4int
i){
return
fdNdxCerenkov
[i]; }
182
G4double
GetPAIdNdxMM
(
G4int
i){
return
fdNdxMM
[i]; }
183
G4double
GetPAIdNdxPlasmon
(
G4int
i){
return
fdNdxPlasmon
[i]; }
184
G4double
GetPAIdNdxResonance
(
G4int
i){
return
fdNdxResonance
[i]; }
185
186
G4double
GetMeanEnergyLoss
()
const
{
return
fIntegralPAIxSection
[0]; }
187
G4double
GetMeanCerenkovLoss
()
const
{
return
fIntegralCerenkov
[0]; }
188
G4double
GetMeanMMLoss
()
const
{
return
fIntegralMM
[0]; }
189
G4double
GetMeanPlasmonLoss
()
const
{
return
fIntegralPlasmon
[0]; }
190
G4double
GetMeanResonanceLoss
()
const
{
return
fIntegralResonance
[0]; }
191
192
G4double
GetNormalizationCof
()
const
{
return
fNormalizationCof
; }
193
194
G4double
GetLowEnergyCof
()
const
{
return
fLowEnergyCof
; }
195
196
G4double
GetLorentzFactor
(
G4int
i)
const
;
197
198
inline
void
SetVerbose
(
G4int
v
) {
fVerbose
=
v
; };
199
200
201
inline
G4double
GetPAItable
(
G4int
i,
G4int
j)
const
;
202
203
inline
G4double
GetSplineEnergy
(
G4int
i)
const
;
204
205
inline
G4double
GetIntegralPAIxSection
(
G4int
i)
const
;
206
inline
G4double
GetIntegralPAIdEdx
(
G4int
i)
const
;
207
inline
G4double
GetIntegralCerenkov
(
G4int
i)
const
;
208
inline
G4double
GetIntegralMM
(
G4int
i)
const
;
209
inline
G4double
GetIntegralPlasmon
(
G4int
i)
const
;
210
inline
G4double
GetIntegralResonance
(
G4int
i)
const
;
211
212
private
:
213
214
void
CallError
(
G4int
i,
const
G4String
& methodName)
const
;
215
216
G4PAIxSection
&
operator=
(
const
G4PAIxSection
&
right
) =
delete
;
217
G4PAIxSection
(
const
G4PAIxSection
&) =
delete
;
218
219
// Local class constants
220
221
static
const
G4double
fDelta
;
// energy shift from interval border = 0.001
222
static
const
G4double
fError
;
// error in lin-log approximation = 0.005
223
224
static
G4int
fNumberOfGammas
;
// = 111;
225
static
const
G4double
fLorentzFactor
[112];
// static gamma array
226
227
static
228
const
G4int
fRefGammaNumber
;
//The number of gamma for creation of spline (15)
229
230
G4int
fIntervalNumber
;
// The number of energy intervals
231
G4double
fNormalizationCof
;
// Normalization cof for PhotoAbsorptionXsection
232
233
// G4double fBetaGammaSq; // (beta*gamma)^2
234
235
G4int
fMaterialIndex
;
// current material index
236
G4double
fDensity
;
// Current density
237
G4double
fElectronDensity
;
// Current electron (number) density
238
G4double
fLowEnergyCof
;
// Correction cof for low energy region
239
G4int
fSplineNumber
;
// Current size of spline
240
G4int
fVerbose
;
// verbose flag
241
242
// Arrays of Sandia coefficients
243
244
G4OrderedTable
*
fMatSandiaMatrix
;
245
246
G4SandiaTable
*
fSandia
;
247
248
G4DataVector
fEnergyInterval
;
249
G4DataVector
fA1
;
250
G4DataVector
fA2
;
251
G4DataVector
fA3
;
252
G4DataVector
fA4
;
253
254
static
255
const
G4int
fMaxSplineSize
;
// Max size of output splain arrays = 500
256
257
G4DataVector
fSplineEnergy
;
// energy points of splain
258
G4DataVector
fRePartDielectricConst
;
// Real part of dielectric const
259
G4DataVector
fImPartDielectricConst
;
// Imaginary part of dielectric const
260
G4DataVector
fIntegralTerm
;
// Integral term in PAI cross section
261
G4DataVector
fDifPAIxSection
;
// Differential PAI cross section
262
G4DataVector
fdNdxCerenkov
;
// dNdx of Cerenkov collisions
263
G4DataVector
fdNdxPlasmon
;
// dNdx of Plasmon collisions
264
G4DataVector
fdNdxMM
;
// dNdx of MM-Cerenkov collisions
265
G4DataVector
fdNdxResonance
;
// dNdx of Resonance collisions
266
267
G4DataVector
fIntegralPAIxSection
;
// Integral PAI cross section ?
268
G4DataVector
fIntegralPAIdEdx
;
// Integral PAI dEdx ?
269
G4DataVector
fIntegralCerenkov
;
// Integral Cerenkov N>omega ?
270
G4DataVector
fIntegralPlasmon
;
// Integral Plasmon N>omega ?
271
G4DataVector
fIntegralMM
;
// Integral MM N>omega ?
272
G4DataVector
fIntegralResonance
;
// Integral resonance N>omega ?
273
274
G4double
fPAItable
[500][112];
// Output array
275
276
};
277
279
//
280
281
inline
G4double
G4PAIxSection::GetPAItable
(
G4int
i,
G4int
j)
const
282
{
283
return
fPAItable
[i][j];
284
}
285
286
inline
G4double
G4PAIxSection::GetSplineEnergy
(
G4int
i)
const
287
{
288
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetSplineEnergy"
); }
289
return
fSplineEnergy
[i];
290
}
291
292
inline
G4double
G4PAIxSection::GetIntegralPAIxSection
(
G4int
i)
const
293
{
294
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralPAIxSection"
); }
295
return
fIntegralPAIxSection
[i];
296
}
297
298
inline
G4double
G4PAIxSection::GetIntegralPAIdEdx
(
G4int
i)
const
299
{
300
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralPAIdEdx"
); }
301
return
fIntegralPAIdEdx
[i];
302
}
303
304
inline
G4double
G4PAIxSection::GetIntegralCerenkov
(
G4int
i)
const
305
{
306
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralCerenkov"
); }
307
return
fIntegralCerenkov
[i];
308
}
309
310
inline
G4double
G4PAIxSection::GetIntegralMM
(
G4int
i)
const
311
{
312
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralMM"
); }
313
return
fIntegralMM
[i];
314
}
315
316
inline
G4double
G4PAIxSection::GetIntegralPlasmon
(
G4int
i)
const
317
{
318
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralPlasmon"
); }
319
return
fIntegralPlasmon
[i];
320
}
321
322
inline
G4double
G4PAIxSection::GetIntegralResonance
(
G4int
i)
const
323
{
324
if
(i < 1 || i >
fSplineNumber
) {
CallError
(i,
"GetIntegralResonance"
); }
325
return
fIntegralResonance
[i];
326
}
327
328
#endif
329
330
// ----------------- end of G4PAIxSection header file -------------------
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
include
G4PAIxSection.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration