Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4PAIySection.hh -- header file 27 // 28 // 29 // Preparation of ionizing collision cross sec 30 // Ionization (PAI) model for simulation of io 31 // absorbers. Author: Vladimir.Grichine@cern.c 32 // 33 // History: 34 // 35 // 01.10.07, V.Ivanchenko create using V.Grich 36 // 21.11.10, V.Grichine fVerbose and SetVerb 37 // 28.10.11, V.Ivanchenko Migration of excepti 38 39 #ifndef G4PAIYSECTION_HH 40 #define G4PAIYSECTION_HH 41 42 #include "G4ios.hh" 43 #include "globals.hh" 44 #include "Randomize.hh" 45 46 #include "G4SandiaTable.hh" 47 48 class G4PAIySection 49 { 50 public: 51 52 explicit G4PAIySection(); 53 54 ~G4PAIySection() = default; 55 56 void Initialize(const G4Material* material, 57 G4double betaGammaSq, G4Sand 58 59 void ComputeLowEnergyCof(const G4Material* m 60 61 void InitPAI(); 62 63 void NormShift( G4double betaGammaSq ); 64 65 void SplainPAI( G4double betaGammaSq ); 66 67 // Physical methods 68 G4double RutherfordIntegral( G4int intervalN 69 G4double limitL 70 G4double limitH 71 72 G4double ImPartDielectricConst( G4int interv 73 G4double ene 74 75 G4double RePartDielectricConst(G4double ener 76 77 G4double DifPAIySection( G4int intervalNumbe 78 G4double betaGammaS 79 80 G4double PAIdNdxCerenkov( G4int intervalNumb 81 G4double betaGamma 82 83 G4double PAIdNdxPlasmon( G4int intervalNumbe 84 G4double betaGammaS 85 86 void IntegralPAIySection(); 87 void IntegralCerenkov(); 88 void IntegralPlasmon(); 89 90 G4double SumOverInterval(G4int intervalNumbe 91 G4double SumOverIntervaldEdx(G4int intervalN 92 G4double SumOverInterCerenkov(G4int interval 93 G4double SumOverInterPlasmon(G4int intervalN 94 95 G4double SumOverBorder( G4int intervalNumber 96 G4double energy 97 G4double SumOverBorderdEdx( G4int intervalNu 98 G4double energy 99 G4double SumOverBordCerenkov( G4int interval 100 G4double energ 101 G4double SumOverBordPlasmon( G4int intervalN 102 G4double energy 103 104 G4double GetStepEnergyLoss( G4double step ); 105 G4double GetStepCerenkovLoss( G4double step 106 G4double GetStepPlasmonLoss( G4double step ) 107 108 G4double GetLorentzFactor(G4int j) const; 109 110 // Inline access functions 111 112 inline G4int GetNumberOfGammas() const { ret 113 114 inline G4int GetSplineSize() const { return 115 116 inline G4int GetIntervalNumber() const { ret 117 118 inline G4double GetEnergyInterval(G4int i){ 119 120 inline G4double GetDifPAIySection(G4int i){ 121 inline G4double GetPAIdNdxCrenkov(G4int i){ 122 inline G4double GetPAIdNdxPlasmon(G4int i){ 123 124 inline G4double GetMeanEnergyLoss() const {r 125 inline G4double GetMeanCerenkovLoss() const 126 inline G4double GetMeanPlasmonLoss() const { 127 128 inline G4double GetNormalizationCof() const 129 130 inline G4double GetPAItable(G4int i,G4int j) 131 132 inline G4double GetSplineEnergy(G4int i) con 133 134 inline G4double GetIntegralPAIySection(G4int 135 inline G4double GetIntegralPAIdEdx(G4int i) 136 inline G4double GetIntegralCerenkov(G4int i) 137 inline G4double GetIntegralPlasmon(G4int i) 138 139 inline void SetVerbose(G4int v) { fVerbose = 140 141 G4PAIySection & operator=(const G4PAIySectio 142 G4PAIySection(const G4PAIySection&) = delete 143 144 private : 145 146 void CallError(G4int i, const G4String& meth 147 148 // Local class constants 149 150 static const G4double fDelta; // energy shif 151 static const G4double fError; // error in li 152 153 static G4int fNumberOfGammas; // = 111; 154 static const G4double fLorentzFactor[112]; 155 156 static 157 const G4int fRefGammaNumber; // The number o 158 159 G4int fIntervalNumber ; // The number 160 G4double fNormalizationCof; // Normalizatio 161 162 G4double betaBohr; 163 G4double betaBohr4; 164 165 G4double fDensity; // Current den 166 G4double fElectronDensity; // Current ele 167 G4double fLowEnergyCof; // Correction 168 G4int fSplineNumber; // Current siz 169 G4int fVerbose; // verbose fla 170 171 G4SandiaTable* fSandia; 172 173 G4DataVector fEnergyInterval; 174 G4DataVector fA1; 175 G4DataVector fA2; 176 G4DataVector fA3; 177 G4DataVector fA4; 178 179 static 180 const G4int fMaxSplineSize; // Max size of 181 182 G4DataVector fSplineEnergy; // ener 183 G4DataVector fRePartDielectricConst; // Real 184 G4DataVector fImPartDielectricConst; // Imag 185 G4DataVector fIntegralTerm; // Inte 186 G4DataVector fDifPAIySection; // Diff 187 G4DataVector fdNdxCerenkov; // dNdx 188 G4DataVector fdNdxPlasmon; // dNdx 189 190 G4DataVector fIntegralPAIySection; // Inte 191 G4DataVector fIntegralPAIdEdx; // Inte 192 G4DataVector fIntegralCerenkov; // Inte 193 G4DataVector fIntegralPlasmon; // Inte 194 195 G4double fPAItable[500][112]; // Outp 196 }; 197 198 inline G4double G4PAIySection::GetPAItable(G4i 199 { 200 return fPAItable[i][j]; 201 } 202 203 inline G4double G4PAIySection::GetSplineEnergy 204 { 205 if(i < 1 || i > fSplineNumber) { CallError(i 206 return fSplineEnergy[i]; 207 } 208 209 inline G4double G4PAIySection::GetIntegralPAIy 210 { 211 if(i < 1 || i > fSplineNumber) { CallError(i 212 return fIntegralPAIySection[i]; 213 } 214 215 inline G4double G4PAIySection::GetIntegralPAId 216 { 217 if(i < 1 || i > fSplineNumber) { CallError(i 218 return fIntegralPAIdEdx[i]; 219 } 220 221 inline G4double G4PAIySection::GetIntegralCere 222 { 223 if(i < 1 || i > fSplineNumber) { CallError(i 224 return fIntegralCerenkov[i]; 225 } 226 227 inline G4double G4PAIySection::GetIntegralPlas 228 { 229 if(i < 1 || i > fSplineNumber) { CallError(i 230 return fIntegralPlasmon[i]; 231 } 232 233 #endif 234 235 // ----------------- end of G4PAIySection he 236