105 static const G4double GammaEnergyLimit = 1.5*MeV;
107 if ( Z < 0.9 || GammaEnergy <= 2.0*electron_mass_c2 ) {
return xSection; }
110 a0= 8.7842e+2*microbarn, a1=-1.9625e+3*microbarn, a2= 1.2949e+3*microbarn,
111 a3=-2.0028e+2*microbarn, a4= 1.2575e+1*microbarn, a5=-2.8333e-1*microbarn;
114 b0=-1.0342e+1*microbarn, b1= 1.7692e+1*microbarn, b2=-8.2381 *microbarn,
115 b3= 1.3063 *microbarn, b4=-9.0815e-2*microbarn, b5= 2.3586e-3*microbarn;
118 c0=-4.5263e+2*microbarn, c1= 1.1161e+3*microbarn, c2=-8.6749e+2*microbarn,
119 c3= 2.1773e+2*microbarn, c4=-2.0467e+1*microbarn, c5= 6.5372e-1*microbarn;
121 G4double GammaEnergySave = GammaEnergy;
122 if (GammaEnergy < GammaEnergyLimit) { GammaEnergy = GammaEnergyLimit; }
124 G4double X=log(GammaEnergy/electron_mass_c2), X2=X*X, X3=X2*X, X4=X3*X, X5=X4*X;
126 G4double F1 = a0 + a1*X + a2*X2 + a3*X3 + a4*X4 + a5*X5,
127 F2 = b0 + b1*X + b2*X2 + b3*X3 + b4*X4 + b5*X5,
128 F3 = c0 + c1*X + c2*X2 + c3*X3 + c4*X4 + c5*X5;
130 xSection = (Z + 1.)*(F1*Z + F2*Z*Z + F3);
132 if (GammaEnergySave < GammaEnergyLimit) {
134 X = (GammaEnergySave - 2.*electron_mass_c2)
135 / (GammaEnergyLimit - 2.*electron_mass_c2);
139 if (xSection < 0.) { xSection = 0.; }
169 G4double epsil0 = electron_mass_c2/GammaEnergy ;
170 if(epsil0 > 1.0) {
return; }
173 static const G4double Egsmall=2.*MeV;
178 if (GammaEnergy < Egsmall) {
187 if (GammaEnergy > 50.*MeV) { FZ += 8.*(anElement->
GetfCoulomb()); }
191 G4double screenmax = exp ((42.24 - FZ)/8.368) - 0.952 ;
192 G4double screenmin = min(4.*screenfac,screenmax);
195 G4double epsil1 = 0.5 - 0.5*sqrt(1. - screenmin/screenmax) ;
196 G4double epsilmin = max(epsil0,epsil1) , epsilrange = 0.5 - epsilmin;
206 G4double NormF1 = max(
F10*epsilrange*epsilrange,0.);
212 screenvar = screenfac/(epsil*(1-epsil));
213 greject = (ScreenFunction1(screenvar) - FZ)/
F10;
217 screenvar = screenfac/(epsil*(1-epsil));
218 greject = (ScreenFunction2(screenvar) - FZ)/
F20;
229 G4double ElectTotEnergy, PositTotEnergy;
232 ElectTotEnergy = (1.-epsil)*GammaEnergy;
233 PositTotEnergy = epsil*GammaEnergy;
237 PositTotEnergy = (1.-epsil)*GammaEnergy;
238 ElectTotEnergy = epsil*GammaEnergy;
249 const G4double a1 = 0.625 , a2 = 3.*a1 , d = 27. ;
254 G4double TetEl = u*electron_mass_c2/ElectTotEnergy;
255 G4double TetPo = u*electron_mass_c2/PositTotEnergy;
257 G4double dxEl= sin(TetEl)*cos(Phi),dyEl= sin(TetEl)*sin(Phi),dzEl=cos(TetEl);
258 G4double dxPo=-sin(TetPo)*cos(Phi),dyPo=-sin(TetPo)*sin(Phi),dzPo=cos(TetPo);
266 G4double ElectKineEnergy = max(0.,ElectTotEnergy - electron_mass_c2);
269 ElectDirection.
rotateUz(GammaDirection);
273 theElectron,ElectDirection,ElectKineEnergy);
277 G4double PositKineEnergy = max(0.,PositTotEnergy - electron_mass_c2);
280 PositDirection.
rotateUz(GammaDirection);
284 thePositron,PositDirection,PositKineEnergy);
287 fvect->push_back(aParticle1);
288 fvect->push_back(aParticle2);
Hep3Vector & rotateUz(const Hep3Vector &)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX)
G4BetheHeitlerModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitler")
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual ~G4BetheHeitlerModel()
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
G4double GetfCoulomb() const
G4IonisParamElm * GetIonisation() const
G4double GetlogZ3() const
const G4Material * GetMaterial() const
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)