UnivParamTime.h
Go to the documentation of this file.
1 #ifndef __UnivParamTime_h_
2 #define __UnivParamTime_h_
3 
4 #include <math.h>
5 
6 #ifndef UNDEF
7 #define UNDEF -100
8 #endif
9 
10 //----------------------------------------------------------
11 // WARNINGS:
12 // GetAtmosphericCorrection/ tQuantileCorrection / tStartCorrection : calculated for WCD and used for ASCII
13 // tQuantileCorrection_AoP : not implemented for ASCII
14 //
15 //----------------------------------------------------------
16 
17 namespace UnivParamTimeNS {
18 
19 
20  // Variables needed to calculate attenuation parameter
21  //-----------------------------------------------------
22 
23  const bool XmaxShift_time[4] = { true, true , true, true };
24  const bool UseDiffusive_time[4] = { true, true , true, true };
25  const bool UseDL_time[4] = { true, true , true, true };
26 
27  // Parameterization distances/angles
28  //-----------------------------------------------------
29 
30  static const int nParDist = 8;
31  static const double TimeModelParDist[nParDist] = {100.e2, 200.e2, 400.e2, 800.e2, 1000.e2, 1500.e2, 2000.e2, 2500.e2};
32  static const int nParTheta = 7;
33  static const double TimeModelParTheta[nParTheta] = { 0., 12.*M_PI / 180., 25.*M_PI / 180., 36.*M_PI / 180., 45.*M_PI / 180., 53.*M_PI / 180., 60.*M_PI / 180.};
34 
35  const int nPar_Stage1 = 4, nPar_Stage2 = 3, nPar_Stage2_Theta = 2;
36 
37  //
38  const double ndev = 1.28156; // The number of sigma that the reference quantiles correspond to
39 
40  // Ranges outside of which the variable is fixed to the lower/upper range
41  //-----------------------------------------------------
42  static const double theta_Low = 0., theta_High = 65.*180. / M_PI;
43  static const double logE_Low = 17.5, logE_High = 21.;
44  static const double r_Low = 10.e2;
45  static const double r_High = 2200.e2;
46  static const double ms_minVal = 0.01;
47 
48  //-------------------------
49  //-------------------------
50  static const double OffsetM_Mu_0deg [4] = { 0.00, 0.03, 0.04, 0.07 };
51  static const double OffsetM_Mu_60deg[4] = { 0.00, 0.02, 0.03, 0.04 };
52  //-------------------------
53  //-------------------------
54 
55  class UnivParamTime {
56 
57  private:
58 
59  int fDetectorType; // [0] WCD
60  double fOffsetM_Mu;
62 
63  int ith_min, ith_max; // Zenith angle ranges -> Interpolation limits
64  int ir_min, ir_max; // Core distance ranges -> Interpolation limits
65  double logE_ref, Xmax_ref;
66 
67  // ms0,ms1,ms2,ms_logE
69  // ms_slope ms_psi_up , ms_psi_down
72 
73  double BinomialNorm[200][99];
74  double Binomial_q[200][99][3];
75 
76 
77  public:
78 
79  UnivParamTime(int DetectorType);
81 
82 
83  double GetD_TO(double X, double theta, double logE, int icomp);
84 
85  double GetMS(double DL, double logE, double theta, double r, double psi , int icomp, int iMS, double* par_stage1, double* par_stage2);
86  double GetMS_ir(double DL, double logE, double theta, int ir, double psi , int icomp, int iMS);
87  double GetMS_ir_ith(double DL, double logE, int ith, int ir, double psi , int icomp, int iMS);
88 
89  double interpol(double v1, double v2, double x1, double x2, double x);
90  double GetMS(double DL, double logE, double theta, double r, double psi , int icomp, int iMS);
91 
92  bool GetShapeParameters(double* DL, double r, double logE, double psi, double theta, double* m, double* s);
93 
94  double GetFraction(double* t0, double* m, double* s, double* fcomp, double ti, bool isCDF);
95  double GetFraction(double* DL, double r , double logE, double psi, double theta, double* fcomp, double* t0, double ti, bool isCDF);
96 
97  double GetCDF(double* t0, double* m, double* s, double* fcomp, double ti);
98  double GetCDF(double* DL, double r , double logE, double psi, double theta, double* fcomp, double* t0, double ti);
99 
100  double GetPDF(double* t0, double* m, double* s, double* fcomp, double ti);
101  double GetPDF(double* DL, double r , double logE, double psi, double theta, double* fcomp, double* t0, double ti);
102 
103  double GetTime(double* DL, double r , double logE, double psi, double theta, double* fcomp, double* t0, double fi);
104  double GetTime(double* t0, double* m, double* s, double* fcomp, double fi);
105 
106  double GetPoissonFactor(double fem, double f);
107  double tQuantilePDF(double* t0, double* m, double* s, double* fcomp, double vemTot, double ti, double f, bool UseApprox, double pf, double& mean, double& rms);
108  double tQuantilePDF(double* t0, double* m, double* s, double* fcomp, double vemTot, double ti, double f, bool UseApprox, double& mean, double& rms);
109  double tQuantilePDF(double* DL, double r, double logE, double psi, double theta, double* fcomp, double* t0, double vemTot, double ti, double f,
110  bool UseApprox, double& mean, double& rms);
111 
112  double GetBinomialNorm(double N, double f , double* fq);
113  double QuantilePDF(double N, double fi, double f);
114  double QuantilePDF(double N, double fi, double f, double* fq);
115 
116  double tFirstPDF(double t0_mu, double m_mu, double s_mu, double npart, double t, bool UseApprox, double& mean, double& rms);
117  double tFirstPDF(double DL_mu, double r, double logE, double psi, double theta, double t0_mu, double npart, double t);
118  double tFirstPDF(double DL_mu, double r, double logE, double psi, double theta, double t0_mu, double npart, double t, bool UseApprox, double& mean, double& rms);
119 
120  double tQuantileCorrection(double NanoSecPerVEM, int iq);
121  double tStartCorrection(double r, double logE, double theta, bool Is8nsFADC);
122 
123  double tQuantileCorrection_AoP(double RiseTime, int iq, double AoP);
124 
125  void SetOffsetM_Mu(double Offset)
126  {
127  fOffsetM_Mu = Offset;
128  }
129  double GetOffsetM_r(double r, int icomp);
130  };
131 }
132 
133 #endif // __UnivParamTime_h_
static const double r_High
Definition: UnivParamTime.h:45
double QuantilePDF(double N, double fi, double f)
double TimeModelPar_Stage2[4][nParDist][nParTheta][2][nPar_Stage2]
Definition: UnivParamTime.h:70
static const double logE_Low
Definition: UnivParamTime.h:43
const int nPar_Stage2_Theta
Definition: UnivParamTime.h:35
bool GetShapeParameters(double *DL, double r, double logE, double psi, double theta, double *m, double *s)
double GetMS(double DL, double logE, double theta, double r, double psi, int icomp, int iMS, double *par_stage1, double *par_stage2)
static const double TimeModelParDist[nParDist]
Definition: UnivParamTime.h:31
double interpol(double v1, double v2, double x1, double x2, double x)
static const int nParTheta
Definition: UnivParamTime.h:32
double GetMS_ir_ith(double DL, double logE, int ith, int ir, double psi, int icomp, int iMS)
static const double OffsetM_Mu_60deg[4]
Definition: UnivParamTime.h:51
double eTimeModelPar_Stage2[4][nParDist][nParTheta][2][nPar_Stage2]
Definition: UnivParamTime.h:70
double GetD_TO(double X, double theta, double logE, int icomp)
double GetOffsetM_r(double r, int icomp)
const bool XmaxShift_time[4]
Definition: UnivParamTime.h:23
static const double TimeModelParTheta[nParTheta]
Definition: UnivParamTime.h:33
double tQuantilePDF(double *t0, double *m, double *s, double *fcomp, double vemTot, double ti, double f, bool UseApprox, double pf, double &mean, double &rms)
double TimeModelPar_Stage2_Theta[4][nParDist][2][nPar_Stage2][nPar_Stage2_Theta]
Definition: UnivParamTime.h:71
static const double ms_minVal
Definition: UnivParamTime.h:46
double Binomial_q[200][99][3]
Definition: UnivParamTime.h:74
double GetCDF(double *t0, double *m, double *s, double *fcomp, double ti)
const int nPar_Stage2
Definition: UnivParamTime.h:35
static const double theta_Low
Definition: UnivParamTime.h:42
constexpr double s
Definition: AugerUnits.h:163
static const double r_Low
Definition: UnivParamTime.h:44
double tStartCorrection(double r, double logE, double theta, bool Is8nsFADC)
static const double logE_High
Definition: UnivParamTime.h:43
static const double theta_High
Definition: UnivParamTime.h:42
double GetMS_ir(double DL, double logE, double theta, int ir, double psi, int icomp, int iMS)
const bool UseDiffusive_time[4]
Definition: UnivParamTime.h:24
const int nPar_Stage1
Definition: UnivParamTime.h:35
double GetPoissonFactor(double fem, double f)
void SetOffsetM_Mu(double Offset)
UnivParamTime(int DetectorType)
double tFirstPDF(double t0_mu, double m_mu, double s_mu, double npart, double t, bool UseApprox, double &mean, double &rms)
static const int nParDist
Definition: UnivParamTime.h:30
static const double OffsetM_Mu_0deg[4]
Definition: UnivParamTime.h:50
double GetPDF(double *t0, double *m, double *s, double *fcomp, double ti)
double GetTime(double *DL, double r, double logE, double psi, double theta, double *fcomp, double *t0, double fi)
double GetFraction(double *t0, double *m, double *s, double *fcomp, double ti, bool isCDF)
double tQuantileCorrection_AoP(double RiseTime, int iq, double AoP)
constexpr double m
Definition: AugerUnits.h:121
double TimeModelPar_Stage1[4][nParDist][2][nPar_Stage1]
Definition: UnivParamTime.h:68
double tQuantileCorrection(double NanoSecPerVEM, int iq)
const double ndev
Definition: UnivParamTime.h:38
double GetBinomialNorm(double N, double f, double *fq)
const bool UseDL_time[4]
Definition: UnivParamTime.h:25

, generated on Tue Sep 26 2023.