10 #include <Math/RotationY.h> 11 #include <Math/RotationZ.h> 80 double gbteth(
const double ener,
114 std::vector<std::unique_ptr<fastsim::Particle> > & secondaries,
127 if(radLengths < 1E-10)
137 particle.
momentum().SetXYZT(0.,0.,0.,0.);
150 if(xmin >=1. || xmin <=0.)
170 if(bremProba < 1E-10)
185 double phi = particle.
momentum().Phi();
188 for(
unsigned int i=0;
i<nPhotons; ++
i)
194 if(particle.
momentum().E() - particle.
momentum().mass() < photonMom.E())
break;
197 photonMom = ROOT::Math::RotationZ(phi) * (ROOT::Math::RotationY(theta) * photonMom);
245 const double alfa = 0.625;
247 const double d = 0.13*(0.8+1.3/
Z_)*(100.0+(1.0/ener))*(1.0+efrac);
248 const double w1 = 9.0/(9.0+
d);
249 const double umax = ener*
M_PI/partm;
309 double ee = 1.64872 ;
310 double Z13 =
pow(Z, -1./3.);
311 double Z23 =
pow(Z, -2./3.);
314 double emass = 0.0005109990615;
315 double mumass = 0.105658367;
317 double alpha = 0.00729735;
318 double constant = 1.85736e-30;
321 if(nu * E >= E - mumass)
return 0;
323 double Dn = 1.54 * (
pow(A,0.27));
324 double Dnl =
pow(Dn, (1. - 1./Z));
326 double delta = (mumass * mumass * nu) / (2.* E * (1.- nu));
328 double Phi_n = TMath::Log(B * Z13 *(mumass + delta * ( Dnl * ee - 2))
329 / (Dnl * (emass + delta * ee * B * Z13)));
330 if(Phi_n < 0) Phi_n = 0;
332 double Phi_e = TMath::Log((Bl * Z23 * mumass)
333 / (1.+ delta * mumass / (emass*emass * ee))
334 / (emass + delta *ee * Bl * Z23));
335 if(Phi_e < 0 || nu * E >= E / (1. + (mumass * mumass / (2. * emass * E)))) Phi_e = 0;
339 double f = 16./3. * alpha * constant * Z * (Z * Phi_n + Phi_e) * (1./nu) * (1. - nu + 0.75 * nu * nu) ;
348 "fastsim::MuonBremsstrahlung"
static double constexpr NA
Avogadro's number.
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
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
double minPhotonEnergyFraction_
Cut on minimum fraction of particle's energy which has to be carried by photon.
static double constexpr muMass
Muon mass [GeV].
int pdgId() const
Return pdgId of the particle.
double radLenInCm_
Radiation length of material (usually silicon X0=9.360)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Base class for any interaction model between a particle and a tracker layer.
double density_
Density of material (usually silicon rho=2.329)
Cos< T >::type cos(const T &t)
double minPhotonEnergy_
Cut on minimum energy of bremsstrahlung photons.
Implementation of Bremsstrahlung from mu+/mu- in the tracker layers based on a Petrukhin Model (nucle...
Abs< T >::type abs(const T &t)
static const std::string B
~MuonBremsstrahlung() override
Default destructor.
TF1 * Petrfunc
The Petrukhin Function.
static double PetrukhinFunc(double *x, double *p)
Petrukhin Function: Returns cross section using nuclear-electron screening correction from G4 style...
virtual const double getThickness(const math::XYZTLorentzVector &position) const =0
Return thickness of the layer at a given position.
MuonBremsstrahlung(const std::string &name, const edm::ParameterSet &cfg)
Constructor.
double gbteth(const double ener, const double partm, const double efrac, const RandomEngineAndDistribution &random) const
A universal angular distribution.
unsigned int poissonShoot(double mean) const
const math::XYZTLorentzVector & momentum() const
Return momentum of the particle.
void interact(Particle &particle, const SimplifiedGeometry &layer, std::vector< std::unique_ptr< Particle > > &secondaries, const RandomEngineAndDistribution &random) override
Perform the interaction.
#define DEFINE_EDM_PLUGIN(factory, type, name)
double A_
Atomic weight of material (usually silicon A=28.0855)
double Z_
Atomic number of material (usually silicon Z=14)
Definition of a generic FastSim Particle which can be propagated through the detector (formerly Parti...
math::XYZTLorentzVector brem(Particle &particle, double xmin, const RandomEngineAndDistribution &random) const
Compute Brem photon energy and angles, if any.
Power< A, B >::type pow(const A &a, const B &b)