Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/include/G4PenelopeBremsstrahlungFS.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 ]

  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 // Author: Luciano Pandola
 28 //
 29 // History:
 30 // -----------
 31 // 20 Oct 2010   L. Pandola   1st implementation. 
 32 // 02 May 2011   L. Pandola   Remove dependency on CLHEP::HepMatrix
 33 // 24 May 2011   L. Pandola   Renamed (make default Penelope)
 34 // 03 Oct 2013   L. Pandola   Migration to MT
 35 // 07 Oct 2013   L. Pandola   Add verbosity and ismaster flag for the 
 36 //                             master-only methods
 37 // 30 Oct 2013   L. Pandola   Add a G4Cache of temporary vectors as 
 38 //                             private member. 
 39 //
 40 // -------------------------------------------------------------------
 41 //
 42 // Class description:
 43 // Helper class for the calculation of final state (energy and angular 
 44 // distribution) for bremsstrahlung, Penelope Model, version 2008
 45 // -------------------------------------------------------------------
 46 
 47 #ifndef G4PENELOPEBREMSSTRAHLUNGFS_HH
 48 #define G4PENELOPEBREMSSTRAHLUNGFS_HH 1
 49 
 50 #include "globals.hh"
 51 #include "G4DataVector.hh"
 52 #include "G4Cache.hh"
 53 #include <map>
 54 
 55 class G4PhysicsFreeVector;
 56 class G4PhysicsLogVector;
 57 class G4Material;
 58 class G4PhysicsTable;
 59 
 60 class G4PenelopeBremsstrahlungFS 
 61 {
 62 public:
 63   //! Only master models are supposed to create instances
 64   explicit G4PenelopeBremsstrahlungFS(G4int verbosity=0);
 65   ~G4PenelopeBremsstrahlungFS();
 66  
 67   //!
 68   //! Master and workers (do not touch tables)
 69   //! All of them are const
 70   //!
 71   G4double GetEffectiveZSquared(const G4Material* mat) const;
 72   size_t GetNBinsX() const {return fNBinsX;};
 73   G4double GetMomentumIntegral(G4double* y,        
 74              G4double up,G4int momOrder) const;
 75   const G4PhysicsTable* GetScaledXSTable(const G4Material*,
 76            const G4double cut) const;
 77   G4double SampleGammaEnergy(G4double energy,
 78            const G4Material*, const G4double cut) const;
 79 
 80   //! Reserved for the master model: they build and handle tables
 81   void ClearTables(G4bool isMaster=true);
 82   void BuildScaledXSTable(const G4Material* material,G4double cut,
 83         G4bool isMaster);
 84 
 85   void SetVerbosity(G4int ver){fVerbosity=ver;};
 86   G4int GetVerbosity(){return fVerbosity;};
 87 
 88   G4PenelopeBremsstrahlungFS & operator=(const G4PenelopeBremsstrahlungFS &right) = delete;
 89   G4PenelopeBremsstrahlungFS(const G4PenelopeBremsstrahlungFS&) = delete;
 90   
 91 private:
 92    void ReadDataFile(G4int Z);  
 93   //Tables for energy sampling
 94   void InitializeEnergySampling(const G4Material*,G4double cut);
 95 
 96   //Differential cross section tables
 97   //Table contains G4PhysicsVectors of log(XS(E,x)) vs. log(E) 
 98   //for a grid of 32 values in x (= reduced photon energy)
 99   std::map< std::pair<const G4Material*,G4double> , 
100       G4PhysicsTable*> *fReducedXSTable; 
101 
102   std::map<const G4Material*,G4double> *fEffectiveZSq;
103   
104   //Map of element data vs. Z. 
105   //This is conceptually an array [57][33] with 57 energy 
106   //points and 32 points in x. The 33-th column gives the total XS vs. E.
107   //It is implemented as a one-dimensional array of dimension
108   //57*33=1881 elements. data[e][x] --> theElementData[e*(nBinsX+1)+x]
109   std::map<G4int,G4DataVector*> *fElementData;
110 
111   //Table contains G4PhysicsVectors of integral_XS(E,x) vs. x for a grid of 
112   //57 values in energy
113   std::map< std::pair<const G4Material*,G4double> , 
114       G4PhysicsTable*> *fSamplingTable;
115   std::map< std::pair<const G4Material*,G4double> , 
116       G4PhysicsFreeVector* > *fPBcut;
117  
118   //temporary vector. Used as member variable to avoid to book/release the 
119   //memory on the fly. This vector is over-written at every call of 
120   //SampleGammaEnergy(). It is thread-local (each thread has its own) 
121   //and managed by G4Cache
122   G4Cache<G4PhysicsFreeVector*> fCache;
123 
124   //Element data table
125   static const size_t fNBinsE = 57;
126   static const size_t fNBinsX = 32;
127   //x and E grids used in the data tables
128   G4double theXGrid[fNBinsX]; 
129   G4double theEGrid[fNBinsE];
130 
131   G4int fVerbosity;
132 
133 };
134 
135 #endif
136 
137