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 // 27 // ------------------------------------------- 28 // 29 // GEANT4 Class header file 30 // 31 // 32 // File name: G4eBremsstrahlungRelModel 33 // extention of standard G4eBre 34 // 35 // Author: Andreas Schaelicke 36 // 37 // Creation date: 28.03.2008 38 // 39 // Modifications: 40 // 41 // 15.07.18 introduced data structures to sto 42 // dent data for faster run-time com 43 // 44 // Class Description: 45 // 46 // Implementation of energy loss for gamma emi 47 // positrons including an improved version of 48 49 // ------------------------------------------- 50 // 51 52 #ifndef G4eBremsstrahlungRelModel_h 53 #define G4eBremsstrahlungRelModel_h 1 54 55 #include "G4VEmModel.hh" 56 #include <memory> 57 58 class G4ParticleChangeForLoss; 59 60 class G4eBremsstrahlungRelModel : public G4VEm 61 62 public: 63 64 explicit G4eBremsstrahlungRelModel(const G4P 65 const G4S 66 67 ~G4eBremsstrahlungRelModel() override; 68 69 void Initialise(const G4ParticleDefinition*, 70 71 void InitialiseLocal(const G4ParticleDefinit 72 G4VEmModel* masterModel 73 74 G4double ComputeDEDXPerVolume(const G4Materi 75 const G4Partic 76 G4double ekin, 77 G4double cutEn 78 79 G4double ComputeCrossSectionPerAtom(const G4 80 G4double 81 G4double 82 G4double 83 G4double 84 G4double 85 86 void SampleSecondaries(std::vector<G4Dynamic 87 const G4MaterialCutsC 88 const G4DynamicPartic 89 G4double cutEnergy, 90 G4double maxEnergy) o 91 92 void SetupForMaterial(const G4ParticleDefini 93 const G4Material*, G4d 94 95 G4double MinPrimaryEnergy(const G4Material*, 96 const G4ParticleDe 97 G4double cutEnergy 98 99 protected: 100 101 virtual G4double ComputeDXSectionPerAtom(G4d 102 103 void SetParticle(const G4ParticleDefinition* 104 105 private: 106 107 G4double ComputeBremLoss(G4double cutEnergy) 108 109 G4double ComputeXSectionPerAtom(G4double cut 110 111 G4double ComputeRelDXSectionPerAtom(G4double 112 113 // init special data per element i.e. per Z 114 void InitialiseElementData(); 115 116 // methods for initialisation and run-time e 117 void InitLPMFunctions(); 118 119 void ComputeLPMfunctions(G4double& funcXiS, 120 G4double& funcGS, 121 G4double& funcPhiS, 122 const G4double egam 123 124 void GetLPMFunctions(G4double& lpmGs, 125 G4double& lpmPhis, 126 const G4double ss); 127 128 void ComputeLPMGsPhis(G4double& funcGS, 129 G4double& funcPhiS, 130 const G4double varShat 131 132 // for evaluating screening related function 133 void ComputeScreeningFunctions(G4double& phi 134 G4double& phi 135 G4double& psi 136 G4double& psi 137 const G4doubl 138 const G4doubl 139 // hide assignment operator and cctr 140 G4eBremsstrahlungRelModel& operator= 141 (const G4eBremsstrahlungRelModel& right) = d 142 G4eBremsstrahlungRelModel(const G4eBremsstr 143 144 private: 145 146 G4bool fIsUseCompleteSc 147 G4bool fIsInitializer = 148 G4bool fUseLPM = true; 149 150 protected: 151 152 G4bool fIsElectron = tr 153 G4bool fIsScatOffElectr 154 G4bool fIsLPMActive = f 155 // 156 G4int fCurrentIZ = 0; 157 const G4ParticleDefinition* fPrimaryParticle 158 G4ParticleDefinition* fGammaParticle = 159 G4ParticleChangeForLoss* fParticleChange 160 // cash 161 G4double fPrimaryParticle 162 G4double fPrimaryKinEnerg 163 G4double fPrimaryTotalEne 164 G4double fDensityFactor = 165 G4double fDensityCorr = 0 166 G4double fLowestKinEnergy 167 // scattering off electrons 168 G4double fNucTerm = 0.; 169 G4double fSumTerm = 0.; 170 171 private: 172 173 // LPM related members 174 G4double fLPMEnergyThresh 175 G4double fLPMEnergy; 176 177 protected: 178 179 static const G4double gBremFactor; 180 static const G4double gMigdalConstant; 181 182 private: 183 184 static const G4int gMaxZet; 185 // 186 static const G4double gLPMconstant; 187 // 188 static const G4double gXGL[8]; 189 static const G4double gWGL[8]; 190 static const G4double gFelLowZet[8]; 191 static const G4double gFinelLowZet[8]; 192 // 193 struct ElementData { 194 /** @brief \f$ \ln(Z) \f$ */ 195 G4double fLogZ; 196 /** @brief \f$ \ln(Z)/3 + f_c \f$ */ 197 G4double fFz; 198 /** @brief \f$ ((Fel-fc)+Finel*invZ)\f$ * 199 G4double fZFactor1; 200 /** @brief \f$ (Fel-fc)\f$ */ 201 G4double fZFactor11; 202 /** @brief \f$ (1.0+invZ)/12 \f$ */ 203 G4double fZFactor2; 204 // LPM variables 205 G4double fVarS1; 206 G4double fILVarS1; 207 G4double fILVarS1Cond; 208 // constant factors to the screening funct 209 G4double fGammaFactor; 210 G4double fEpsilonFactor; 211 }; 212 // 213 struct LPMFuncs { 214 LPMFuncs() : fIsInitialized(false), fISDel 215 G4bool fIsInitialized; 216 G4double fISDelta; 217 G4double fSLimit; 218 std::vector<G4double> fLPMFuncG; 219 std::vector<G4double> fLPMFuncPhi; 220 }; 221 // 222 static std::shared_ptr<LPMFuncs> gLPMFuncs() 223 static std::shared_ptr<std::vector<ElementDa 224 std::shared_ptr<LPMFuncs> fLPMFuncs; 225 std::shared_ptr<std::vector<ElementData*>> f 226 }; 227 228 #endif 229