79 0.5917, 0.7628, 0.8983, 0.9801 };
81 0.1813, 0.1569, 0.1112, 0.0506 };
96 use_completescreening(false)
147 G4double vcut1 = 0.5 - 0.5*sqrt(1. - dmin/dmax) ;
148 vcut =
max(vcut, vcut1);
160 for(
G4int l=0; l<
n; l++,e0 += delta) {
161 for(
G4int i=0; i<8; i++) {
190 G4double yp=eplusEnergy/totalEnergy;
195 cross = (yp*yp + ym*ym + 2./3.*ym*yp)*(
Fel -
fCoulomb) + yp*ym/9.;
201 return cross/totalEnergy;
216 G4double yp=eplusEnergy/totalEnergy;
226 cross = (1./3.*
gLPM + 2./3.*
phiLPM)*(yp*yp + ym*ym)
231 return cross/totalEnergy;
252 else if (sprime>sqrt(2.)*s1) {
254 xiLPM = 1+h-0.08*(1-h)*(1-
sqr(1-h))/logTS1;
269 phiLPM = 6.*s0 - 18.84955592153876*s2 + 39.47841760435743*s3
270 - 57.69873135166053*s4;
271 gLPM = 37.69911184307752*s2 - 236.8705056261446*s3 + 807.7822389*s4;
273 else if (s0<1.9516) {
277 +s3/(0.623+0.795*s0+0.658*s2));
278 if (s0<0.415827397755) {
280 G4double psiLPM = 1-
G4Exp(-4*s0-8*s2/(1+3.936*s0+4.97*s2-0.05*s3+7.50*s4));
285 G4double pre = -0.16072300849123999 + s0*3.7550300067531581 + s2*-1.7981383069010097
286 + s3*0.67282686077812381 + s4*-0.1207722909879257;
292 phiLPM = 1. - 0.0119048/s4;
293 gLPM = 1. - 0.0230655/s4;
350 if(epsil0 > 1.0) {
return; }
363 epsil = epsil0 + (0.5-epsil0)*rndmEngine->
flat();
370 if (GammaEnergy > 50.*
MeV) { FZ += 8.*(anElement->
GetfCoulomb()); }
378 G4double epsil1 = 0.5 - 0.5*sqrt(1. - screenmin/screenmax) ;
379 G4double epsilmin =
max(epsil0,epsil1) , epsilrange = 0.5 - epsilmin;
389 G4double NormF1 =
max(F10*epsilrange*epsilrange,0.);
393 if ( NormF1/(NormF1+NormF2) > rndmEngine->
flat() ) {
395 screenvar = screenfac/(epsil*(1-epsil));
406 epsil = epsilmin + epsilrange*rndmEngine->
flat();
407 screenvar = screenfac/(epsil*(1-epsil));
419 }
while( greject < rndmEngine->
flat());
427 G4double ElectTotEnergy, PositTotEnergy;
428 if (rndmEngine->
flat() > 0.5) {
430 ElectTotEnergy = (1.-epsil)*GammaEnergy;
431 PositTotEnergy = epsil*GammaEnergy;
435 PositTotEnergy = (1.-epsil)*GammaEnergy;
436 ElectTotEnergy = epsil*GammaEnergy;
448 if (9. > 36.*rndmEngine->
flat()) { u *= 1.6; }
449 else { u *= 0.53333; }
454 G4double dxEl= sin(TetEl)*cos(Phi),dyEl= sin(TetEl)*sin(Phi),dzEl=cos(TetEl);
455 G4double dxPo=-sin(TetPo)*cos(Phi),dyPo=-sin(TetPo)*sin(Phi),dzPo=cos(TetPo);
466 ElectDirection.
rotateUz(GammaDirection);
477 PositDirection.
rotateUz(GammaDirection);
484 fvect->push_back(aParticle1);
485 fvect->push_back(aParticle2);
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double) override
static const G4double Egsmall
G4double Phi1(G4double delta) const
G4bool use_completescreening
G4double LowEnergyLimit() const
G4double ComputeXSectionPerAtom(G4double totalEnergy, G4double Z)
void SetCurrentElement(G4double Z)
G4double GetKineticEnergy() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
G4double HighEnergyLimit() const
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
G4double Phi2(G4double delta) const
G4PairProductionRelModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitlerLPM")
G4double GetfCoulomb() const
static const G4double preS1
static const G4double Finel_light[5]
G4ParticleDefinition * thePositron
static G4NistManager * Instance()
static const G4double facFel
static constexpr double twopi
static const G4double xgi[8]
G4double ScreenFunction1(G4double ScreenVariable)
G4double GetZ13(G4double Z) const
static const G4double wgi[8]
static const G4double logTwo
const G4ThreeVector & GetMomentumDirection() const
Hep3Vector & rotateUz(const Hep3Vector &)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
virtual ~G4PairProductionRelModel()
G4double DeltaMin(G4double) const
void CalcLPMFunctions(G4double k, G4double eplus)
static const G4double facFinel
G4double ScreenFunction2(G4double ScreenVariable)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX) override
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4double GetRadlen() const
G4double GetlogZ3() const
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static G4Positron * Positron()
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4ParticleChangeForGamma * fParticleChange
G4ParticleDefinition * theGamma
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double DeltaMax() const
G4IonisParamElm * GetIonisation() const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double GeV
static G4Electron * Electron()
void SetProposedKineticEnergy(G4double proposedKinEnergy)
static constexpr double MeV
static constexpr double pi
G4double ComputeRelDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)
G4ParticleDefinition * theElectron
void ProposeTrackStatus(G4TrackStatus status)
static const G4double xsfactor
static const G4double Fel_light[5]
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
const G4Material * GetMaterial() const
G4double ComputeDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)