10 #include <Math/RotationY.h> 11 #include <Math/RotationZ.h> 72 double gbteth(
const double ener,
106 if(radLengths < 1E-10)
116 particle.
momentum().SetXYZT(0.,0.,0.,0.);
128 if(xmin >=1. || xmin <=0.)
134 double bremProba = radLengths * (4./3. *
std::log(1./xmin)
136 + 1./2. * (1.-xmin*xmin));
148 double phi = particle.
momentum().Phi();
149 double m2dontchange = particle.
momentum().mass()*particle.
momentum().mass();
152 for(
unsigned int i=0;
i<nPhotons; ++
i)
158 if(particle.
momentum().E() - particle.
momentum().mass() < photonMom.E())
break;
161 photonMom = ROOT::Math::RotationZ(phi) * (ROOT::Math::RotationY(theta) * photonMom);
183 weight = 1. - xp + 3./4.*xp*xp;
215 const double alfa = 0.625;
217 const double d = 0.13*(0.8+1.3/
Z_)*(100.0+(1.0/ener))*(1.0+efrac);
218 const double w1 = 9.0/(9.0+
d);
219 const double umax = ener*
M_PI/partm;
234 "fastsim::Bremsstrahlung" T getParameter(std::string const &) const
Implementation of a generic detector layer (base class for forward/barrel layers).
const math::XYZTLorentzVector & position() const
Return position of the particle.
double flatShoot(double xmin=0.0, double xmax=1.0) const
double minPhotonEnergy_
Cut on minimum energy of bremsstrahlung photons.
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
void interact(Particle &particle, const SimplifiedGeometry &layer, std::vector< std::unique_ptr< Particle > > &secondaries, const RandomEngineAndDistribution &random) override
Perform the interaction.
double Z_
Atomic number of material (usually silicon Z=14)
int pdgId() const
Return pdgId of the particle.
static double constexpr eMass
Electron mass[GeV].
Bremsstrahlung(const std::string &name, const edm::ParameterSet &cfg)
Constructor.
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Base class for any interaction model between a particle and a tracker layer.
~Bremsstrahlung() override
Default destructor.
Cos< T >::type cos(const T &t)
Abs< T >::type abs(const T &t)
double gbteth(const double ener, const double partm, const double efrac, const RandomEngineAndDistribution &random) const
A universal angular distribution.
Implementation of Bremsstrahlung from e+/e- in the tracker layers.
virtual const double getThickness(const math::XYZTLorentzVector &position) const =0
Return thickness of the layer at a given position.
unsigned int poissonShoot(double mean) const
const math::XYZTLorentzVector & momentum() const
Return momentum of the particle.
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
Power< A, B >::type pow(const A &a, const B &b)
double minPhotonEnergyFraction_
Cut on minimum fraction of particle's energy which has to be carried by photon.
math::XYZTLorentzVector brem(Particle &particle, double xmin, const RandomEngineAndDistribution &random) const
Compute Brem photon energy and angles, if any.