18 const double lgE = x[0];
23 lgJ = par[0] - par[2] * (lgE - par[1]);
25 double lgJ_exp = -par[3] * lgE - log10(1.0 + exp((lgE - par[4]) / par[5]));
26 double lgJ_ankle = -par[3] * par[1] - log10(1.0 + exp((par[1] - par[4]) / par[5]));
27 lgJ = par[0] + lgJ_exp - lgJ_ankle;
41 double J0 =
pow(10, par[0]);
42 double E12 =
pow(10, par[1]);
43 double E23 =
pow(10, par[4]);
45 double E =
pow(10, v[0]);
47 J =
pow(E / E12, -par[2]) * ( 1 +
pow(E / E12, par[2]) ) / (1 +
pow(E / E12, par[3] ) ) * (1. +
pow(E12 / E23, par[5]) ) / (1 +
pow(E / E23, par[5]));
67 const double lgE = x[0];
72 lgJ = par[0] - par[2] * (lgE - par[1]);
74 double E =
pow(10., lgE);
75 double Ea =
pow(10, par[1]);
76 double Es =
pow(10, par[4]);
78 double lgJ_exp = log10(1.0 +
pow(E / Es, par[5]));
79 double lgJ_ankle = log10(1.0 +
pow(Ea / Es, par[5]));
80 lgJ = par[0] - par[3] * (lgE - par[1]) + lgJ_ankle - lgJ_exp ;
104 const size_t breaks = n / 2 - 1;
105 const double lgE = x[0];
107 double lgJ = par[0] - par[breaks + 1] * (lgE - 18.5);
109 for (
size_t i = 1; i <= breaks; ++i) {
110 lgJ += TMath::Log10(1 +
pow(10, par[breaks + i] * (lgE - par[i])));
111 lgJ -= TMath::Log10(1 +
pow(10, par[breaks + i + 1] * (lgE - par[i])));
121 const double lgE = x[0];
126 lgJ = par[0] - par[2] * (lgE - par[1]);
128 lgJ = par[0] - par[3] * (lgE - par[1]);
144 const double lgNorm = par[0];
145 const double lgEbreak = par[1];
146 const double lgEa = par[2];
147 const double gamma0 = par[3];
148 const double gamma1 = par[4];
149 const double gamma2 = par[5];
150 const double rate = par[6];
152 const double lgE = x[0];
156 const double lgEs = 1000000;
157 const double dGamma = 2.5;
162 const double factor =
pow(10, lgE) /
pow(10, lgEbreak);
163 lgJ = lgNorm - gamma0 * (lgE - lgEbreak) + (gamma0 - gamma1) / rate * log10(1 +
pow(factor, rate));
165 const double factor =
pow(10, lgEa) /
pow(10, lgEbreak);
166 double E =
pow(10., lgE);
167 double Ea =
pow(10, lgEa);
168 double Es =
pow(10, lgEs);
169 double lgJ_exp = log10(1.0 +
pow(E / Es, dGamma));
170 double lgJ_ankle = log10(1.0 +
pow(Ea / Es, dGamma));
171 lgJ = lgNorm - gamma0 * (lgEa - lgEbreak) + (gamma0 - gamma1) / rate * log10(1 +
pow(factor, rate)) - gamma2 * (lgE - lgEa) + lgJ_ankle - lgJ_exp;
180 int ncol = x.GetNoElements();
183 for (
int i = 0; i < ncol; ++i)
191 int ncol = x.GetNoElements();
194 for (
int i = 0; i < ncol; ++i)
201 int ncol = x.GetNoElements();
204 for (
int i = 0; i < ncol; ++i)
211 int ncol = x.GetNoElements();
214 for (
int i = 0; i < ncol; ++i)
222 int ncol = x.GetNoElements();
225 for (
int i = 0; i < ncol; ++i)
233 int ncol = x.GetNoElements();
236 for (
int i = 0; i < ncol; ++i)
245 TVectorD
FluxModel(
string model, TVectorD x,
double* par) {
246 if (model ==
"StandardICRC2013")
248 else if (model ==
"StandardICRC2015")
250 else if (model ==
"StandardMultiSmooth")
252 else if (model ==
"InfillHard")
254 else if (model ==
"Spectrum2015_2017SmoothAnkle")
256 else if (model ==
"SpectrumInfillICRC2019")
260 cerr << model <<
": no valid unfolding function chosen " << endl;
261 throw std::exception();
270 if (model ==
"StandardICRC2013")
272 else if (model ==
"StandardICRC2015")
274 else if (model ==
"StandardMultiSmooth")
276 else if (model ==
"InfillHard")
278 else if (model ==
"Spectrum2015_2017SmoothAnkle")
280 else if (model ==
"SpectrumInfillICRC2019")
284 cerr << model <<
": no valid unfolding function chosen " << endl;
285 throw std::exception();
294 int ncol = x.GetNoElements();
297 for (
int i = 0; i < ncol; ++i)
298 f0s[i] = f0s[i] *
pow(10, x[i]);
300 TVectorD f1s = m * f0s;
301 f1s *= (x[1] - x[0]);
304 for (
int i = 0; i < ncol; ++i)
305 corr[i] = f0s[i] / f1s[i];
313 int ncol =
vecLgE.GetNoElements();
315 double* par = &parsFit[0];
318 for (
int i = 0; i < ncol; ++i)
325 for (
int i = 0; i < ncol; ++i)
326 corr[i] = f0s[i] / f1s[i];
double FluxModel(const modeltype mtype, double *x, double *par)
double SpectrumInfillFitFunction(double *x, double *par)
double pow(const double x, const unsigned int i)
double FluxModelMultiSmoothBreak(double *x, double *par)
Double_t Spectrum2015_2017SmoothAnkle(Double_t *v, Double_t *par)
double(*)(double *, double *) FluxModels(const modeltype mtype)
double SpectrumLgSmoothFitFunction2013(double *x, double *par)
double SpectrumInfillICRC2019(double *x, double *par)
TVectorD GetCorrectionFactor(const TVectorD x, const TMatrixD m, double *par, const modeltype mtype)
double SpectrumLgSmoothFitFunction2015(double *x, double *par)