ZombieGraveyard/LDFFinderOG/EnergyConversion.cc
Go to the documentation of this file.
1 #include <cmath>
2 #include <utl/Math.h>
3 #include "EnergyConversion.h"
4 
5 using namespace std;
6 using namespace utl;
7 using namespace LDFFinderOG;
8 
9 
10 /*
11  The energy estimate is rather independent of the LDF used
12  (see the Auger ICRC 2005 contribution on LDFs).
13  For now we use the energy conversion, which is given in the
14  Auger ICRC 2007 paper on the energy spectrum (i.e. CIC).
15 */
16 void
17 EnergyConversion::GetEnergy(const double cosTheta, const double s1000, const double s1000Err,
18  double& energy, double& energyErr)
19  const
20 {
21  const double cos2deg38 = 0.620960947799833907; // Sqr(cos(38*degree))
22  const double x = Sqr(cosTheta) - cos2deg38;
23  const double cic = 1 + x * (fAttenuationPar1 + x * (fAttenuationPar2 + x * fAttenuationPar3));
24  if (cic > 0) {
25  const double s38 = s1000 / cic;
26  energy = fEnergyS38Const * pow(s38, fEnergyS38Slope);
27  energyErr = fEnergyS38Slope * energy * s1000Err / s1000;
28  } else
29  energy = energyErr = 0;
30 }
31 
32 
33 /*void
34 EnergyConversion::GetEnergyICRC2005(const double cosTheta, const double s1000, const double s1000Err,
35  double& energy, double& energyErr)
36  const
37 {
38 
39 }*/
40 
41 
42  /* ICRC05 parameters
43  const double theta = fgShowerAxis.GetTheta(fgLocalCS)/degree;
44  const double cic = 1.049 + 0.00974 * theta - 0.00029 * Sqr(theta);
45  const double fS38 = fi.fS1000/cic;
46 
47  const double b0 = 0.16;
48  const double b1 = 1.06;
49  */
50 
51  /*const double cosTheta = fgShowerAxis.GetCosTheta(fgLocalCS);
52  const double cos2deg38 = 0.620960947799833907; // Sqr(cos(38*degree))
53  const double normalizedAngle = Sqr(cosTheta) - cos2deg38;*/
54  /* ICRC07 parameters
55  const double cic = 1 + 0.92*normalizedAngle - 1.13*Sqr(normalizedAngle);
56  const double b0 = 0.149;
57  const double b1 = 1.078;
58  */
59  /*const double cic = 1 + fEnergyConversion.fAttenuationPar1 * normalizedAngle
60  + fEnergyConversion.fAttenuationPar2 * Sqr(normalizedAngle)
61  + fEnergyConversion.fAttenuationPar3 * pow(normalizedAngle, 3);
62 
63  const double fS38 = fi.fS1000/cic;
64  if (cic > 0) {
65  fi.fEnergy = fEnergyConversion.fEnergyS38Const * pow(fS38, fEnergyConversion.fEnergyS38Slope);
66  fi.fEnergyErr = fEnergyConversion.fEnergyS38Slope * fi.fEnergy * fi.fS1000Err/fi.fS1000;
67  } else
68  fi.fEnergy = fi.fEnergyErr = 0;*/
69 
70  /* old parameterization: see P. Summers ICRC 2005
71 
72  const double secTheta = 1/fgShowerAxis.GetCosTheta(fgLocalCS);
73 
74  if (fgLDFType == ePL) {
75  const double b0 = 1/7.8 * sqrt(1 + 11.8*Sqr(secTheta - 1));
76  const double b1 = 1.052;
77  const double e = b0 * fi.fS1000;
78  fi.fEnergy = pow(e, b1) * EeV;
79  fi.fEnergyErr = b1 * fi.fEnergy * fi.fS1000Err/fi.fS1000;
80  } else {
81  const double secTheta2 = Sqr(secTheta);
82  const double b0 = 0.37 - 0.51*secTheta + 0.30*secTheta2;
83  const double b1 = 1.27 - 0.27*secTheta + 0.08*secTheta2;
84  fi.fEnergy = b0 * pow(fi.fS1000, b1) * EeV;
85  fi.fEnergyErr = b1 * fi.fEnergy * fi.fS1000Err/fi.fS1000;
86  }*/
constexpr T Sqr(const T &x)
double pow(const double x, const unsigned int i)

, generated on Tue Sep 26 2023.