63 #include "G4ParticleChangeForGamma.hh"    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) + 1./9.*yp*ym;
   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;
   352   if(epsil0 > 1.0) { 
return; }
   365     epsil = epsil0 + (0.5-epsil0)*rndmEngine->
flat();
   372     if (GammaEnergy > 50.*
MeV) { FZ += 8.*(anElement->
GetfCoulomb()); }
   380     G4double epsil1 = 0.5 - 0.5*sqrt(1. - screenmin/screenmax) ;
   381     G4double epsilmin = 
max(epsil0,epsil1) , epsilrange = 0.5 - epsilmin;
   391     G4double NormF1 = 
max(F10*epsilrange*epsilrange,0.); 
   395       if ( NormF1/(NormF1+NormF2) > rndmEngine->
flat() ) {
   397     screenvar = screenfac/(epsil*(1-epsil));
   408     epsil = epsilmin + epsilrange*rndmEngine->
flat();
   409     screenvar = screenfac/(epsil*(1-epsil));
   421     } 
while( greject < rndmEngine->
flat());
   429   G4double ElectTotEnergy, PositTotEnergy;
   430   if (rndmEngine->
flat() > 0.5) {
   432     ElectTotEnergy = (1.-epsil)*GammaEnergy;
   433     PositTotEnergy = epsil*GammaEnergy;
   437     PositTotEnergy = (1.-epsil)*GammaEnergy;
   438     ElectTotEnergy = epsil*GammaEnergy;
   450   if (9. > 36.*rndmEngine->
flat()) { u *= 1.6; }
   451   else                             { u *= 0.53333; } 
   456   G4double dxEl= sin(TetEl)*cos(Phi),dyEl= sin(TetEl)*sin(Phi),dzEl=cos(TetEl);
   457   G4double dxPo=-sin(TetPo)*cos(Phi),dyPo=-sin(TetPo)*sin(Phi),dzPo=cos(TetPo);
   468   ElectDirection.
rotateUz(GammaDirection);   
   479   PositDirection.
rotateUz(GammaDirection);   
   486   fvect->push_back(aParticle1);
   487   fvect->push_back(aParticle2);
 
G4double LowEnergyLimit() const
 
G4bool use_completescreening
 
G4double ComputeXSectionPerAtom(G4double totalEnergy, G4double Z)
 
const G4Material * GetMaterial() const
 
G4double DeltaMax() const
 
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
 
G4double GetlogZ3() const
 
G4PairProductionRelModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitlerLPM")
 
G4double GetZ13(G4double Z)
 
void SetElementSelectors(std::vector< G4EmElementSelector *> *)
 
static const G4double Egsmall
 
static const G4double preS1
 
static const G4double Finel_light[5]
 
G4ParticleDefinition * thePositron
 
static G4NistManager * Instance()
 
static const G4double facFel
 
static const G4double xgi[8]
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
 
G4double ScreenFunction1(G4double ScreenVariable)
 
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double)
 
G4double GetKineticEnergy() const
 
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
 
static const G4double wgi[8]
 
static const G4double logTwo
 
G4double HighEnergyLimit() const
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
static const double twopi
 
virtual ~G4PairProductionRelModel()
 
G4IonisParamElm * GetIonisation() const
 
void CalcLPMFunctions(G4double k, G4double eplus)
 
static const G4double facFinel
 
G4double ScreenFunction2(G4double ScreenVariable)
 
std::vector< G4EmElementSelector * > * GetElementSelectors()
 
G4double GetfCoulomb() const
 
G4double G4Log(G4double x)
 
G4double Phi1(G4double delta) const
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
static G4Positron * Positron()
 
int classic_electr_radius
 
G4ParticleChangeForGamma * fParticleChange
 
G4ParticleDefinition * theGamma
 
void SetCurrentElement(G4double)
 
const G4ThreeVector & GetMomentumDirection() const
 
G4double Phi2(G4double delta) const
 
G4double DeltaMin(G4double) const
 
static G4Electron * Electron()
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
G4double ComputeRelDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX)
 
G4ParticleDefinition * theElectron
 
G4double GetRadlen() const
 
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()
 
static const G4double xsfactor
 
G4double ComputeDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z)