Geant4-11
G4GSMottCorrection.hh
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// 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
76
77#include "globals.hh"
78
79#include <vector>
80#include <string>
81#include <sstream>
82
83class G4Material;
84class G4Element;
85
86
88public:
89 G4GSMottCorrection(G4bool iselectron=true);
90
92
93 void Initialise();
94
95 void GetMottCorrectionFactors(G4double logekin, G4double beta2, G4int matindx,
96 G4double &mcToScr, G4double &mcToQ1, G4double &mcToG2PerG1);
97
99 G4int matindx, G4int &ekindx, G4int &deltindx);
100
101 static G4int GetMaxZet() { return gMaxZet; }
102
103private:
105
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
116 G4double fSA; // a,b,c,d spline interpolation parameters for the last \sin(0.5\theta) bin
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
132 DataPerEkin **fDataPerEkin; // per kinetic energy data structure for each kinetic energy value
133 };
134 //
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)
158private:
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
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void ReadCompressedFile(std::string fname, std::istringstream &iss)
static constexpr G4int gNumAngle
std::vector< DataPerMaterial * > fMCDataPerMaterial
void LoadMCDataElement(const G4Element *)
G4GSMottCorrection(G4bool iselectron=true)
static const std::string gElemSymbols[]
void GetMottCorrectionFactors(G4double logekin, G4double beta2, G4int matindx, G4double &mcToScr, G4double &mcToQ1, G4double &mcToG2PerG1)
static constexpr G4double gMidEkin
static constexpr G4int gNumDelta
static constexpr G4int gNumEkin
static constexpr G4double gMaxDelta
static constexpr G4double gMinEkin
static constexpr G4int gNumBeta2
static G4int GetMaxZet()
static constexpr G4int gMaxZet
void DeAllocateDataPerMaterial(DataPerMaterial *)
G4double GetMottRejectionValue(G4double logekin, G4double G4beta2, G4double q1, G4double cost, G4int matindx, G4int &ekindx, G4int &deltindx)
void AllocateDataPerMaterial(DataPerMaterial *)
void InitMCDataMaterial(const G4Material *)
std::vector< DataPerMaterial * > fMCDataPerElement
static constexpr G4double gMaxBeta2
static constexpr double keV
string fname
Definition: test.py:308