4 #ifndef _cic_utl_Math_h_
5 #define _cic_utl_Math_h_
18 constexpr
double degree = M_PI / 180;
35 return Sqr(std::sin(x));
54 return 1 / (1 + std::exp(-x));
85 const double d = 2*delta;
99 const std::function<double(double, double)>
gQuad =
107 return 0.5*(1 + std::erf(x/delta));
125 const double x2,
const double y2,
136 const double totalWeight = 0);
141 const double totalWeight = 0);
149 for (
const auto& row : wcdf)
161 nTot = std::accumulate(counts.begin(), counts.end(), T(0));
165 const unsigned int n = counts.size();
166 const double nExp = nTot / n;
168 for (
const T
c : counts)
169 chi2 +=
Sqr(nExp -
c);
170 return chi2 / (nExp * (n - 1));
180 for (
const auto& row : counts) {
181 const double rowTot = std::accumulate(row.begin(), row.end(), T(0));
185 const unsigned int bins = row.size();
186 const double mean = rowTot / bins;
188 for (
const T nBin : row)
189 rowChi2 +=
Sqr(mean - nBin);
190 chi2 += rowChi2 * bins / (bins - 1);
201 if (mean < 0 || n < 0)
202 return numeric_limits<double>::infinity();
204 return (n == 0) ? 0 : numeric_limits<double>::infinity();
205 return mean - n * log(mean) + TMath::LnGamma(n + 1);
214 if (mean < 0 || n < 0)
226 return 0.5*(std::log(2*M_PI) - std::log(z)) + z * (std::log(z + 1/(12*z - 1/(10*z))) - 1);
235 nTot = std::accumulate(counts.begin(), counts.end(), T(0));
239 const unsigned int n = counts.size();
240 const double nExp = nTot / n;
242 for (
const T
c : counts)
243 chi2 += (
c ?
c * std::log(
c) : 0);
244 chi2 -= nTot * std::log(nExp);
255 for (
const auto& row : counts)
constexpr double Interpolate(const double dx, const double dy, const double x)
constexpr T Sqr(const T &x)
double UniformKolmogorovSmirnov(const vector< pair< double, double >> &wcdf, double wtot)
double Sin2Deg(const double x)
double Fermi(const double x)
constexpr double LinearSigmoid(const double x, const double delta)
double PoissonProbability(const double mean, const double n)
double ErfSigmoid(const double x, const double delta)
double PoissonDeviance(const double mean, const double n)
double UniformPoissonChi2(const std::vector< T > &counts, double nTot=0)
double UniformAndersonDarling(const vector< pair< double, double >> &wcdf, double wtot)
double QuadraticSigmoid(const double x, const double delta)
double Sin2(const double x)
const std::function< double(double, double)> gQuad
constexpr double StepFunction(const double x)
double NemesLnGamma(const double z)
double UniformChi2Ndof(const std::vector< T > &counts, double nTot=0)