CherenkovFluorescenceMatrix.h
Go to the documentation of this file.
1 #ifndef _CherenkovFluorescenceMatrix_h_
2 #define _CherenkovFluorescenceMatrix_h_
3 
4 #include "OpticalHalo.h"
5 #include <utl/Point.h>
6 #include <utl/TabulatedFunction.h>
7 #include <deque>
8 #include <vector>
9 
10 
11 namespace oBLAS {
12  class diagonalMatrix;
14 }
15 
16 namespace FdProfileReconstructorKG {
17 
30 
31  public:
35  };
36 
40  };
41 
47  };
48 
53  };
54 
55  public:
56  CherenkovFluorescenceMatrix(const double xMax, const utl::Point& eyePos,
57  const std::deque<std::vector<utl::Point>>& showerGeometry,
58  const utl::TabulatedFunction& relEff,
59  const std::deque<double>& depth, const double eCut,
60  const double zeta, const double Cfac, const double Ffac,
61  const eFluorescenceLDF f, const eDirectCherenkovLDF dc,
63  const bool cherenkovCone,
64  const OpticalHalo::EHaloType spotHalo);
65 
67 
76  { return fDirectCherenkovMatrix; }
79  { return fFluorescenceMatrix; }
82 
84  const std::deque<double>* GetDepth() const { return &fDepth; }
86  const std::deque<std::vector<utl::Point>>& GetGeometry() const
87  { return fShowerGeometry; }
88 
90  const std::vector<double>& GetFluorescenceMSFactor() const
93  const std::vector<double>& GetCherenkovMSFactor() const
95 
98  void Print(const int iwhat) const;
100  void UpdateXmax(const double);
101 
103  double GetXmax() const { return fXmax; }
105  double GetEcut() const { return fEcut; }
106 
108  void SetYieldFactors(const double fluoFac, const double chkovFac);
109 
111  void SetZeta(const double z);
112 
114  double GetZetaDistance(const int ) const;
115 
116  private:
117  // calculation of CF-matrix ingredients
118  void CalculateWaveLengths();
124 
129 
130  // LDF related
131  double FluorescenceLDFFraction(const int) const;
132  double DirectCherenkovLDFFraction(const int) const;
133  double ScatteredCherenkovLDFFraction(const int, const int) const;
134  double GoraFraction(const int) const;
135  double ExponentialFraction(const int) const;
136  double GillerFraction(const int, const int) const;
137  double AngularCherenkovCDFWithCone(const double maxEmissionAngle,
138  const double xVert, const double showerAge) const;
139 
140  double RobertsFraction(const int, const std::vector<double>&,
141  const utl::TabulatedFunction&) const;
142  double PekalaFraction(const int, const std::vector<double>&,
143  const utl::TabulatedFunction&) const;
144  double MultipleScatteringFraction(const int, const std::vector<double>&,
145  const utl::TabulatedFunction&) const;
146  double SpotFraction() const;
147 
148  // data members
149 
150  // Mie scattered Cherenkov light matrix
152  // Rayleigh scattered Cherenkov light matrix
154  // direct Cherenkov light matrix
156  // fluorescence light matrix
158  // total light matrix
160 
161  // input quantities
162  double fXmax = 0;
163  // lower energy cutoff
164  double fEcut = 0;
166  const std::deque<std::vector<utl::Point>>& fShowerGeometry;
167  std::vector<utl::Point> fShowerPoints;
169  const std::deque<double>& fDepth;
170 
171  // wavelengths to be used for Cherenkov
172  std::vector<double> fCWaveLength;
173  // wavelengths to be used for Fluorescence
174  std::vector<double> fFWaveLength;
175 
176  // transmission vectors
177  std::vector<std::vector<double>> fCT2eye; // as function of Cherenkov wave length
178  std::vector<std::vector<double>> fFT2eye; // as function of Fluorescence wave length
179  std::vector<std::vector<double>> fTShower;
180  // scattering towards eye
181  std::vector<std::vector<double>> fMieScat2eye;
182  std::vector<std::vector<double>> fRayScat2eye;
183  // Cherenkov light at track
184  std::vector<std::vector<double>> fCherAtTrack;
185  // geometrical factors
186  std::vector<double> fGfac;
187  std::vector<double> fMeandEdX;
188  // multiple scattering factors
189  std::vector<double> fFluorescenceMultipleScattering;
190  std::vector<double> fCherenkovMultipleScattering;
191 
192  mutable bool fUpToDate = false;
193 
194  double fZeta = 0;
195  double fTanZeta = 0; // tangens of the S/N zeta value (<=0 --> no correction)
196  double fCfac = 0; // scale factor for Cherenkov light
197  double fFfac = 0; // scale factor for Fluorescence light
198 
203  bool fCherenkovCone = false;
205  };
206 
207 }
208 
209 
210 #endif
double AngularCherenkovCDFWithCone(const double maxEmissionAngle, const double xVert, const double showerAge) const
const oBLAS::lowerTriangularMatrix * GetMieScatteredCherenkovMatrix() const
returns Mie scattered Cherenkov light matrix
Point object.
Definition: Point.h:32
const oBLAS::diagonalMatrix * GetDirectCherenkovMatrix() const
returns direct Cherenkov light matrix
Class to hold collection (x,y) points and provide interpolation between them.
double RobertsFraction(const int, const std::vector< double > &, const utl::TabulatedFunction &) const
const oBLAS::lowerTriangularMatrix * GetRayleighScatteredCherenkovMatrix() const
returns Rayleigh scattered Cherenkov light matrix
constexpr double ms
Definition: AugerUnits.h:164
CherenkovFluorescenceMatrix(const double xMax, const utl::Point &eyePos, const std::deque< std::vector< utl::Point >> &showerGeometry, const utl::TabulatedFunction &relEff, const std::deque< double > &depth, const double eCut, const double zeta, const double Cfac, const double Ffac, const eFluorescenceLDF f, const eDirectCherenkovLDF dc, const eScatteredCherenkovLDF sc, const eMultipleScatteringLDF ms, const bool cherenkovCone, const OpticalHalo::EHaloType spotHalo)
void UpdateXmax(const double)
update matrices for new xmax value
const std::deque< std::vector< utl::Point > > & fShowerGeometry
double GetZetaDistance(const int) const
get distance to shower axis corresponding to zeta
const oBLAS::lowerTriangularMatrix * GetCherenkovFluorescenceMatrix() const
returns total light matrix (not const as we eventually want to invert it ...)
void SetYieldFactors(const double fluoFac, const double chkovFac)
set yield factors
const std::deque< std::vector< utl::Point > > & GetGeometry() const
returns shower positions
const std::vector< double > & GetFluorescenceMSFactor() const
returns fluorescence multiple scattering factor
const std::deque< double > * GetDepth() const
returns depth
Calculation of Cherenkov and Fluorescence matrix.
double MultipleScatteringFraction(const int, const std::vector< double > &, const utl::TabulatedFunction &) const
const std::vector< double > & GetCherenkovMSFactor() const
returns Cherenkov multiple scattering factor
const oBLAS::diagonalMatrix * GetFluorescenceMatrix() const
returns fluorescence light matrix
calculation of FD optical halo light fraction
Definition: OpticalHalo.h:16
double PekalaFraction(const int, const std::vector< double > &, const utl::TabulatedFunction &) const

, generated on Tue Sep 26 2023.