G4eBremsstrahlungRelModel.hh

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 // -------------------------------------------------------------------
00029 //
00030 // GEANT4 Class header file
00031 //
00032 //
00033 // File name:     G4eBremsstrahlungRelModel
00034 //                extention of standard G4eBremsstrahlungModel
00035 //
00036 // Author:        Andreas Schaelicke 
00037 //
00038 // Creation date: 28.03.2008
00039 //
00040 // Modifications:
00041 //
00042 //
00043 // Class Description:
00044 //
00045 // Implementation of energy loss for gamma emission by electrons and
00046 // positrons including an improved version of the LPM effect
00047 
00048 // -------------------------------------------------------------------
00049 //
00050 
00051 #ifndef G4eBremsstrahlungRelModel_h
00052 #define G4eBremsstrahlungRelModel_h 1
00053 
00054 #include "G4VEmModel.hh"
00055 #include "G4NistManager.hh"
00056 
00057 class G4ParticleChangeForLoss;
00058 class G4PhysicsVector;
00059 
00060 class G4eBremsstrahlungRelModel : public G4VEmModel
00061 {
00062 
00063 public:
00064 
00065   G4eBremsstrahlungRelModel(const G4ParticleDefinition* p = 0, 
00066                             const G4String& nam = "eBremLPM");
00067 
00068   virtual ~G4eBremsstrahlungRelModel();
00069 
00070   virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00071 
00072   virtual G4double ComputeDEDXPerVolume(const G4Material*,
00073                                         const G4ParticleDefinition*,
00074                                         G4double kineticEnergy,
00075                                         G4double cutEnergy);
00076                                         
00077   virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
00078                                               G4double tkin, 
00079                                               G4double Z,   G4double,
00080                                               G4double cutEnergy,
00081                                               G4double maxEnergy = DBL_MAX);
00082   
00083   virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00084                                  const G4MaterialCutsCouple*,
00085                                  const G4DynamicParticle*,
00086                                  G4double cutEnergy,
00087                                  G4double maxEnergy);
00088 
00089   virtual void SetupForMaterial(const G4ParticleDefinition*,
00090                                 const G4Material*,G4double);
00091 
00092   inline void SetLPMconstant(G4double val);
00093   inline G4double LPMconstant() const;
00094 
00095 protected:
00096 
00097   virtual G4double ComputeDXSectionPerAtom(G4double gammaEnergy);
00098 
00099   // * fast inline functions *
00100   inline void SetCurrentElement(const G4double);
00101 
00102 private:
00103 
00104   void InitialiseConstants();
00105 
00106   void CalcLPMFunctions(G4double gammaEnergy);
00107 
00108   G4double ComputeBremLoss(G4double cutEnergy);
00109 
00110   G4double ComputeXSectionPerAtom(G4double cutEnergy);
00111 
00112   G4double ComputeRelDXSectionPerAtom(G4double gammaEnergy);
00113 
00114   void SetParticle(const G4ParticleDefinition* p);
00115 
00116   inline G4double Phi1(G4double,G4double);
00117   inline G4double Phi1M2(G4double,G4double);
00118   inline G4double Psi1(G4double,G4double);
00119   inline G4double Psi1M2(G4double,G4double);
00120 
00121   // hide assignment operator
00122   G4eBremsstrahlungRelModel & operator=(const  G4eBremsstrahlungRelModel &right);
00123   G4eBremsstrahlungRelModel(const  G4eBremsstrahlungRelModel&);
00124 
00125 protected:
00126 
00127   G4NistManager*              nist;
00128   const G4ParticleDefinition* particle;
00129   G4ParticleDefinition*       theGamma;
00130   G4ParticleChangeForLoss*    fParticleChange;
00131 
00132   G4double bremFactor;
00133 
00134   // cash
00135   G4double particleMass;
00136   G4double kinEnergy;
00137   G4double totalEnergy;
00138   G4double currentZ;
00139   //G4double z13, z23, lnZ;
00140   //G4double Fel, Finel, fCoulomb, fMax; 
00141   G4double densityFactor;
00142   G4double densityCorr;
00143 
00144   G4bool   isElectron;
00145 
00146 private:
00147 
00148   static const G4double xgi[8], wgi[8];
00149   static const G4double Fel_light[5];
00150   static const G4double Finel_light[5];
00151 
00152   // consts
00153   G4double lowKinEnergy;
00154   G4double fMigdalConstant;
00155   G4double fLPMconstant;
00156   G4double energyThresholdLPM;
00157   G4double facFel, facFinel;
00158   G4double preS1,logTwo;
00159 
00160   // cash
00161   //G4double particleMass;
00162   //G4double kinEnergy;
00163   //G4double totalEnergy;
00164   //G4double currentZ;
00165   G4double z13, z23, lnZ;
00166   G4double Fel, Finel, fCoulomb, fMax; 
00167   //G4double densityFactor;
00168   //G4double densityCorr;
00169 
00170   // LPM effect
00171   G4double lpmEnergy;
00172   G4PhysicsVector  *fXiLPM, *fPhiLPM, *fGLPM;
00173   G4double xiLPM, phiLPM, gLPM;
00174 
00175   // critical gamma energies
00176   G4double klpm, kp;
00177 
00178   // flags
00179   G4bool   use_completescreening;
00180   G4bool   isInitialised;
00181 };
00182 
00183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00184 
00185 inline void G4eBremsstrahlungRelModel::SetCurrentElement(const G4double Z)
00186 {
00187   if(Z != currentZ) {
00188     currentZ = Z;
00189 
00190     G4int iz = G4int(Z);
00191     z13 = nist->GetZ13(iz);
00192     z23 = z13*z13;
00193     lnZ = nist->GetLOGZ(iz);
00194 
00195     if (iz <= 4) {
00196       Fel = Fel_light[iz];  
00197       Finel = Finel_light[iz] ; 
00198     }
00199     else {
00200       Fel = facFel - lnZ/3. ;
00201       Finel = facFinel - 2.*lnZ/3. ;
00202     }
00203 
00204     fCoulomb = GetCurrentElement()->GetfCoulomb();
00205     fMax = Fel-fCoulomb + Finel/currentZ  +  (1.+1./currentZ)/12.;
00206   }
00207 }
00208 
00209 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00210 
00211 
00212 inline G4double G4eBremsstrahlungRelModel::Phi1(G4double gg, G4double)
00213 {
00214   //       Thomas-Fermi FF from Tsai, eq.(3.38) for Z>=5
00215   return 20.863 - 2.*std::log(1. + sqr(0.55846*gg) )
00216     - 4.*( 1. - 0.6*std::exp(-0.9*gg) - 0.4*std::exp(-1.5*gg) );
00217 }
00218 
00219 inline G4double G4eBremsstrahlungRelModel::Phi1M2(G4double gg, G4double)
00220 {
00221   //       Thomas-Fermi FF from Tsai, eq. (3.39) for Z>=5
00222   // return Phi1(gg,Z) - 
00223   return 2./(3.*(1. + 6.5*gg +6.*gg*gg) );
00224 }
00225 
00226 inline G4double G4eBremsstrahlungRelModel::Psi1(G4double eps, G4double)
00227 {
00228   //       Thomas-Fermi FF from Tsai, eq.(3.40) for Z>=5 
00229   return 28.340 - 2.*std::log(1. + sqr(3.621*eps) )
00230     - 4.*( 1. - 0.7*std::exp(-8*eps) - 0.3*std::exp(-29.*eps) );
00231 }
00232 
00233 inline G4double G4eBremsstrahlungRelModel::Psi1M2(G4double eps, G4double)
00234 {
00235   //       Thomas-Fermi FF from Tsai, eq. (3.41) for Z>=5
00236   return  2./(3.*(1. + 40.*eps +400.*eps*eps) );
00237 }
00238 
00239 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00240 
00241 inline 
00242 void G4eBremsstrahlungRelModel::SetLPMconstant(G4double val) 
00243 {
00244   fLPMconstant = val;
00245 }
00246 
00247 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00248 
00249 inline 
00250 G4double G4eBremsstrahlungRelModel::LPMconstant() const 
00251 {
00252   return fLPMconstant;
00253 }
00254 
00255 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00256 
00257 
00258 #endif

Generated on Mon May 27 17:48:05 2013 for Geant4 by  doxygen 1.4.7