1 #include <utl/AugerUnits.h>
2 #include <utl/TabularStream.h>
10 using namespace FdProfileReconstructorKG;
43 const double p = 9.30207e-01;
44 const double zeta_1 = 2.26745e-01;
45 const double zeta_2 = 2.90549e+00;
46 const double gamma = 1.48972e+00;
47 const double zeta = zetaAngle/
degree;
49 const double f1 = p * (1 - exp(-zeta/zeta_1));
50 const double f2 = (1 -
p) * (1 - exp(-
pow(zeta/zeta_2, gamma)));
61 const unsigned int n = 21;
62 const double angles[n] = {
63 1.4, 1.5, 1.6, 1.7, 1.8,
66 15, 18, 21, 24, 27, 30
69 const double cumulative[n] = {
70 0.859170, 0.861439, 0.863476,
71 0.865431, 0.867303, 0.869093,
72 0.870800, 0.883968, 0.892440,
73 0.898886, 0.904640, 0.910163,
74 0.915655, 0.921485, 0.937852,
75 0.953002, 0.966389, 0.977545,
76 0.986638, 0.994117, 1.000000
79 const double zeta = zetaAngle /
degree;
81 if (zeta < angles[0]) {
84 }
else if (zeta > angles[n-1])
89 for (
unsigned int i = 0; i < n; ++i)
105 const double zeta = zetaAngle /
degree;
107 const double par[4] = { 0.738, 0.0308, 0.818, 0.643 };
109 const double zeta0 = 0.7;
110 const double norm1 = par[0] * (1 - exp(-zeta0/par[1]));
111 const double norm2 = (1 - par[0]) * (1 - exp(-
pow(zeta0/par[2], par[3])));
112 const double norm = 1 - norm1 - norm2;
114 const double f1 = par[0] * (1 - exp(-zeta/par[1]));
115 const double f2 = (1 - par[0]) * (1 - exp(-
pow(zeta/par[2], par[3])));
116 const double f = 0.15 * (1 - f1 - f2);
128 const double zeta = zetaAngle /
degree;
129 const double maxDistance = 30 *
km;
130 const double d = fmin(dist, maxDistance) /
km;
136 const double x10 = d - 10;
137 const double x10Squared = x10 * x10;
139 const double a0 = 18.269707 - x10 * 0.539974 + x10Squared * 0.007218;
140 const double a1 = (0.192196 + x10 * 0.007970 + x10Squared * 0.005581) *
141 exp(-0.001762 * x10Squared);
143 const double b0 = 5.251938 - x10 * 0.294560;
144 const double b1 = 1.245041 - x10 * 0.129958;
145 const double b2 = -0.666616 + x10 * 0.067478;
147 const double z1 = zeta - 1;
148 const double p0 = a0 * exp(-a1 * z1) / (1 + 2 * z1);
149 const double p1 = (b0 + b1 * z1 + b2 *
pow(z1, 2)) * exp(-z1);
152 const double lightExcess = p0;
153 return (lightExcess < 0) ? 1 : 1 - lightExcess / 100;
155 const double lightExcess = p0 + (age - 1) / 0.2 * p1;
156 return (lightExcess < 0) ? 1 : 1 - lightExcess / 100;
176 <<
" Flasher2005 " <<
endc
177 <<
" Flasher2008 " <<
endc
178 <<
" SpotGroup " <<
endc
179 <<
" SpotGroup2 " <<
endr
182 for (
double dist = 1000; dist < 1.8; dist += 500)
183 for (
double age = 0.7; age < 1.8; age += 0.1)
185 tab << zeta / degree <<
endc
191 cout <<
"\n" << tab << endl;
unsigned int GetNPoints() const
double Flasher2008Fraction(const double zeta, const double age, const double dist) const
double SpotGroupFraction(const double zeta, const double age, const double dist) const
utl::TabulatedFunction fFlasher2008Table
void PushBack(const double x, const double y)
double Flasher2005Fraction(const double zet, const double age, const double dist) const
double pow(const double x, const unsigned int i)
double GetHaloFraction(const double zeta, const double age, const double dist) const
class to format data in tabular form
void PrintFractions() const
double SpotGroupFraction2(const double zeta, const double age, const double dist) const
double Y(const double x) const
Get or interpolate the Y value that corresponds to parameter x.