AnalyticalCherenkovModel.h
Go to the documentation of this file.
1 
9 #ifndef _atm_AnalyticalCherenkovModel_h_
10 #define _atm_AnalyticalCherenkovModel_h_
11 
12 
13 #include <atm/VCherenkovModel.h>
14 #include <atm/Arbeletche2021CherenkovAngularModel.h>
15 #include <utl/TabulatedFunction.h>
16 #include <utl/Point.h>
17 
18 
19 namespace utl {
20  class TabulatedFunction;
21 }
22 
23 namespace atm {
24 
37 
38  public:
44  void Init();
45 
46  // Possible parametrizations for the Energy Electron Spectrum.
48 
49  // Possible parametrizations for the Angular Electron Distribution.
51 
55  const utl::Point& xB,
56  const double showerAge) const;
57 
61  const utl::Point& xB,
62  const utl::Point& xEye,
63  const double showerAge) const;
64  double
66  const utl::Point& xEye, const double showerAge) const;
67 
68  double
70  const utl::Point& xEye, const double showerAge, const double wavelength) const;
71 
72  double AngularCDF(const double theta, const double verticalDepth,
73  const double showerAge) const;
74  double AngularPDF(const double theta, const double verticalDepth,
75  const double showerAge) const;
76 
77  bool HasData() const {return true;};
78 
79  void SetEnergyCutoff(double ecut) const;
80 
81  private:
82  static const double fdE;
83  static const double fjMax;
85  static const double fNerlingMinValidShowerAge;
86  static const double fNerlingMaxValidShowerAge;
87 
91 
92  bool fWlRefrac;
94 
95  bool CorrectCherenkovAsymmetry(double age, double theta) const;
96 
104 
106  std::vector<double> fWavelength;
107 
111 
113  double CherenkovTrackLength(double energy, double showerAge) const;
114 
116  double DeltaPhotons(double nIndex, double eelec,
117  double dSlant, double wl1, double wl2) const;
118 
120  double CherenkovIntegral(double lowAngle, double highAngle,
121  double meanShowerAge, double refractiveIndex) const;
122 
123 
125  double AsymmCorrection(double a, double theta, double sinphi) const;
126 
128  double AsymmCorrection (const utl::Point& emissionPoint,
129  const utl::Vector& v_toeye,
130  const utl::Vector& axis,
131  double density) const;
132 
134  double AsymmCorrection (const utl::Point& xA,
135  const utl::Point& xB,
136  const utl::Point& xEye) const;
137 
138 
140  double AsymmCorrectionOld (double bm, double bp, double sinphi) const;
142  double AsymmCorrectionOld (const utl::Vector& v_toeye,
143  const utl::Vector& axis,
144  double density) const;
145 
146  const std::vector<double>& GetWavelengths() const
147  { return fWavelength; }
148 
149  // Angular distribution of Cherenkov light parametrized by Arbeletche and de Souza
150  // EPJC 81, p195, 2021 (10.1140/epjc/s10052-021-08971-7)
151  // Used when option eAngArbeletche is set
153 
157  mutable double fShowerAgePrevious;
158  mutable std::vector<double> fNerlingFactor;
159 
161  };
162 
163 }
164 
165 
166 #endif
167 
168 // Configure (x)emacs for this file ...
169 // Local Variables:
170 // mode: c++
171 // compile-command: "make -C .. -k"
172 // End:
double CherenkovIntegral(double lowAngle, double highAngle, double meanShowerAge, double refractiveIndex) const
Calculation of the Cherenkov angle integral int(df/dtheta*sin(theta))
utl::TabulatedFunction & EvaluateCherenkovPhotons(const utl::Point &xA, const utl::Point &xB, const double showerAge) const
Calculation of Cherenkov photons produced between two points.
Point object.
Definition: Point.h:32
Parametrization fParam
Parametrization to be used in the Cherenkov light calculation.
double AngularPDF(const double theta, const double verticalDepth, const double showerAge) const
REGISTER_MODEL(atm::VCherenkovModel,"Analytical", AnalyticalCherenkovModel)
Class to hold collection (x,y) points and provide interpolation between them.
Base class for a Cherenkov Model.
Parametrization of the angular distribution of Cherenkov photons from L. Arbeletche and V...
void Init()
Init method of the model.
Arbeletche2021CherenkovAngularModel fArbeletcheAngularDistribution
utl::TabulatedFunction fCherenkovPhotons
Number of photons as function of the wavelength.
utl::Point fxAprevious
Keep reference to previous calculation, to prevent re-calculation.
double AngularCDF(const double theta, const double verticalDepth, const double showerAge) const
bool CorrectCherenkovAsymmetry(double age, double theta) const
double DeltaPhotons(double nIndex, double eelec, double dSlant, double wl1, double wl2) const
Calculation of Cherenkov Photons between two wavelengths.
double EvaluateDirectCherenkovProbability(const utl::Point &xA, const utl::Point &xB, const utl::Point &xEye, const double showerAge) const
virtual ~AnalyticalCherenkovModel()
Model Destructor.
bool HasData() const
True if a data source is for the given model.
static const double fNerlingMinValidShowerAge
Limits for the shower age in the use of the Nerling parameterizations.
const std::vector< double > & GetWavelengths() const
double AsymmCorrection(double a, double theta, double sinphi) const
Asymmetry correction as local parametrisation.
Vector object.
Definition: Vector.h:30
Model with analytical calculation of the Cherenkov light.
static const double fNerlingMaxValidShowerAge
utl::TabulatedFunction & EvaluateCherenkovDirect(const utl::Point &xA, const utl::Point &xB, const utl::Point &xEye, const double showerAge) const
Calculation of probability of Cherenkov emission.
std::vector< double > fWavelength
Wavelengths to calculate the light production.
void SetEnergyCutoff(double ecut) const
double AsymmCorrectionOld(double bm, double bp, double sinphi) const
Asymmetry correction with old local parametrisation.
double CherenkovTrackLength(double energy, double showerAge) const
Calculation of a special track length to be used in the Cherenkov light evaluation.
utl::TabulatedFunction fDirectCherenkovPhotons

, generated on Tue Sep 26 2023.