16 double eGamma = Particle.e();
29 double xm=
eMass()/eGamma;
35 weight = 1. - 4./3.*xe*(1.-xe);
36 }
while ( weight < random->flatShoot() );
38 double eElectron = xe * eGamma;
39 double tElectron = eElectron-
eMass();
42 double ePositron = eGamma-eElectron;
43 double tPositron = ePositron-
eMass();
51 double stheta1, stheta2, ctheta1, ctheta2;
53 if ( eElectron > ePositron ) {
57 stheta2 = stheta1*pElectron/pPositron;
63 stheta1 = stheta2*pPositron/pElectron;
68 double chi = Particle.theta();
69 double psi = Particle.phi();
77 pElectron*stheta1*sphi,
86 -pPositron*stheta2*sphi,
100 const double alfa = 0.625;
102 double d = 0.13*(0.8+1.3/
theZ())*(100.0+(1.0/ener))*(1.0+efrac);
103 double w1 = 9.0/(9.0+
d);
104 double umax = ener*
M_PI/partm;
109 if (random->
flatShoot()<=w1) beta = alfa;
110 else beta = 3.0*alfa;
PairProductionSimulator(double photonEnergyCut)
Constructor.
double photonEnergy
The minimal photon energy for possible conversion.
double flatShoot(double xmin=0.0, double xmax=1.0) const
double gbteth(double ener, double partm, double efrac, RandomEngineAndDistribution const *)
A universal angular distribution - still from GEANT.
Sin< T >::type sin(const T &t)
ROOT::Math::RotationZ RotationZ
std::map< std::string, int, std::less< std::string > > psi
Cos< T >::type cos(const T &t)
ROOT::Math::RotationY RotationY
double eMass() const
Electron mass in GeV/c2.
void compute(ParticlePropagator &Particle, RandomEngineAndDistribution const *)
Generate an e+e- pair according to the probability that it happens.
std::vector< RawParticle > _theUpdatedState