eic-smear  1.0.3
A collection of ROOT classes for Monte Carlo events and a fast-smearing code simulating detector effects for the Electron-Ion Collider task force
Bremsstrahlung.cxx
Go to the documentation of this file.
1 
11 
12 #include <cassert>
13 #include <cmath>
14 
16 
17 namespace Smear {
18 
20  double traversed,
21  double radLength)
22 : mParticle(NULL)
23 , mKMin(0.)
24 , mKMax(0.)
25 , mEpsilon(epsilon)
26 , mTraversed(traversed)
27 , mRadLength(radLength)
28 , mPdf(NULL) {
29  Accept.AddParticle(11);
30  Accept.AddParticle(-11);
31 }
32 
34  : Device(other), mParticle(NULL), mKMin(other.mKMin), mKMax(other.mKMax),
35  mEpsilon(other.mEpsilon), mTraversed(other.mTraversed),
36  mRadLength(other.mRadLength), mPdf(NULL) {
37  // Duplicate cached particle if there is one
38  // SetParticle() duplicates the particle and sets up the PDF
39  //if (other.mParticle.get()) {
40  // SetParticle(*mParticle);
41  //} // if
42 }
43 
44 double Bremsstrahlung::dSigmadK(double *x, double*) {
45  double k = x[0];
46  double ret = 4. / 3.;
47  ret += -4. * k / (3. * mParticle->E);
48  ret += pow(k / mParticle->E, 2.);
49  ret /= k;
50  return ret;
51 }
52 
54  double lower = mEpsilon;
55  double upper = mParticle->E - mEpsilon;
56  if (upper < lower || isnan(upper) || isnan(lower)) {
57  return false;
58  } // if
59  mKMin = lower;
60  mKMax = upper;
61  mPdf->SetRange(mKMin, mKMax);
62  return true;
63 }
64 
66  double ret = 4. * log(mKMax / mKMin) / 3.;
67  ret += -4. * (mKMax - mKMin) / (3. * mParticle->E);
68  ret += 0.5* pow((mKMax - mKMin) / mParticle->E, 2.);
69  ret *= mTraversed / mRadLength;
70  int n = static_cast<int>(ret);
71  if (fabs(ret - n) < fabs(ret - n - 1)) {
72  return n;
73  } else {
74  return n + 1;
75  } // if
76 }
77 
79  mParticle.reset(static_cast<erhic::ParticleMC*>(prt.Clone()));
80  if (!mPdf) {
81  mPdf = new TF1("Smear_Bremsstrahlung_PDF",
82  this,
84  mKMin, mKMax, 0);
85  } // if
86  SetupPDF();
87 }
88 
90  prt.p = sqrt(prt.GetE() * prt.GetE() - prt.GetM() * prt.GetM());
91  if (prt.p < 0. || isnan(prt.p)) prt.p = 0.;
92  prt.pt = prt.p * sin(prt.theta);
93  prt.pz = prt.p * cos(prt.theta);
94 }
95 
96 Bremsstrahlung* Bremsstrahlung::Clone(Option_t* /* not used */) const {
97  return new Bremsstrahlung(*this);
98 }
99 
101  ParticleMCS& prtOut) {
102  SetParticle(prt);
103  const int nGamma = NGamma();
104  for (int i = 0; i < nGamma; i++) {
105  if (!SetupPDF()) break;
106  double loss = mPdf->GetRandom();
107  mParticle->E -= loss;
108  } // for
109  prtOut.E = mParticle->GetE();
110  FixParticleKinematics(prtOut);
111  HandleBogusValues(prtOut);
112  mParticle.reset(NULL);
113 }
114 
115 } // namespace Smear
Smear::ParticleMCS::GetM
virtual Double_t GetM() const
Returns the apparent mass of the smeared particle.
Definition: ParticleMCS.h:201
Smear::ParticleMCS::p
Double32_t p
Total momentum of particle.
Definition: ParticleMCS.h:178
Smear
Definition: Acceptance.cxx:16
Smear::ParticleMCS::pt
Double32_t pt
Transverse momentum of particle.
Definition: ParticleMCS.h:177
Smear::Bremsstrahlung::mParticle
std::auto_ptr< erhic::ParticleMC > mParticle
Definition: Bremsstrahlung.h:90
Smear::Bremsstrahlung::mKMax
double mKMax
Definition: Bremsstrahlung.h:93
Smear::ParticleMCS::pz
Double32_t pz
z component of particle momentum
Definition: ParticleMCS.h:175
Smear::Bremsstrahlung::dSigmadK
double dSigmadK(double *x, double *)
Returns dSigmga/dK at k = x[0].
Definition: Bremsstrahlung.cxx:44
Smear::HandleBogusValues
void HandleBogusValues(ParticleMCS &prt, KinType kin)
This dictates how the namespace deals with positive definite variables which have been smeared to neg...
Definition: Smear.h:155
Smear::Bremsstrahlung::Smear
virtual void Smear(const erhic::VirtualParticle &, ParticleMCS &)
Smear the properties of a Particle and assign them to a ParticleS.
Definition: Bremsstrahlung.cxx:100
Smear::Bremsstrahlung::Clone
virtual Bremsstrahlung * Clone(Option_t *option="not used") const
Returns a pointer to a duplicate of this object.
Definition: Bremsstrahlung.cxx:96
Smear::Bremsstrahlung::mKMin
double mKMin
< Copy of the current particle
Definition: Bremsstrahlung.h:92
Smear::Smearer::Accept
Acceptance Accept
Definition: Smearer.h:50
Smear::Bremsstrahlung::SetParticle
void SetParticle(const erhic::VirtualParticle &)
Set the radiating particle type and configure the dSigma/dK function.
Definition: Bremsstrahlung.cxx:78
Smear::ParticleMCS::GetE
virtual Double_t GetE() const
Returns the energy of the particle in the lab frame.
Definition: ParticleMCS.h:197
Smear::Acceptance::AddParticle
void AddParticle(int particle)
Add a particle type to the list of particles to be smeared.
Definition: Acceptance.cxx:42
Smear::Bremsstrahlung::mRadLength
double mRadLength
Definition: Bremsstrahlung.h:96
VirtualParticle.h
Smear::Bremsstrahlung::mPdf
TF1 * mPdf
Definition: Bremsstrahlung.h:98
erhic::VirtualParticle
Abstract base class for a general particle.
Definition: VirtualParticle.h:23
Smear::ParticleMCS
A smeared Monte Carlo particle.
Definition: ParticleMCS.h:27
Smear::Bremsstrahlung::Bremsstrahlung
Bremsstrahlung(double epsilon=0.01, double traversed=10., double radLength=47.1)
Constructor.
Definition: Bremsstrahlung.cxx:19
Smear::Bremsstrahlung::NGamma
int NGamma()
Compute the number of photons emitted.
Definition: Bremsstrahlung.cxx:65
Smear::ParticleMCS::theta
Double32_t theta
Polar angle.
Definition: ParticleMCS.h:179
erhic::ParticleMC
Definition: erhic/ParticleMC.h:403
Smear::Device
Performs smearing of a single kinematic variable according to a simple expression defined via a strin...
Definition: Device.h:44
Bremsstrahlung.h
Smear::Bremsstrahlung::FixParticleKinematics
void FixParticleKinematics(ParticleMCS &)
Definition: Bremsstrahlung.cxx:89
Smear::Bremsstrahlung::mTraversed
double mTraversed
Definition: Bremsstrahlung.h:95
Smear::ParticleMCS::E
Double32_t E
Energy of particle.
Definition: ParticleMCS.h:176
Smear::Bremsstrahlung::SetupPDF
bool SetupPDF()
Configure the dSigma/dK function, setting the energy range over which to generate photons.
Definition: Bremsstrahlung.cxx:53
Smear::Bremsstrahlung::mEpsilon
double mEpsilon
Definition: Bremsstrahlung.h:94
Smear::Bremsstrahlung
A specialized Device class for modelling radiative losses.
Definition: Bremsstrahlung.h:32