Framework/Atmosphere/Atmosphere.h
Go to the documentation of this file.
1 #ifndef _atm_Atmosphere_h_
2 #define _atm_Atmosphere_h_
3 
4 #include <atm/VModel.h>
5 #include <atm/MolecularIds.h>
6 #include <utl/AugerUnits.h>
7 
8 #include <vector>
9 #include <map>
10 
11 
12 namespace det {
13  class Detector;
14 }
15 
16 namespace fdet {
17  class Pixel;
18 }
19 
20 namespace fevt {
21  class Pixel;
22 }
23 
24 namespace utl {
25  class Point;
26  class Vector;
27  class TabulatedFunction;
28 }
29 
30 namespace atm {
31 
32  class AttenuationResult;
33  class ScatteringResult;
34  class CloudResult;
35  class ProfileResult;
36  class VRayleighModel;
37  class VProfileModel;
38  class VMieModel;
39  class VFluorescenceModel;
40  class VCherenkovModel;
41  class VCloudModel;
42  class InclinedAtmosphericProfile;
43  class AerosolDB;
44  class MolecularDB;
45  class OverallQualityDB;
46  class LidarDB;
47  class GOESDB;
48 
49 
61  class Atmosphere {
62  public:
63  enum EmissionMode {
68  };
69 
70  Atmosphere() { }
71 
72  ~Atmosphere() { Clean(); }
73 
74  void Update() { Clean(); }
75 
78 
80 
86  const utl::Point& xFinal,
87  const std::vector<double>& wLength) const;
88 
89  double EvaluateRayleighAttenuation(const utl::Point& xInit,
90  const utl::Point& xFinal,
91  const double wLength) const;
92 
94  const utl::Point& xB,
95  const double angle, const double distance,
96  const std::vector<double>& xLength) const;
97 
98  double EvaluateRayleighScattering(const utl::Point& xA,
99  const utl::Point& xB,
100  const double angle, const double distance,
101  const double xLength) const;
102 
104  const utl::Point& xB,
105  const double angle, const double distance,
106  const atm::AttenuationResult& rayleighAttenuation) const;
107 
108  double EvaluateRayleighScattering(const utl::Point& xA,
109  const utl::Point& xB,
110  const double angle, const double distance,
111  const double xLength,
112  const double rayleighAttenuation) const;
113 
114  double GetRayleighAttenuationLength(const utl::Point& xA,
115  const double wLength) const;
116 
118 
121 
123  const utl::Point& xFinal,
124  const std::vector<double>& wLength) const;
125 
126  double EvaluateMieAttenuation(const utl::Point& xInit,
127  const utl::Point& xFinal,
128  const double wLength) const;
129 
131  const utl::Point& xB,
132  const double angle, const double distance,
133  const std::vector<double>& xLength) const;
134 
135  double EvaluateMieScattering(const utl::Point& xA,
136  const utl::Point& xB,
137  const double angle, const double distance,
138  const double xLength) const;
139 
141  const utl::Point& xB,
142  const double angle, const double distance,
143  const atm::AttenuationResult& mieAttenuation) const;
144 
145  double EvaluateMieScattering(const utl::Point& xA,
146  const utl::Point& xB,
147  const double angle, const double distance,
148  const double xLength,
149  const double mieAttenuation) const;
150 
151  double GetMieAttenuationLength(const utl::Point& xA,
152  const double wLength) const;
153 
154 
156  double GetVerticalAerosolOpticalDepth(const unsigned int eyeId,
157  const double altitude = 4.5*utl::km) const;
158 
160 
163 
165  const utl::Point& x) const;
166 
168  const utl::Point& x) const;
169 
170  atm::CloudResult EvaluateCloudCoverage(const unsigned int eyeId,
171  const unsigned int telId,
172  const unsigned int pixId,
173  const utl::Point& x) const;
174 
176 
179 
182 
185 
188 
191 
194 
197 
200 
202  const atm::ProfileResult& EvaluateRefractionIndexVsHeight(const double wavelength) const;
203 
205 
218  void InitSlantProfileModel(const utl::Point& core, const utl::Vector& dir,
219  const double deltaX) const;
220 
224  double IntegratedGrammage(const utl::Point& pStart, const utl::Point& pStop,
225  const double delta) const;
226 
231 
234 
237 
241 
244 
246 
249  const utl::TabulatedFunction& EvaluateFluorescenceYield(const double heightAboveSeaLevel) const;
250 
251  const std::vector<double>& GetWavelengths(const EmissionMode mode = eFluorescence) const;
252 
254  double GetdEdX0() const;
255 
257  double GetDeExcitationTime(const double height) const;
258 
260  double GetVerticalTimeOfFlight(const double height1, const double height2) const;
261 
263 
266  void SetCherenkovEnergyCutoff(const double eCut) const;
267 
269  double AngularCherenkovCDF(const double theta,
270  const double verticalDepth,
271  const double showerAge) const;
272 
274  double AngularCherenkovPDF(const double theta,
275  const double verticalDepth,
276  const double showerAge) const;
277 
280  const utl::Point& xB,
281  const double showerAge) const;
282 
285  const utl::Point& xB,
286  const utl::Point& xEye,
287  const double showerAge) const;
288 
289  double
291  const utl::Point& xB,
292  const utl::Point& xEye,
293  const double showerAge) const;
294 
295  double
297  const utl::Point& xB,
298  const utl::Point& xEye,
299  const double showerAge,
300  const double wavelength) const;
302 
305  };
306 
308  void SetUncertaintyBound(const ModelWithUncertainty model,
309  const double nSigma) const;
310 
313 
315 
316  const AerosolDB& GetAerosolDB() const;
317 
319 
320  const MolecularDB& GetMolecularDB(const MolecularIds::ProfileId& id) const;
321 
323 
324  const OverallQualityDB& GetOverallQualityDB() const;
325 
327 
328  const LidarDB& GetLidarDB() const;
329 
331 
332  const GOESDB& GetGOESDB() const;
333 
335 
336  private:
337  Atmosphere(const Atmosphere&);
339 
340  void Init();
341 
342  void Clean();
343 
344  static bool HasModel(VModel* const model);
345 
348  VMieModel* fMieModel = nullptr;
353 
354  mutable AerosolDB* fAerosolDB = nullptr;
356  mutable LidarDB* fLidarDB = nullptr;
357  mutable GOESDB* fGOESDB = nullptr;
358 
359  typedef std::map<MolecularIds::ProfileId, MolecularDB*> MolecularDBMap;
361 
362  friend class det::Detector;
363 
364  };
365 
366 }
367 
368 
369 #endif
Top of the interface to Atmosphere information.
const utl::TabulatedFunction & EvaluateFluorescenceYield(const double heightAboveSeaLevel) const
Evaluated Fluorescence Yield for a specific model.
Base class for a Mie Model.
Definition: VMieModel.h:38
Point object.
Definition: Point.h:32
void InitSlantProfileModel(const utl::Point &core, const utl::Vector &dir, const double deltaX) const
atm::AttenuationResult EvaluateMieAttenuation(const utl::Point &xInit, const utl::Point &xFinal, const std::vector< double > &wLength) const
constexpr double km
Definition: AugerUnits.h:125
const std::vector< double > & GetWavelengths(const EmissionMode mode=eFluorescence) const
const atm::ProfileResult & EvaluateHeightVsSlantDepth() const
Table of height as a function of slant depth.
Detector description interface for GOES cloud data.
Definition: GOESDB.h:29
double AngularCherenkovPDF(const double theta, const double verticalDepth, const double showerAge) const
angular Cherenkov light distribution
const OverallQualityDB & GetOverallQualityDB() const
low-level interface to portion of the database summarizing overall quality
Class to hold collection (x,y) points and provide interpolation between them.
VFluorescenceModel * fFluorescenceModel
const atm::ProfileResult & EvaluatePressureVsHeight() const
Tabulated function giving Y=air pressure as a function of X=height.
Base class for a Cherenkov Model.
const atm::ProfileResult & EvaluateDensityVsHeight() const
Tabulated function giving Y=density as a function of X=height.
double GetRayleighAttenuationLength(const utl::Point &xA, const double wLength) const
const atm::ProfileResult & EvaluateDistanceVsSlantDepth() const
Table of distance as a function of slant depth.
std::map< MolecularIds::ProfileId, MolecularDB * > MolecularDBMap
Detector description interface for data in the Atm_Molecular database.
Definition: MolecularDB.h:29
Base class for an Rayleigh Model.
Class holding the output of the ScatteringResult function.
static bool HasModel(VModel *const model)
double AngularCherenkovCDF(const double theta, const double verticalDepth, const double showerAge) const
cumulative of angular Cherenkov distribution from 0 to theta
Base class of atmospheric functions.
Definition: VModel.h:35
Class for loading and storing a collection of aerosol data.
Definition: AerosolDB.h:14
Fluorescence Detector Pixel event.
Definition: FEvent/Pixel.h:28
const GOESDB & GetGOESDB() const
low-level interface to the cloud information from the GOES database
Class describing the Atmospheric profile.
Definition: ProfileResult.h:25
const utl::TabulatedFunction & EvaluateCherenkovDirect(const utl::Point &xA, const utl::Point &xB, const utl::Point &xEye, const double showerAge) const
ProfileId
Monitoring profiles:
Definition: MolecularIds.h:8
atm::AttenuationResult EvaluateRayleighAttenuation(const utl::Point &xInit, const utl::Point &xFinal, const std::vector< double > &wLength) const
Compute Rayleigh attenuation between points.
Top of the hierarchy of the detector description interface.
Definition: Detector.h:81
double GetDeExcitationTime(const double height) const
get fluorescence de-excitation time
const MolecularDB & GetMolecularDB(const MolecularIds::ProfileId &id) const
Low-level interface to portion of the database with molecular information.
double GetMieAttenuationLength(const utl::Point &xA, const double wLength) const
const atm::ProfileResult & EvaluateDepthVsHeight() const
Tabulated function giving Y=depth as a function of X=height.
atm::ScatteringResult EvaluateRayleighScattering(const utl::Point &xA, const utl::Point &xB, const double angle, const double distance, const std::vector< double > &xLength) const
OverallQualityDB * fOverallQualityDB
Provides translational services for inclined profile.
Store the obscuration of an FD pixel by a cloud in the field of view.
Definition: CloudResult.h:43
Atmosphere & operator=(const Atmosphere &)
Detector description interface for LidarDB-realted data.
Definition: LidarDB.h:26
const AerosolDB & GetAerosolDB() const
Low-level interface to portion of the database with aerosol information.
Description of a pixel.
const utl::TabulatedFunction & EvaluateCherenkovPhotons(const utl::Point &xA, const utl::Point &xB, const double showerAge) const
double GetVerticalTimeOfFlight(const double height1, const double height2) const
Evaluate light signal time-of-flight between two altitudes.
Vector object.
Definition: Vector.h:30
InclinedAtmosphericProfile * fInclinedProfileModel
double EvaluateDirectCherenkovProbability(const utl::Point &xA, const utl::Point &xB, const utl::Point &xEye, const double showerAge) const
double GetdEdX0() const
get reference energy deposit for fluorescence yield model
double GetVerticalAerosolOpticalDepth(const unsigned int eyeId, const double altitude=4.5 *utl::km) const
Retrieve vertical optical depth at some location and altitude.
void SetCherenkovEnergyCutoff(const double eCut) const
double IntegratedGrammage(const utl::Point &pStart, const utl::Point &pStop, const double delta) const
const atm::ProfileResult & EvaluateHeightVsDepth() const
Tabulated function giving Y=height as a function of X=depth.
Access to database describing overall atmospheric quality.
const atm::ProfileResult & EvaluateRefractionIndexVsHeight() const
Tabulated function giving Y=refraction index as a function of X=height.
const atm::ProfileResult & EvaluateSlantDepthVsDistance() const
atm::CloudResult EvaluateCloudCoverage(const fdet::Pixel &pix, const utl::Point &x) const
const atm::ProfileResult & EvaluateVaporPressureVsHeight() const
Tabulated function giving Y=H20 vapor pressure as a function of X=height.
void SetUncertaintyBound(const ModelWithUncertainty model, const double nSigma) const
alter Model &quot;model&quot; by &quot;nSigma&quot; standard deviations
Base class for cloud coverage calculations.
Definition: VCloudModel.h:39
const atm::ProfileResult & EvaluateTemperatureVsHeight() const
Tabulated function giving Y=temperature as a function of X=height.
Class describing the Atmospheric attenuation.
Base class for a Profile Model.
Definition: VProfileModel.h:26
const LidarDB & GetLidarDB() const
low-level interface to portion of the database with cloud data from lidar analysis ...
const atm::ProfileResult & EvaluateHeightVsDistance() const
Table of height as a function of distance.
atm::ScatteringResult EvaluateMieScattering(const utl::Point &xA, const utl::Point &xB, const double angle, const double distance, const std::vector< double > &xLength) const

, generated on Tue Sep 26 2023.