3 #include <utl/ErrorLogger.h>
4 #include <utl/AugerUnits.h>
11 namespace LDFFinderKG {
14 EnergyConversion::SetCICParameters(
const vector<double>& par0,
15 const vector<double>& par1,
16 const vector<double>& par2)
18 fCicParameters[0] = par0;
19 fCicParameters[1] = par1;
20 fCicParameters[2] = par2;
22 const unsigned int n = fgOrderInS38 + 1;
23 for (
unsigned int i = 0; i < fgOrderInTheta; ++i)
24 if (fCicParameters[i].size() != n)
30 EnergyConversion::GetS38(
const double s1000,
const double cosTheta)
33 const double eps = 1e-4;
34 const double x = GetX(cosTheta);
36 double s38 = fCicReferenceS38;
39 const double s38new = s1000 / AttenuationFunction(x, s38);
40 const double diff =
std::abs(s38 - s38new);
42 if (s38 <= 0 || diff / s38 < eps)
48 err <<
"S38 assigment did not converge, last value S38 = " << s38;
55 warn <<
"Got negative approximation for S38 = " << s38 <<
" with input values "
56 "S1000 = " << s1000 <<
", "
57 "x = " << x <<
" (theta = " << acos(cosTheta)/
utl::degree <<
" deg)";
67 EnergyConversion::GetEnergy(
const double cosTheta,
const double s1000,
68 const double s1000Err,
const double s1000Sys,
69 double& energy,
double& energyErr,
double& energySys)
72 const double s38 = GetS38(s1000, cosTheta);
74 energy = energyErr = energySys = 0;
77 energy = fEnergyConstant *
std::pow(s38, fEnergySlope);
78 const double err = fEnergySlope * energy / s1000;
79 energyErr = err * s1000Err;
80 energySys = err * s1000Sys;
Base class for exceptions arising because configuration data are not valid.
double pow(const double x, const unsigned int i)
double abs(const SVector< n, T > &v)
#define WARNING(message)
Macro for logging warning messages.
#define ERROR(message)
Macro for logging error messages.