Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/standard/include/G4SeltzerBergerModel.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 // -------------------------------------------------------------------
 28 //
 29 // GEANT4 Class header file
 30 //
 31 //
 32 // File name:     G4SeltzerBergerModel
 33 //
 34 // Author:        Andreas Schaelicke & Vladimir Ivantchenko
 35 //
 36 // Creation date: 04.10.2011
 37 //
 38 // Modifications:
 39 //
 40 // 24.07.2018 Introduced possibility to use sampling tables to sample the
 41 //            emitted photon energy (instead of using rejectio) from the 
 42 //            Seltzer-Berger scalled DCS for bremsstrahlung photon emission. 
 43 //            Using these sampling tables option gives faster(30-70%) final 
 44 //            state generation than the original rejection but takes some 
 45 //            extra memory (+ ~6MB in the case of the full CMS detector). 
 46 //            (M Novak)
 47 //
 48 // Class Description:
 49 //
 50 // Implementation of the bremssrahlung energy spectrum using
 51 // 1. S.M. Seltzer and M.J. Berger Nucl. Instr. Meth. B12 (1985) 95
 52 // 2. S.M. Seltzer and M.J. Berger Atomic data and Nuclear Data
 53 //    Tables 35 (1986) 345
 54 
 55 // -------------------------------------------------------------------
 56 //
 57 
 58 #ifndef G4SeltzerBergerModel_h
 59 #define G4SeltzerBergerModel_h 1
 60 
 61 #include "G4VEmModel.hh"
 62 #include "G4eBremsstrahlungRelModel.hh"
 63 #include "globals.hh"
 64 
 65 class G4Physics2DVector;
 66 class G4SBBremTable;
 67 class G4ParticleChangeForLoss;
 68 
 69 class G4SeltzerBergerModel : public G4VEmModel
 70 {
 71 
 72 public:
 73 
 74   explicit G4SeltzerBergerModel(const G4ParticleDefinition* p = nullptr,
 75                                 const G4String& nam = "eBremSB");
 76 
 77   ~G4SeltzerBergerModel() override;
 78 
 79   void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
 80 
 81   void InitialiseLocal(const G4ParticleDefinition*,
 82                        G4VEmModel* masterModel) override;
 83 
 84   G4double ComputeDEDXPerVolume(const G4Material*,
 85                                 const G4ParticleDefinition*,
 86                                 G4double ekin,
 87                                 G4double cutEnergy) override;
 88 
 89   G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
 90                                       G4double ekin,
 91                                       G4double zet,
 92                                       G4double,
 93                                       G4double cutEnergy,
 94                                       G4double maxEnergy = DBL_MAX) override;
 95 
 96   void SampleSecondaries(std::vector<G4DynamicParticle*>*,
 97                          const G4MaterialCutsCouple*,
 98                          const G4DynamicParticle*,
 99        G4double cutEnergy,
100                          G4double maxEnergy) override;
101 
102   void SetupForMaterial(const G4ParticleDefinition*,
103                         const G4Material*, G4double) override;
104 
105   G4double MinPrimaryEnergy(const G4Material*,
106                             const G4ParticleDefinition*,
107                             G4double cutEnergy) override;
108 
109   inline void SetBicubicInterpolationFlag(G4bool val) 
110   { fIsUseBicubicInterpolation = val; };
111 
112   // hide assignment operator and cctr
113   G4SeltzerBergerModel & operator=(const G4SeltzerBergerModel &right) = delete;
114   G4SeltzerBergerModel(const G4SeltzerBergerModel&) = delete;
115 
116 private:
117 
118   void SetParticle(const G4ParticleDefinition* p);
119 
120   void ReadData(G4int Z);
121 
122   G4double ComputeBremLoss(G4double cutEnergy);
123 
124   G4double ComputeXSectionPerAtom(G4double cutEnergy);
125 
126   G4double ComputeDXSectionPerAtom(G4double gammaEnergy);
127 
128   G4double SampleEnergyTransfer(const G4double kineticEnergy, 
129                                 const G4double logKineticEnergy, 
130                                 const G4double cut,
131                                 const G4double emax);
132 
133 protected:
134 
135   G4ParticleChangeForLoss* fParticleChange{nullptr};
136 
137 private:
138 
139   static constexpr G4int gMaxZet{101};
140   static constexpr G4double gExpNumLimit{-12.};
141   static G4double gYLimitData[gMaxZet];
142   static G4Physics2DVector* gSBDCSData[gMaxZet];
143   static G4SBBremTable* gSBSamplingTable;
144   static const G4double gBremFactor;
145   static const G4double gMigdalConstant;
146 
147   G4bool fIsUseBicubicInterpolation{false};
148   G4bool fIsUseSamplingTables{true};
149   G4bool fIsElectron{true};
150   G4bool fIsScatOffElectron{false};
151   G4bool isInitializer{false};
152   //
153   G4int fCurrentIZ{0};
154   G4int fNumWarnings{0};
155 
156   const G4ParticleDefinition* fPrimaryParticle{nullptr};
157   G4ParticleDefinition* fGammaParticle;
158 
159   // cash
160   G4double fPrimaryKinEnergy{0.};
161   G4double fPrimaryTotalEnergy{0.};
162   G4double fDensityFactor{0.};
163   G4double fDensityCorr{0.};
164   G4double fLowestKinEnergy;
165 
166   std::size_t fIndx{0};
167   std::size_t fIndy{0};
168 };
169 
170 #endif
171