Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/standard/include/G4SBBremTable.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/standard/include/G4SBBremTable.hh (Version 11.3.0) and /processes/electromagnetic/standard/include/G4SBBremTable.hh (Version 10.6)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 // -------------------------------------------     27 // ----------------------------------------------------------------------------
 28 //                                                 28 //
 29 // GEANT4 Class header file                        29 // GEANT4 Class header file
 30 //                                                 30 //
 31 //                                                 31 //
 32 // File name:     G4SBBremTable                    32 // File name:     G4SBBremTable
 33 //                                                 33 //
 34 // Author:        Mihaly Novak                     34 // Author:        Mihaly Novak
 35 //                                                 35 //
 36 // Creation date: 15.07.2018                       36 // Creation date: 15.07.2018
 37 //                                                 37 //
 38 // Modifications:                                  38 // Modifications:
 39 //                                                 39 //
 40 // Class description:                              40 // Class description:
 41 //                                                 41 //
 42 // Utility class to handle sampling tables for     42 // Utility class to handle sampling tables for the Seltzer-Berger scalled brems-
 43 // strahlung differential cross sections. It m     43 // strahlung differential cross sections. It makes possible fast (significantly
 44 // faster than the rejection) sampling of the      44 // faster than the rejection) sampling of the emitted photon energy in case of
 45 // interactions. An object from this class is      45 // interactions. An object from this class is supposed to be a member of the
 46 // Seltzer-Berger model for e-/e+ bremsstrahlu     46 // Seltzer-Berger model for e-/e+ bremsstrahlung photon emission model. Note,
 47 // that one object from this class can handle      47 // that one object from this class can handle both e- and e+ cases (containes
 48 // e+ correction in the SampleEnergyTransfer m     48 // e+ correction in the SampleEnergyTransfer method only).
 49 //                                                 49 //
 50 // -------------------------------------------     50 // ----------------------------------------------------------------------------
 51                                                    51 
 52 #ifndef G4SBBremTable_h                            52 #ifndef G4SBBremTable_h
 53 #define G4SBBremTable_h 1                          53 #define G4SBBremTable_h 1
 54                                                    54 
 55 #include "globals.hh"                              55 #include "globals.hh"
 56 #include "G4String.hh"                             56 #include "G4String.hh"
 57                                                    57 
 58 #include <vector>                                  58 #include <vector>
 59                                                    59 
 60 // forward declar                                  60 // forward declar
 61 class G4MaterialCutsCouple;                        61 class G4MaterialCutsCouple;
 62                                                    62 
 63 class G4SBBremTable {                              63 class G4SBBremTable {
 64                                                    64 
 65 public:                                            65 public:
 66    // CTR/DTR                                      66    // CTR/DTR
 67    G4SBBremTable();                                67    G4SBBremTable();
 68                                                    68 
 69   ~G4SBBremTable();                                69   ~G4SBBremTable();
 70                                                    70 
 71    // loads and init sampling tables: lowe/hig     71    // loads and init sampling tables: lowe/highe are the low/high energy usage
 72    // limits of the corresponding Seltzerberge     72    // limits of the corresponding Seltzerberger-model.
 73    void Initialize(const G4double lowe, const      73    void Initialize(const G4double lowe, const G4double highe);
 74                                                    74 
 75    // clean away all sampling tables and makes     75    // clean away all sampling tables and makes ready for re-initialisation
 76    void ClearSamplingTables();                     76    void ClearSamplingTables();
 77                                                    77 
 78    // run-time method to sample energy transfe     78    // run-time method to sample energy transferred to the emitted photon
 79    double SampleEnergyTransfer(const G4double      79    double SampleEnergyTransfer(const G4double eekin, const G4double leekin,
 80                                const G4double      80                                const G4double gcut , const G4double dielSupConst,
 81                                const G4int         81                                const G4int    izet , const G4int matCutIndx,
 82                                const bool          82                                const bool     iselectron);
 83                                                    83 
 84    // used only for development: print out tab     84    // used only for development: print out table related information
 85    // void Dump();                                 85    // void Dump();
 86                                                    86 
 87 private:                                           87 private:
 88                                                    88 
 89   void  BuildSamplingTables();                     89   void  BuildSamplingTables();
 90                                                    90 
 91   void  InitSamplingTables();                      91   void  InitSamplingTables();
 92                                                    92 
 93   void  LoadSTGrid();                              93   void  LoadSTGrid();
 94                                                    94 
 95   void  LoadSamplingTables(G4int iz);              95   void  LoadSamplingTables(G4int iz);
 96                                                    96 
 97   void  ReadCompressedFile(const G4String &fna     97   void  ReadCompressedFile(const G4String &fname, std::istringstream &iss);
 98                                                    98 
 99 private:                                           99 private:
100                                                   100 
101   // Sampling-Table point: describes one [E_i]    101   // Sampling-Table point: describes one [E_i],[kappa_j] point
102   struct STPoint {                                102   struct STPoint {
103     G4double fCum;    // value of the cumulati    103     G4double fCum;    // value of the cumulative function
104     G4double fParA;   // rational function app    104     G4double fParA;   // rational function approximation based interp. parameter
105     G4double fParB;   // rational function app    105     G4double fParB;   // rational function approximation based interp. parameter
106   };                                              106   };
107                                                   107 
108   // Sampling-Table: describes one [E_j] e- en    108   // Sampling-Table: describes one [E_j] e- energy point i.e. one Table
109   struct STable {                                 109   struct STable {
110     // cumulative values for the kappa-cuts: k    110     // cumulative values for the kappa-cuts: kappa_cut_i=E_gamma_cut_i/E_el_j
111     std::vector<G4double> fCumCutValues;          111     std::vector<G4double> fCumCutValues;
112     // as many STPoint-s as kappa values          112     // as many STPoint-s as kappa values
113     std::vector<STPoint>  fSTable;                113     std::vector<STPoint>  fSTable;
114   };                                              114   };
115                                                   115 
116   // Sampling-Tables for a given Z:               116   // Sampling-Tables for a given Z:
117   // describes all tables (i.e. for all e- ene    117   // describes all tables (i.e. for all e- energies) for a given element (Z)
118   struct SamplingTablePerZ {                      118   struct SamplingTablePerZ {
119     SamplingTablePerZ() : fNumGammaCuts(0), fM    119     SamplingTablePerZ() : fNumGammaCuts(0), fMinElEnergyIndx(-1), fMaxElEnergyIndx(-1) {}
120     size_t                fNumGammaCuts;     /    120     size_t                fNumGammaCuts;     // number of gamma-cut for this
121     G4int                 fMinElEnergyIndx;  /    121     G4int                 fMinElEnergyIndx;  // max(i) such E_i <= E for all E
122     G4int                 fMaxElEnergyIndx;  /    122     G4int                 fMaxElEnergyIndx;  // min(i) such E_i >= E for all E
123     std::vector<STable*>  fTablesPerEnergy;  /    123     std::vector<STable*>  fTablesPerEnergy;  // as many table as e-ekin grid point
124     //the different gamma-cut values that are     124     //the different gamma-cut values that are defined for this element(Z) and ln
125     std::vector<G4double> fGammaECuts;            125     std::vector<G4double> fGammaECuts;
126     std::vector<G4double> fLogGammaECuts;         126     std::vector<G4double> fLogGammaECuts;
127     // the couple index element stores the cor    127     // the couple index element stores the corresponding (sorted) gamma-cut index
128     std::vector<size_t>   fMatCutIndxToGamCutI    128     std::vector<size_t>   fMatCutIndxToGamCutIndx;
129     // temporary vector to store some indecis     129     // temporary vector to store some indecis during initialisation
130     std::vector< std::vector<size_t> >   fGamC    130     std::vector< std::vector<size_t> >   fGamCutIndxToMatCutIndx;
131   };                                              131   };
132                                                   132 
133   // simple linear search: most of the time fa    133   // simple linear search: most of the time faster than anything in our case
134   G4int LinSearch(const std::vector<STPoint>&     134   G4int LinSearch(const std::vector<STPoint>& vect,
135                   const G4int size,               135                   const G4int size,
136                   const G4double val);            136                   const G4double val);
137                                                   137 
138 private:                                          138 private:
139                                                   139 
140   // pre-prepared sampling tables are availabl    140   // pre-prepared sampling tables are available:
141   G4int                           fMaxZet;        141   G4int                           fMaxZet;      // max Z number
142   G4int                           fNumElEnergy    142   G4int                           fNumElEnergy; // # e- kine (E_k) per Z
143   G4int                           fNumKappa;      143   G4int                           fNumKappa;    // # red. photon eners per E_k
144                                                   144 
145   // min/max electron kinetic energy usage lim    145   // min/max electron kinetic energy usage limits
146   G4double                        fUsedLowEene    146   G4double                        fUsedLowEenergy;
147   G4double                        fUsedHighEen    147   G4double                        fUsedHighEenergy;
148   G4double                        fLogMinElEne    148   G4double                        fLogMinElEnergy;
149   G4double                        fILDeltaElEn    149   G4double                        fILDeltaElEnergy;
150                                                   150 
151   // e- kinetic energy and reduced photon ener    151   // e- kinetic energy and reduced photon energy grids and tehir logarithms
152   std::vector<G4double>           fElEnergyVec    152   std::vector<G4double>           fElEnergyVect;
153   std::vector<G4double>           fLElEnergyVe    153   std::vector<G4double>           fLElEnergyVect;
154   std::vector<G4double>           fKappaVect;     154   std::vector<G4double>           fKappaVect;
155   std::vector<G4double>           fLKappaVect;    155   std::vector<G4double>           fLKappaVect;
156                                                   156 
157   // container to store samplingtables per Z (    157   // container to store samplingtables per Z (size is fMaxZet+1)
158   std::vector<SamplingTablePerZ*> fSBSamplingT    158   std::vector<SamplingTablePerZ*> fSBSamplingTables;
159                                                   159 
160 };                                                160 };
161                                                   161 
162 #endif                                            162 #endif
163                                                   163