23 double photonEnergyCut,
double photonFractECut) :
30 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Starting the MuonBremsstrahlungSimulator"<< std::endl;
40 double NA = 6.022e+23;
43 Particle.SetXYZT(0.,0.,0.,0.);
50 double EMuon = Particle.e();
55 if (
xmin >=1. ||
xmin <=0. )
return;
63 f1->SetParameters(EMuon,
A,
Z);
78 if ( !nPhotons )
return;
81 double chi = Particle.theta();
82 double psi = Particle.phi();
89 for (
unsigned int i=0;
i<nPhotons; ++
i ) {
93 LogDebug(
"MuonBremsstrahlungSimulator")<<
"MuonBremsstrahlungSimulator parameters:"<< std::endl;
94 LogDebug(
"MuonBremsstrahlungSimulator")<<
"xmin-> " <<
xmin << std::endl;
95 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Atomic Weight-> " <<
A << std::endl;
96 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Density-> " <<
density << std::endl;
97 LogDebug(
"MuonBremsstrahlungSimulator")<<
"Distance-> " <<
d << std::endl;
98 LogDebug(
"MuonBremsstrahlungSimulator")<<
"bremProba->" <<
bremProba << std::endl;
99 LogDebug(
"MuonBremsstrahlungSimulator")<<
"nPhotons->" << nPhotons << std::endl;
100 LogDebug(
"MuonBremsstrahlungSimulator")<<
" Muon_Energy-> " << EMuon << std::endl;
101 LogDebug(
"MuonBremsstrahlungSimulator")<<
"X0-> "<< radLen << std::endl;
102 LogDebug(
"MuonBremsstrahlungSimulator")<<
" radLengths-> " <<
radLengths << std::endl;
106 if (thePhoton.E()>0.){
116 brem_photon.SetXYZT(thePhoton.Px(),thePhoton.Py(),thePhoton.Pz(),thePhoton.E());
118 LogDebug(
"MuonBremsstrahlungSimulator")<<
" Muon Bremsstrahlung: photon_energy-> " << thePhoton.E() << std::endl;
119 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_px->" << thePhoton.Px() << std::endl;
120 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_py->" << thePhoton.Py() << std::endl;
121 LogDebug(
"MuonBremsstrahlungSimulator")<<
"photon_pz->" << thePhoton.Pz() << std::endl;
134 double mumass = 0.105658367;
146 double xp =
f1->GetRandom();
147 LogDebug(
"MuonBremsstrahlungSimulator")<<
"MuonBremsstrahlungSimulator: xp->" << xp << std::endl;
148 std::cout <<
"MuonBremsstrahlungSimulator: xp->" << xp << std::endl;
173 const double alfa = 0.625;
175 const double d = 0.13*(0.8+1.3/
theZ())*(100.0+(1.0/ener))*(1.0+efrac);
176 const double w1 = 9.0/(9.0+
d);
177 const double umax = ener*
M_PI/partm;
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.
ROOT::Math::RotationZ RotationZ
std::map< std::string, int, std::less< std::string > > psi
XYZTLorentzVector deltaPMuon
const XYZTLorentzVector & momentum() const
the momentum fourvector
XYZTLorentzVector brem_photon
Cos< T >::type cos(const T &t)
ROOT::Math::RotationY RotationY
void rotate(double rphi, const XYZVector &raxis)
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)
std::vector< RawParticle > _theUpdatedState
unsigned int poissonShoot(double mean) const
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