10 #include <Math/RotationY.h> 11 #include <Math/RotationZ.h> 50 std::vector<std::unique_ptr<Particle> >& secondaries,
71 double gbteth(
const double ener,
88 Z_ =
cfg.getParameter<
double>(
"Z");
93 std::vector<std::unique_ptr<fastsim::Particle> >& secondaries,
104 if (radLengths < 1E-10) {
111 if (radLengths > 4.) {
112 particle.
momentum().SetXYZT(0., 0., 0., 0.);
117 if (particle.
momentum().E() - particle.
momentum().mass() < minPhotonEnergy_) {
139 double phi = particle.
momentum().Phi();
140 double m2dontchange = particle.
momentum().mass() * particle.
momentum().mass();
143 for (
unsigned int i = 0;
i < nPhotons; ++
i) {
152 photonMom = ROOT::Math::RotationZ(phi) * (ROOT::Math::RotationY(
theta) * photonMom);
174 weight = 1. - xp + 3. / 4. * xp * xp;
203 const double alfa = 0.625;
205 const double d = 0.13 * (0.8 + 1.3 / Z_) * (100.0 + (1.0 / ener)) * (1.0 + efrac);
206 const double w1 = 9.0 / (9.0 +
d);
207 const double umax = ener *
M_PI / partm;
211 double beta = (random.
flatShoot() <= w1) ? alfa : 3.0 * alfa;
double gbteth(const double ener, const double partm, const double efrac, const RandomEngineAndDistribution &random) const
A universal angular distribution.
Implementation of a generic detector layer (base class for forward/barrel layers).
math::XYZTLorentzVector brem(Particle &particle, double xmin, const RandomEngineAndDistribution &random) const
Compute Brem photon energy and angles, if any.
double minPhotonEnergy_
Cut on minimum energy of bremsstrahlung photons.
Sin< T >::type sin(const T &t)
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)
const math::XYZTLorentzVector & position() const
Return position of the particle.
static double constexpr eMass
Electron mass[GeV].
constexpr std::array< uint8_t, layerIndexSize > layer
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)
int pdgId() const
Return pdgId of the particle.
Implementation of Bremsstrahlung from e+/e- in the tracker layers.
const math::XYZTLorentzVector & momentum() const
Return momentum of the particle.
unsigned int poissonShoot(double mean) const
#define DEFINE_EDM_PLUGIN(factory, type, name)
double flatShoot(double xmin=0.0, double xmax=1.0) const
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
Geom::Theta< T > theta() const
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.