24 double photonEnergyCut,
double photonFractECut) :
31 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Starting the MuonBremsstrahlungSimulator"<< std::endl;
41 double NA = 6.022e+23;
56 if (
xmin >=1. ||
xmin <=0. )
return;
64 f1->SetParameters(EMuon,
A,
Z);
79 if ( !nPhotons )
return;
90 for (
unsigned int i=0;
i<nPhotons; ++
i ) {
94 LogDebug(
"MuonBremsstrahlungSimulator")<<
"MuonBremsstrahlungSimulator parameters:"<< std::endl;
95 LogDebug(
"MuonBremsstrahlungSimulator")<<
"xmin-> " <<
xmin << std::endl;
96 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Atomic Weight-> " <<
A << std::endl;
97 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Density-> " <<
density << std::endl;
98 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Distance-> " <<
d << std::endl;
99 LogDebug(
"MuonBremsstrahlungSimulator")<<
"bremProba->" <<
bremProba << std::endl;
100 LogDebug(
"MuonBremsstrahlungSimulator")<<
"nPhotons->" << nPhotons << std::endl;
101 LogDebug(
"MuonBremsstrahlungSimulator")<<
" Muon_Energy-> " << EMuon << std::endl;
102 LogDebug(
"MuonBremsstrahlungSimulator")<<
"X0-> "<< radLen << std::endl;
103 LogDebug(
"MuonBremsstrahlungSimulator")<<
" radLengths-> " <<
radLengths << std::endl;
107 if (thePhoton.
E()>0.){
119 LogDebug(
"MuonBremsstrahlungSimulator")<<
" Muon Bremsstrahlung: photon_energy-> " << thePhoton.
E() << std::endl;
120 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_px->" << thePhoton.
Px() << std::endl;
121 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_py->" << thePhoton.
Py() << std::endl;
122 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_pz->" << thePhoton.
Pz() << std::endl;
135 double mumass = 0.105658367;
147 double xp =
f1->GetRandom();
148 LogDebug(
"MuonBremsstrahlungSimulator")<<
"MuonBremsstrahlungSimulator: xp->" << xp << std::endl;
149 std::cout <<
"MuonBremsstrahlungSimulator: xp->" << xp << std::endl;
174 const double alfa = 0.625;
176 const double d = 0.13*(0.8+1.3/
theZ())*(100.0+(1.0/ener))*(1.0+efrac);
177 const double w1 = 9.0/(9.0+
d);
178 const double umax = ener*
M_PI/partm;
static double constexpr NA
Avogadro's number.
void setMomentum(const XYZTLorentzVector &vtx)
set the momentum
const HepPDT::ParticleDataTable * particleDataTable() const
double flatShoot(double xmin=0.0, double xmax=1.0) const
double gbteth(const double ener, const double partm, const double efrac, RandomEngineAndDistribution const *) const
A universal angular distribution - still from GEANT.
double PetrukhinFunc(double *x, double *p)
double xmin
The fractional photon energy cut (determined from the above two)
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
void compute(ParticlePropagator &Particle, RandomEngineAndDistribution const *) override
Generate Bremsstrahlung photons.
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)
XYZTLorentzVector deltaPMuon
double phi() const
phi of momentum vector
const XYZTLorentzVector & momentum() const
the momentum fourvector
double e() const
energy of the momentum
XYZTLorentzVector brem_photon
Cos< T >::type cos(const T &t)
double Py() const
y of the momentum
ROOT::Math::RotationY RotationY
void rotate(double rphi, const XYZVector &raxis)
double Pz() const
z of the momentum
MuonBremsstrahlungSimulator(double A, double Z, double density, double radLen, double photonEnergyCut, double photonFractECut)
Constructor.
double photonFractE
The minimum photon fractional energy (wrt that of the electron)
double theta() const
theta of momentum vector
std::vector< RawParticle > _theUpdatedState
double Px() const
x of the momentum
unsigned int poissonShoot(double mean) const
double E() const
energy of the momentum
XYZTLorentzVector brem(ParticlePropagator &p, RandomEngineAndDistribution const *) const
Compute Brem photon energy and angles, if any.
double photonEnergy
The minimum photon energy to be radiated, in GeV.
math::XYZTLorentzVector XYZTLorentzVector