8 double photonFractECut)
25 if (
radLengths > 4. ) Particle.SetXYZT(0.,0.,0.,0.);
30 if (
xmin >=1. ||
xmin <=0. )
return;
38 unsigned int nPhotons =
poisson(bremProba, random);
41 if ( !nPhotons )
return;
44 double chi = Particle.theta();
45 double psi = Particle.phi();
50 for (
unsigned int i=0;
i<nPhotons; ++
i ) {
73 double emass = 0.0005109990615;
79 weight = 1. - xp + 3./4.*xp*xp;
80 }
while ( weight < random->flatShoot() );
106 const double alfa = 0.625;
108 const double d = 0.13*(0.8+1.3/
theZ())*(100.0+(1.0/ener))*(1.0+efrac);
109 const double w1 = 9.0/(9.0+d);
110 const double umax = ener*
M_PI/partm;
130 while ( proba <= x ) {
131 prob *= ymu / double(++n);
void compute(ParticlePropagator &Particle, RandomEngineAndDistribution const *)
Generate Bremsstrahlung photons.
double flatShoot(double xmin=0.0, double xmax=1.0) const
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
ROOT::Math::RotationZ RotationZ
std::map< std::string, int, std::less< std::string > > psi
unsigned int poisson(double ymu, RandomEngineAndDistribution const *)
Generate numbers according to a Poisson distribution of mean ymu.
const XYZTLorentzVector & momentum() const
the momentum fourvector
Cos< T >::type cos(const T &t)
ROOT::Math::RotationY RotationY
BremsstrahlungSimulator(double photonEnergyCut, double photonFractECut)
Constructor.
void rotate(double rphi, const XYZVector &raxis)
double gbteth(const double ener, const double partm, const double efrac, RandomEngineAndDistribution const *) const
A universal angular distribution - still from GEANT.
double xmin
The fractional photon energy cut (determined from the above two)
std::vector< RawParticle > _theUpdatedState
double photonEnergy
The minimum photon energy to be radiated, in GeV.
XYZTLorentzVector brem(ParticlePropagator &p, RandomEngineAndDistribution const *) const
Compute Brem photon energy and angles, if any.
double photonFractE
The minimum photon fractional energy (wrt that of the electron)
math::XYZTLorentzVector XYZTLorentzVector