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
G4GSMottCorrection.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4GSMottCorrection.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
// GEANT4 Class header file
30
//
31
// File name: G4GSMottCorrection
32
//
33
// Author: Mihaly Novak
34
//
35
// Creation date: 23.08.2017
36
//
37
// Modifications:
38
//
39
// Class description:
40
// An object of this calss is used in the G4GoudsmitSaundersonTable when Mott-correction
41
// was required by the user in the G4GoudsmitSaundersonMscModel.
42
// The class is responsible to handle pre-computed Mott correction (rejection) functions
43
// obtained as a ratio of GS angular distributions computed based on the Screened-Rutherford
44
// DCS to GS angular distributions computed based on a more accurate corrected DCS_{cor}.
45
// The DCS used to compute the accurate Goudsmit-Saunderson angular distributions is [1]:
46
// DCS_{cor} = DCS_{SR}x[ DCS_{R}/DCS_{Mott}] where :
47
// # DCS_{SR} is the relativistic Screened-Rutherford DCS (first Born approximate
48
// solution of the Klein-Gordon i.e. relativistic Schrodinger equation =>
49
// scattering of spinless e- on exponentially screened Coulomb potential)
50
// note: the default (without using Mott-correction) GS angular distributions
51
// are based on this DCS_{SR} with Moliere's screening parameter!
52
// # DCS_{R} is the Rutherford DCS which is the same as above but without
53
// screening
54
// # DCS_{Mott} is the Mott DCS i.e. solution of the Dirac equation with a bare
55
// Coulomb potential i.e. scattering of particles with spin (e- or e+) on a
56
// point-like unscreened Coulomb potential [2]
57
// # moreover, the screening parameter of the DCS_{cor} was determined such that
58
// the DCS_{cor} with this corrected screening parameter reproduce the first
59
// transport cross sections obtained from the corresponding most accurate DCS [3].
60
// Unlike the default GS, the Mott-corrected angular distributions are particle type
61
// (different for e- and e+ <= the DCS_{Mott} and the screening correction) and target
62
// (Z and material) dependent.
63
//
64
// References:
65
// [2] I.Kawrakow, E.Mainegra-Hing, D.W.O.Rogers, F.Tessier,B.R.B.Walters, NRCC
66
// Report PIRS-701 (2013)
67
// [2] N.F. Mott, Proc. Roy. Soc. (London) A 124 (1929) 425.
68
// [3] F.Salvat, A.Jablonski, C.J. Powell, CPC 165(2005) 157-190
69
//
70
// -----------------------------------------------------------------------------
71
72
#ifndef G4GSMottCorrection_h
73
#define G4GSMottCorrection_h 1
74
75
#include <
CLHEP/Units/SystemOfUnits.h
>
76
77
#include "
globals.hh
"
78
79
#include <vector>
80
#include <string>
81
#include <sstream>
82
83
class
G4Material
;
84
class
G4Element
;
85
86
87
class
G4GSMottCorrection
{
88
public
:
89
G4GSMottCorrection
(
G4bool
iselectron=
true
);
90
91
~G4GSMottCorrection
();
92
93
void
Initialise
();
94
95
void
GetMottCorrectionFactors
(
G4double
logekin,
G4double
beta2,
G4int
matindx,
96
G4double
&mcToScr,
G4double
&mcToQ1,
G4double
&mcToG2PerG1);
97
98
G4double
GetMottRejectionValue
(
G4double
logekin,
G4double
G4beta2,
G4double
q1,
G4double
cost,
99
G4int
matindx,
G4int
&ekindx,
G4int
&deltindx);
100
101
static
G4int
GetMaxZet
() {
return
gMaxZet
; }
102
103
private
:
104
void
InitMCDataPerElement
();
105
106
void
InitMCDataPerMaterials
();
107
108
void
LoadMCDataElement
(
const
G4Element
*);
109
110
void
ReadCompressedFile
(std::string
fname
, std::istringstream &iss);
111
112
void
InitMCDataMaterial
(
const
G4Material
*);
113
//
114
// dat structures
115
struct
DataPerDelta
{
116
G4double
fSA
;
// a,b,c,d spline interpolation parameters for the last \sin(0.5\theta) bin
117
G4double
fSB
;
118
G4double
fSC
;
119
G4double
fSD
;
120
G4double
*
fRejFuntion
;
// rejection func. for a given E_{kin}, \delta, e^-/e^+ over the \sin(0.5\theta) grid
121
};
122
123
struct
DataPerEkin
{
124
G4double
fMCScreening
;
// correction factor to Moliere screening parameter
125
G4double
fMCFirstMoment
;
// correction factor to first moment
126
G4double
fMCSecondMoment
;
// correction factor to second
127
DataPerDelta
**
fDataPerDelta
;
// per delta value data structure for each delta values
128
};
129
130
// either per material or per Z
131
struct
DataPerMaterial
{
132
DataPerEkin
**
fDataPerEkin
;
// per kinetic energy data structure for each kinetic energy value
133
};
134
//
135
void
AllocateDataPerMaterial
(
DataPerMaterial
*);
136
void
DeAllocateDataPerMaterial
(
DataPerMaterial
*);
137
void
ClearMCDataPerElement
();
138
void
ClearMCDataPerMaterial
();
139
//
140
// data members:
141
// - Mott correction data are computed over a :
142
// I. Kinetic energy grid [both rejection functions and correction factors]:
143
// 1. kinetic energy grid from 1[keV] - 100[keV] with log-spacing 16 points:
144
// # linear interpolation on \ln[E_{kin}] will be used
145
// 2. \beta^2 grid from E_{kin} = 100[keV](~0.300546) - \beta^2=0.9999(~50.5889MeV]) with linear spacing 16 points:
146
// # linear interpolation on \beta^2 will be used
147
// 3. the overall kinetic energy grid is from E_{kin}=1[keV] - E_{kin}<=\beta^2=0.9999(~50.5889MeV]) with 31 points
148
// II. Delta value grid [rejection functions at a given kinetic energy(also depends on \theta;Z,e-/e+)]:
149
// 1. \delta=2 Q_{1SR} (\eta_{MCcor})/ [1-2 Q_{1SR} (\eta_{MCcor})] where Q_{1SR} is the first moment i.e.
150
// Q_{1SR}(\eta_{MCcor}) =s/\lambda_{el}G_{1SR}(\eta_{MCcor}) where s/\lambda_{el} is the mean number of elastic
151
// scattering along the path s and G_{1SR}(\eta_{MCcor}) is the first, Screened-Rutherford transport coefficient
152
// but computed by using the Mott-corrected Moliere screening parameter
153
// 2. the delta value grid is from [0(1e-3) - 0.9] with linear spacing of 28 points:
154
// # linear interpolation will be used on \delta
155
// III. \sin(0.5\theta) grid[rejection function at a given kinetic energy - delta value pair (also depends on Z,e-/e+)]:
156
// 1. 32 \sin(0.5\theta) pints between [0,1] with linear spacing: # linear interpolation on \sin(0.5\theta) will
157
// be used exept the last bin where spline is used (the corresponding 4 spline parameters are also stored)
158
private
:
159
G4bool
fIsElectron
;
160
static
constexpr
G4int
gNumEkin
= 31;
// number of kinetic energy grid points for Mott correction
161
static
constexpr
G4int
gNumBeta2
= 16;
// \beta^2 values between [fMinBeta2-fMaxBeta2]
162
static
constexpr
G4int
gNumDelta
= 28;
// \delta values between [0(1.e-3)-0.9]
163
static
constexpr
G4int
gNumAngle
= 32;
//
164
static
constexpr
G4int
gMaxZet
= 98;
// max. Z for which Mott-correction data were computed (98)
165
static
constexpr
G4double
gMinEkin
= 1.*
CLHEP::keV
;
// minimum kinetic energy value
166
static
constexpr
G4double
gMidEkin
= 100.*
CLHEP::keV
;
// kinetic energy at the border of the E_{kin}-\beta^2 grids
167
static
constexpr
G4double
gMaxBeta2
= 0.9999;
// maximum \beta^2 value
168
static
constexpr
G4double
gMaxDelta
= 0.9;
// maximum \delta value (the minimum is 0(1.e-3))
169
//
170
G4double
fMaxEkin
;
// from max fMaxBeta2 = 0.9999 (~50.5889 [MeV])
171
G4double
fLogMinEkin
;
// \ln[fMinEkin]
172
G4double
fInvLogDelEkin
;
// 1/[\ln(fMidEkin/fMinEkin)/(fNumEkin-fNumBeta2)]
173
G4double
fMinBeta2
;
// <= E_{kin}=100 [keV] (~0.300546)
174
G4double
fInvDelBeta2
;
// 1/[(fMaxBeta2-fMinBeta2)/(fNumBeta2-1)]
175
G4double
fInvDelDelta
;
// 1/[0.9/(fNumDelta-1)]
176
G4double
fInvDelAngle
;
// 1/[(1-0)/fNumAngle-1]
177
//
178
static
const
std::string
gElemSymbols
[];
179
//
180
std::vector<DataPerMaterial*>
fMCDataPerElement
;
// size will be gMaxZet+1; won't be null only at used Z indices
181
std::vector<DataPerMaterial*>
fMCDataPerMaterial
;
// size will #materials; won't be null only at used mat. indices
182
};
183
184
#endif // G4GSMottCorrection_h
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
include
G4GSMottCorrection.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration