3 using namespace UnivCalibConstantsNS;
16 if (CalibOpt < -3 || CalibOpt > 3) {
17 printf(
"UnivCalibConstants: Fatal error CalibOpt \n");
24 }
else if (RecMixture < 0 || RecMixture >=
nRecMixtures || HadronicModel < 0 || HadronicModel > 3) {
25 printf(
"UnivCalibConstants: Fatal error RecMixture \n");
30 printf(
"UnivCalibConstants: Fatal error RecSys %d %d \n",
CalibOpt,
RecSys);
46 const double fProton19[
nRecMixtures] = {1, 0, 0.5, 0.1, 0.9, 1};
47 const double fProton20[
nRecMixtures] = {1, 0, 0.5, 0.1, 0.9, 0};
67 double meanXmax =
UNDEF;
73 const double logE0 = 18.36, Xmax0 = 754, ER0 = 71, ER1 = 19;
76 meanXmax = Xmax0 + (logE - logE0) * ER0;
78 meanXmax = Xmax0 + (logE - logE0) * ER1;
83 const double Xmax_PhotonSearch = 1050;
84 meanXmax = Xmax_PhotonSearch;
87 const double Xmax0_Models[4][2] = {{788, 703}, {819, 712}, {790, 695}, { 805, 709}};
88 const double A_Xmax_Models[4][2] = {{43, 51}, {63, 62}, {55, 56}, {56, 59}};
91 for (
int ip = 0; ip < 2; ++ip)
95 meanXmax = meanXmax_i[0] * fp + meanXmax_i[1] * (1 - fp);
117 double dX = Xmax - MeanXmax_pFe;
118 double Nmu = MeanNmu * (1. + 0.5 * atan(-dX / 40) / M_PI) / (1. + 0.5 * atan(-dX0 / 40) / M_PI) ;
127 double meanNmu =
UNDEF;
135 const double Nmu0_Auger = 1.99, A_Nmu_Auger = 0.21, B_Nmu_Auger = 0.17;
136 meanNmu = Nmu0_Auger + A_Nmu_Auger * (logE -
logE_Calib) + B_Nmu_Auger * (1 / cos(theta) - 2) ;
140 const double Nmu_PhotonSearch = 0.15;
141 meanNmu = Nmu_PhotonSearch;
143 const double Nmu0_Models[4][2] = {{0.98, 1.38}, {1.19, 1.70}, {1.20, 1.69}, {1.28, 1.82}};
144 const double A_Nmu_Models[4][2] = {{ -0.04, 0.02 }, { -0.14, -0.12}, {0.07, 0.13}, {0.01, 0.10}};
145 const double B_Nmu_Models[4][2] = {{ -0.01, -0.09}, { -0.04, -0.11}, { -0.01, -0.10}, { -0.01, -0.11}};
148 for (
int ip = 0; ip < 2; ++ip)
152 meanNmu = meanNmu_i[0] * fp + meanNmu_i[1] * (1 - fp);
188 const double offset = offsetM_Mu[0] + offsetM_Mu[1] * (1 / cos(theta) - 1);
201 double MeanXmax_pFe, ER_pFe;
217 return MeanXmax_pFe + (logE -
logE_Calib) * ER_pFe;
227 double A_p[2] = {51.5, 25.5}, B_p [2] = {0.8, 0.5};
228 double A_fe[2] = {43.5, 21}, B_fe[2] = {0.8, 0.76};
230 unsigned int infill = IsInfill;
232 double sigma_p = A_p[infill] * exp(-(logE - 19) * B_p[infill]);
233 double sigma_fe = A_fe[infill] * exp(-(logE - 19) * B_fe[infill]);
235 double sigma = 0.5 * (sigma_p + sigma_fe) + 0.5 * ndev * (sigma_p - sigma_fe);
258 return 0.2 - 0.05 * (logE - 19);
265 double slope = 1.025 - 0.1 * (logE - 19);
266 double sigma = (IsInfill ? 17.5 * exp(-(logE - 19) * 1) : 43 * exp(-(logE - 19) * 0.8));
267 if (rms / slope < sigma)
269 return sqrt(rms * rms / slope / slope - sigma * sigma);
static const double fNmuSys_Auger[nSys]
double GetMeanNmu(double logE, double theta)
double GetProtonFraction(double logE)
static const double ER_pFe_Models[nModels]
static const double MeanXmax_pFe_Models[nModels]
double GetMeanXmax_pFe(double logE)
double GetMeanXmax(double logE)
static const double OffsetM_Mu_Models[2][nModels]
double GetSigmaXmax_SD(double logE, int ndev, bool IsInfill)
static const double Offset_ER_pFe_Auger[nSys]
static const double MeanXmax_pFe_Auger
static const int nRecMixtures
double GetSigmaXmax_FD(double logE)
static const double ER_pFe_Auger
double GetSigmaNmu_FD(double logE)
UnivCalibConstants(int CalibOpt_i, int RecSys_i, int RecMixture_i)
static const double fXmaxSys_Auger[nSys]
static const double logE_Calib
static const double OffsetM_Mu_Auger[2][nSys]
static const double OffsetM_Mu_Photon[2]
static const double Offset_MeanXmax_pFe_Auger[nSys]
static const double OffsetM_Mu_Calib[2]
static const double MeanXmax_pFe_Calib
static const double fEnergySys_Auger[nSys]
double GetOffsetM_Mu(double theta)
static const double ER_pFe_Calib
double GetTrueRMSXmax(double rms, double logE, bool IsInfill)