2 #include <utl/AugerUnits.h>
3 #include <utl/MathConstants.h>
4 #include <utl/ErrorLogger.h>
5 #include <sdet/STimeVariance.h>
17 const double kRadius = 1.8;
18 const double kHeight = 1.2;
19 const double sinTheta =
sqrt(1 -
Sqr(cosTheta));
20 return 1 / (cosTheta + 2*kHeight*sinTheta/(
kPi*kRadius));
26 MeanT50(
const double cosTheta,
const double distance)
32 constexpr
double delta = 20;
33 constexpr
double p1 = delta * (-0.11);
34 constexpr
double p2 = delta * 0.53;
35 const double p3 = p2 * cosTheta;
36 const double p4 = std::exp(p1 + p3);
37 constexpr
double p5 = std::exp(0.1*delta);
38 const double fz = std::log(p4 + p5) / delta;
45 LimitT50(
const double t50,
const double cosTheta,
const double distance)
48 const double limit = 0.5 *
MeanT50(cosTheta, distance);
49 return (t50 < limit) ? limit : t50;
58 return a2 *
Sqr(2*t50/n) * (n - 1) / (n + 1) + b2;
64 VarianceForm2007(
const double n,
const double t50,
const double tmin,
const double a2,
const double b2)
67 return a2 *
Sqr((t50 + tmin)/(n + 1)) * n / (n + 2) + b2;
76 return a2 *
Sqr(2*t50/(n - 1)) * n / (n + 2) + b2;
81 STimeVariance::GetTimeSigma2(
const double signal,
const double t50,
const double cosTheta,
const double distance)
88 return (600*
nanosecond2 + 1.2*
Sqr(t50/signal)) * (0.4 + 1.2*cosTheta);
101 const double dt =
LimitT50(t50, cosTheta, distance);
103 const double a2 = 0.67612 + cosTheta*(0.16106 + cosTheta*(-0.47641));
104 const double b2 = (128 + cosTheta*(-184 + cosTheta*413)) *
nanosecond2;
110 const double dt =
LimitT50(t50, cosTheta, distance);
111 const double a2 = 0.64871 + cosTheta*(0.22365 + cosTheta*(-0.49971));
112 const double b2 = (141.24 + cosTheta*(-208.90 + cosTheta*412.19)) *
nanosecond2;
117 const double meanT50 =
MeanT50(cosTheta, distance);
118 const double dt = (n < 4 && t50 < meanT50) ? meanT50 : t50;
120 const double a2 = 0.64871 + cosTheta*(0.22365 + cosTheta*(-0.49971));
121 const double b2 = (141.24 + cosTheta*(-208.90 + cosTheta*412.19)) *
nanosecond2;
126 ERROR(
"You should specify a TimeVariance model!");
double VarianceForm2012(const double n, const double t50, const double a2, const double b2)
constexpr T Sqr(const T &x)
double RelativeTrackLength(const double cosTheta)
double LimitT50(const double t50, const double cosTheta, const double distance)
constexpr double nanosecond
double MeanT50(const double cosTheta, const double distance)
double VarianceForm2007(const double n, const double t50, const double tmin, const double a2, const double b2)
double VarianceForm2006(const double n, const double t50, const double a2, const double b2)
constexpr double nanosecond2
#define ERROR(message)
Macro for logging error messages.