30 double xm=
eMass()/eGamma;
36 weight = 1. - 4./3.*xe*(1.-xe);
37 }
while ( weight < random->flatShoot() );
39 double eElectron = xe * eGamma;
40 double tElectron = eElectron-
eMass();
43 double ePositron = eGamma-eElectron;
44 double tPositron = ePositron-
eMass();
52 double stheta1, stheta2, ctheta1, ctheta2;
54 if ( eElectron > ePositron ) {
58 stheta2 = stheta1*pElectron/pPositron;
64 stheta1 = stheta2*pPositron/pElectron;
81 pElectron*stheta1*sphi,
91 -pPositron*stheta2*sphi,
104 const double alfa = 0.625;
106 double d = 0.13*(0.8+1.3/
theZ())*(100.0+(1.0/ener))*(1.0+efrac);
107 double w1 = 9.0/(9.0+
d);
108 double umax = ener*
M_PI/partm;
113 if (random->
flatShoot()<=w1) beta = alfa;
114 else beta = 3.0*alfa;
PairProductionSimulator(double photonEnergyCut)
Constructor.
const HepPDT::ParticleDataTable * particleDataTable() const
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)
void compute(ParticlePropagator &Particle, RandomEngineAndDistribution const *) override
Generate an e+e- pair according to the probability that it happens.
RawParticle const & particle() const
The particle being propagated.
std::map< std::string, int, std::less< std::string > > psi
ROOT::Math::RotationZ RotationZ
RawParticle makeParticle(HepPDT::ParticleDataTable const *, int id, const math::XYZTLorentzVector &p)
double phi() const
phi of momentum vector
double e() const
energy of the momentum
Cos< T >::type cos(const T &t)
ROOT::Math::RotationY RotationY
double eMass() const
Electron mass in GeV/c2.
double theta() const
theta of momentum vector
std::vector< RawParticle > _theUpdatedState
math::XYZTLorentzVector XYZTLorentzVector