Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4eBremsstrahlungRelModel.hh
Go to the documentation of this file.
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// $Id$
27//
28// -------------------------------------------------------------------
29//
30// GEANT4 Class header file
31//
32//
33// File name: G4eBremsstrahlungRelModel
34// extention of standard G4eBremsstrahlungModel
35//
36// Author: Andreas Schaelicke
37//
38// Creation date: 28.03.2008
39//
40// Modifications:
41//
42//
43// Class Description:
44//
45// Implementation of energy loss for gamma emission by electrons and
46// positrons including an improved version of the LPM effect
47
48// -------------------------------------------------------------------
49//
50
51#ifndef G4eBremsstrahlungRelModel_h
52#define G4eBremsstrahlungRelModel_h 1
53
54#include "G4VEmModel.hh"
55#include "G4NistManager.hh"
56
58class G4PhysicsVector;
59
61{
62
63public:
64
66 const G4String& nam = "eBremLPM");
67
69
70 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
71
74 G4double kineticEnergy,
75 G4double cutEnergy);
76
78 G4double tkin,
80 G4double cutEnergy,
81 G4double maxEnergy = DBL_MAX);
82
83 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
85 const G4DynamicParticle*,
86 G4double cutEnergy,
87 G4double maxEnergy);
88
89 virtual void SetupForMaterial(const G4ParticleDefinition*,
90 const G4Material*,G4double);
91
92 inline void SetLPMconstant(G4double val);
93 inline G4double LPMconstant() const;
94
95protected:
96
97 virtual G4double ComputeDXSectionPerAtom(G4double gammaEnergy);
98
99 // * fast inline functions *
100 inline void SetCurrentElement(const G4double);
101
102private:
103
104 void InitialiseConstants();
105
106 void CalcLPMFunctions(G4double gammaEnergy);
107
108 G4double ComputeBremLoss(G4double cutEnergy);
109
110 G4double ComputeXSectionPerAtom(G4double cutEnergy);
111
112 G4double ComputeRelDXSectionPerAtom(G4double gammaEnergy);
113
114 void SetParticle(const G4ParticleDefinition* p);
115
116 inline G4double Phi1(G4double,G4double);
117 inline G4double Phi1M2(G4double,G4double);
118 inline G4double Psi1(G4double,G4double);
119 inline G4double Psi1M2(G4double,G4double);
120
121 // hide assignment operator
124
125protected:
126
131
133
134 // cash
139 //G4double z13, z23, lnZ;
140 //G4double Fel, Finel, fCoulomb, fMax;
143
145
146private:
147
148 static const G4double xgi[8], wgi[8];
149 static const G4double Fel_light[5];
150 static const G4double Finel_light[5];
151
152 // consts
153 G4double lowKinEnergy;
154 G4double fMigdalConstant;
155 G4double fLPMconstant;
156 G4double energyThresholdLPM;
157 G4double facFel, facFinel;
158 G4double preS1,logTwo;
159
160 // cash
161 //G4double particleMass;
162 //G4double kinEnergy;
163 //G4double totalEnergy;
164 //G4double currentZ;
165 G4double z13, z23, lnZ;
166 G4double Fel, Finel, fCoulomb, fMax;
167 //G4double densityFactor;
168 //G4double densityCorr;
169
170 // LPM effect
171 G4double lpmEnergy;
172 G4PhysicsVector *fXiLPM, *fPhiLPM, *fGLPM;
173 G4double xiLPM, phiLPM, gLPM;
174
175 // critical gamma energies
176 G4double klpm, kp;
177
178 // flags
179 G4bool use_completescreening;
180 G4bool isInitialised;
181};
182
183//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
184
186{
187 if(Z != currentZ) {
188 currentZ = Z;
189
190 G4int iz = G4int(Z);
191 z13 = nist->GetZ13(iz);
192 z23 = z13*z13;
193 lnZ = nist->GetLOGZ(iz);
194
195 if (iz <= 4) {
196 Fel = Fel_light[iz];
197 Finel = Finel_light[iz] ;
198 }
199 else {
200 Fel = facFel - lnZ/3. ;
201 Finel = facFinel - 2.*lnZ/3. ;
202 }
203
204 fCoulomb = GetCurrentElement()->GetfCoulomb();
205 fMax = Fel-fCoulomb + Finel/currentZ + (1.+1./currentZ)/12.;
206 }
207}
208
209//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
210
211
212inline G4double G4eBremsstrahlungRelModel::Phi1(G4double gg, G4double)
213{
214 // Thomas-Fermi FF from Tsai, eq.(3.38) for Z>=5
215 return 20.863 - 2.*std::log(1. + sqr(0.55846*gg) )
216 - 4.*( 1. - 0.6*std::exp(-0.9*gg) - 0.4*std::exp(-1.5*gg) );
217}
218
219inline G4double G4eBremsstrahlungRelModel::Phi1M2(G4double gg, G4double)
220{
221 // Thomas-Fermi FF from Tsai, eq. (3.39) for Z>=5
222 // return Phi1(gg,Z) -
223 return 2./(3.*(1. + 6.5*gg +6.*gg*gg) );
224}
225
226inline G4double G4eBremsstrahlungRelModel::Psi1(G4double eps, G4double)
227{
228 // Thomas-Fermi FF from Tsai, eq.(3.40) for Z>=5
229 return 28.340 - 2.*std::log(1. + sqr(3.621*eps) )
230 - 4.*( 1. - 0.7*std::exp(-8*eps) - 0.3*std::exp(-29.*eps) );
231}
232
233inline G4double G4eBremsstrahlungRelModel::Psi1M2(G4double eps, G4double)
234{
235 // Thomas-Fermi FF from Tsai, eq. (3.41) for Z>=5
236 return 2./(3.*(1. + 40.*eps +400.*eps*eps) );
237}
238
239//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
240
241inline
243{
244 fLPMconstant = val;
245}
246
247//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
248
249inline
251{
252 return fLPMconstant;
253}
254
255//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
256
257
258#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4double GetfCoulomb() const
Definition: G4Element.hh:201
G4double GetZ13(G4double Z)
G4double GetLOGZ(G4int Z)
const G4Element * GetCurrentElement() const
Definition: G4VEmModel.hh:391
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double tkin, G4double Z, G4double, G4double cutEnergy, G4double maxEnergy=DBL_MAX)
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
const G4ParticleDefinition * particle
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
virtual G4double ComputeDXSectionPerAtom(G4double gammaEnergy)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double cutEnergy, G4double maxEnergy)
G4ParticleChangeForLoss * fParticleChange
T sqr(const T &x)
Definition: templates.hh:145
#define DBL_MAX
Definition: templates.hh:83