ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4GSPWACorrections.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4GSPWACorrections.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: G4GSPWACorrections
32 //
33 // Author: Mihaly Novak
34 //
35 // Creation date: 17.10.2017
36 //
37 // Modifications:
38 //
39 // Class description: class to describe and store correction factors to the
40 // integrated quantities of G4GoudsmitSaundersonMscModel (screening parameter,
41 // first and second moments) derived by using accurate Dirac-PWA based
42 // integrated quantities.
43 //
44 // ----------------------------------------------------------------------------
45 
46 #ifndef G4GSPWACorrections_h
47 #define G4GSPWACorrections_h 1
48 
50 
51 #include "globals.hh"
52 
53 #include <vector>
54 #include <string>
55 #include <sstream>
56 
57 class G4Material;
58 class G4Element;
59 
60 
62 public:
63  G4GSPWACorrections(G4bool iselectron=true);
64 
66 
67  void Initialise();
68 
69  void GetPWACorrectionFactors(G4double logekin, G4double beta2, G4int matindx,
70  G4double &corToScr, G4double &corToQ1, G4double &corToG2PerG1);
71 private:
72  void InitDataPerElement();
73 
74  void InitDataPerMaterials();
75 
76  void LoadDataElement(const G4Element*);
77 
78  void InitDataMaterial(const G4Material*);
79 
80  void ClearDataPerElement();
81 
82  void ClearDataPerMaterial();
83 
84  // either per material or per Z
85  struct DataPerMaterial {
86  std::vector<G4double> fCorScreening; // correction factor to Moliere screening parameter
87  std::vector<G4double> fCorFirstMoment; // correction factor to first moment
88  std::vector<G4double> fCorSecondMoment; // correction factor to second
89  };
90 
91 
92 // data members
93 private:
95  static constexpr G4int gMaxZet = 98; // max. Z for which correction data were computed (98)
96  static constexpr G4int gNumEkin = 31; // number of kinetic energy grid points for Mott correction
97  static constexpr G4int gNumBeta2 = 16; // \beta^2 values between [fMinBeta2-fMaxBeta2]
98  static constexpr G4double gMinEkin = 1.*CLHEP::keV; // minimum kinetic energy value
99  static constexpr G4double gMidEkin = 100.*CLHEP::keV; // kinetic energy at the border of the E_{kin}-\beta^2 grids
100  static constexpr G4double gMaxBeta2 = 0.9999; // maximum \beta^2 value
101  //
102  G4double fMaxEkin; // from max fMaxBeta2 = 0.9999 (~50.5889 [MeV])
103  G4double fLogMinEkin; // \ln[fMinEkin]
104  G4double fInvLogDelEkin; // 1/[\ln(fMidEkin/fMinEkin)/(fNumEkin-fNumBeta2)]
105  G4double fMinBeta2; // <= E_{kin}=100 [keV] (~0.300546)
106  G4double fInvDelBeta2; // 1/[(fMaxBeta2-fMinBeta2)/(fNumBeta2-1)]
107  //
108  static const std::string gElemSymbols[];
109  //
110  std::vector<DataPerMaterial*> fDataPerElement; // size will be gMaxZet+1; won't be null only at used Z indices
111  std::vector<DataPerMaterial*> fDataPerMaterial; // size will #materials; won't be null only at used mat. indices
112 
113 };
114 
115 #endif