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: G4SBBremTable 33 // 34 // Author: Mihaly Novak 35 // 36 // Creation date: 15.07.2018 37 // 38 // Modifications: 39 // 40 // Class description: 41 // 42 // Utility class to handle sampling tables for 43 // strahlung differential cross sections. It m 44 // faster than the rejection) sampling of the 45 // interactions. An object from this class is 46 // Seltzer-Berger model for e-/e+ bremsstrahlu 47 // that one object from this class can handle 48 // e+ correction in the SampleEnergyTransfer m 49 // 50 // ------------------------------------------- 51 52 #ifndef G4SBBremTable_h 53 #define G4SBBremTable_h 1 54 55 #include "globals.hh" 56 #include "G4String.hh" 57 58 #include <vector> 59 60 // forward declar 61 class G4MaterialCutsCouple; 62 63 class G4SBBremTable { 64 65 public: 66 // CTR/DTR 67 G4SBBremTable(); 68 69 ~G4SBBremTable(); 70 71 // loads and init sampling tables: lowe/hig 72 // limits of the corresponding Seltzerberge 73 void Initialize(const G4double lowe, const 74 75 // clean away all sampling tables and makes 76 void ClearSamplingTables(); 77 78 // run-time method to sample energy transfe 79 double SampleEnergyTransfer(const G4double 80 const G4double 81 const G4int 82 const bool 83 84 // used only for development: print out tab 85 // void Dump(); 86 87 private: 88 89 void BuildSamplingTables(); 90 91 void InitSamplingTables(); 92 93 void LoadSTGrid(); 94 95 void LoadSamplingTables(G4int iz); 96 97 void ReadCompressedFile(const G4String &fna 98 99 private: 100 101 // Sampling-Table point: describes one [E_i] 102 struct STPoint { 103 G4double fCum; // value of the cumulati 104 G4double fParA; // rational function app 105 G4double fParB; // rational function app 106 }; 107 108 // Sampling-Table: describes one [E_j] e- en 109 struct STable { 110 // cumulative values for the kappa-cuts: k 111 std::vector<G4double> fCumCutValues; 112 // as many STPoint-s as kappa values 113 std::vector<STPoint> fSTable; 114 }; 115 116 // Sampling-Tables for a given Z: 117 // describes all tables (i.e. for all e- ene 118 struct SamplingTablePerZ { 119 SamplingTablePerZ() : fNumGammaCuts(0), fM 120 size_t fNumGammaCuts; / 121 G4int fMinElEnergyIndx; / 122 G4int fMaxElEnergyIndx; / 123 std::vector<STable*> fTablesPerEnergy; / 124 //the different gamma-cut values that are 125 std::vector<G4double> fGammaECuts; 126 std::vector<G4double> fLogGammaECuts; 127 // the couple index element stores the cor 128 std::vector<size_t> fMatCutIndxToGamCutI 129 // temporary vector to store some indecis 130 std::vector< std::vector<size_t> > fGamC 131 }; 132 133 // simple linear search: most of the time fa 134 G4int LinSearch(const std::vector<STPoint>& 135 const G4int size, 136 const G4double val); 137 138 private: 139 140 // pre-prepared sampling tables are availabl 141 G4int fMaxZet; 142 G4int fNumElEnergy 143 G4int fNumKappa; 144 145 // min/max electron kinetic energy usage lim 146 G4double fUsedLowEene 147 G4double fUsedHighEen 148 G4double fLogMinElEne 149 G4double fILDeltaElEn 150 151 // e- kinetic energy and reduced photon ener 152 std::vector<G4double> fElEnergyVec 153 std::vector<G4double> fLElEnergyVe 154 std::vector<G4double> fKappaVect; 155 std::vector<G4double> fLKappaVect; 156 157 // container to store samplingtables per Z ( 158 std::vector<SamplingTablePerZ*> fSBSamplingT 159 160 }; 161 162 #endif 163