78 0.5917, 0.7628, 0.8983, 0.9801 };
80 0.1813, 0.1569, 0.1112, 0.0506 };
89 fLPMconstant(fine_structure_const*electron_mass_c2*electron_mass_c2/(4.*pi*hbarc)*0.5),
92 use_completescreening(false)
126 G4double vcut = electron_mass_c2/totalEnergy ;
131 G4double vcut1 = 0.5 - 0.5*sqrt(1. - dmin/dmax) ;
132 vcut = max(vcut, vcut1);
144 for(
G4int l=0; l<n; l++,e0 += delta) {
145 for(
G4int i=0; i<8; i++) {
148 if (
fLPMflag && totalEnergy>100.*GeV)
174 G4double yp=eplusEnergy/totalEnergy;
179 cross = (yp*yp + ym*ym + 2./3.*ym*yp)*(
Fel -
fCoulomb) + 1./9.*yp*ym;
185 return cross/totalEnergy;
200 G4double yp=eplusEnergy/totalEnergy;
210 cross = (1./3.*
gLPM + 2./3.*
phiLPM)*(yp*yp + ym*ym)
215 return cross/totalEnergy;
236 else if (sprime>sqrt(2.)*s1) {
238 xiLPM = 1+h-0.08*(1-h)*(1-
sqr(1-h))/logTS1;
253 phiLPM = 6.*s0 - 18.84955592153876*s2 + 39.47841760435743*s3
254 - 57.69873135166053*s4;
255 gLPM = 37.69911184307752*s2 - 236.8705056261446*s3 + 807.7822389*s4;
257 else if (s0<1.9516) {
260 phiLPM = 1.-exp(-6.*s0*(1.+(3.-pi)*s0)
261 +s3/(0.623+0.795*s0+0.658*s2));
262 if (s0<0.415827397755) {
264 G4double psiLPM = 1-exp(-4*s0-8*s2/(1+3.936*s0+4.97*s2-0.05*s3+7.50*s4));
269 G4double pre = -0.16072300849123999 + s0*3.7550300067531581 + s2*-1.7981383069010097
270 + s3*0.67282686077812381 + s4*-0.1207722909879257;
276 phiLPM = 1. - 0.0119048/s4;
277 gLPM = 1. - 0.0230655/s4;
295 if ( Z < 0.9 )
return crossSection;
296 if ( gammaEnergy <= 2.0*electron_mass_c2 )
return crossSection;
304 crossSection*=4.*Z*(Z+xi)*fine_structure_const*classic_electr_radius*classic_electr_radius;
336 G4double epsil0 = electron_mass_c2/GammaEnergy ;
337 if(epsil0 > 1.0) {
return; }
340 static const G4double Egsmall=2.*MeV;
345 if (GammaEnergy < Egsmall) {
354 if (GammaEnergy > 50.*MeV) FZ += 8.*(anElement->
GetfCoulomb());
358 G4double screenmax = exp ((42.24 - FZ)/8.368) - 0.952 ;
359 G4double screenmin = min(4.*screenfac,screenmax);
362 G4double epsil1 = 0.5 - 0.5*sqrt(1. - screenmin/screenmax) ;
363 G4double epsilmin = max(epsil0,epsil1) , epsilrange = 0.5 - epsilmin;
373 G4double NormF1 = max(
F10*epsilrange*epsilrange,0.);
379 screenvar = screenfac/(epsil*(1-epsil));
380 if (
fLPMflag && GammaEnergy>100.*GeV) {
390 screenvar = screenfac/(epsil*(1-epsil));
391 if (
fLPMflag && GammaEnergy>100.*GeV) {
408 G4double ElectTotEnergy, PositTotEnergy;
411 ElectTotEnergy = (1.-epsil)*GammaEnergy;
412 PositTotEnergy = epsil*GammaEnergy;
416 PositTotEnergy = (1.-epsil)*GammaEnergy;
417 ElectTotEnergy = epsil*GammaEnergy;
428 const G4double a1 = 0.625 , a2 = 3.*a1 , d = 27. ;
433 G4double TetEl = u*electron_mass_c2/ElectTotEnergy;
434 G4double TetPo = u*electron_mass_c2/PositTotEnergy;
436 G4double dxEl= sin(TetEl)*cos(Phi),dyEl= sin(TetEl)*sin(Phi),dzEl=cos(TetEl);
437 G4double dxPo=-sin(TetPo)*cos(Phi),dyPo=-sin(TetPo)*sin(Phi),dzPo=cos(TetPo);
445 G4double ElectKineEnergy = max(0.,ElectTotEnergy - electron_mass_c2);
448 ElectDirection.
rotateUz(GammaDirection);
456 G4double PositKineEnergy = max(0.,PositTotEnergy - electron_mass_c2);
459 PositDirection.
rotateUz(GammaDirection);
466 fvect->push_back(aParticle1);
467 fvect->push_back(aParticle2);
Hep3Vector & rotateUz(const Hep3Vector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
G4double GetfCoulomb() const
G4IonisParamElm * GetIonisation() const
G4double GetlogZ3() const
const G4Material * GetMaterial() const
G4double GetRadlen() const
static G4NistManager * Instance()
static const G4double facFinel
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
G4ParticleDefinition * thePositron
static const G4double Finel_light[5]
G4double DeltaMax() const
static const G4double wgi[8]
void SetCurrentElement(G4double)
G4PairProductionRelModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitlerLPM")
G4double ScreenFunction2(G4double ScreenVariable)
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX)
G4double ComputeRelDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)
static const G4double preS1
G4ParticleDefinition * theElectron
static const G4double Fel_light[5]
static const G4double xgi[8]
virtual ~G4PairProductionRelModel()
G4ParticleDefinition * theGamma
void CalcLPMFunctions(G4double k, G4double eplus)
G4double ComputeXSectionPerAtom(G4double totalEnergy, G4double Z)
G4bool use_completescreening
G4double ScreenFunction1(G4double ScreenVariable)
G4double ComputeDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)
static const G4double logTwo
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
G4double Phi2(G4double delta) const
G4ParticleChangeForGamma * fParticleChange
G4double DeltaMin(G4double) const
G4double Phi1(G4double delta) const
static const G4double facFel
void SetProposedKineticEnergy(G4double proposedKinEnergy)
static G4Positron * Positron()
G4ParticleChangeForGamma * GetParticleChangeForGamma()
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
void ProposeTrackStatus(G4TrackStatus status)