1 #ifndef _utl_QuadraticFitter_h_
2 #define _utl_QuadraticFitter_h_
7 #include <utl/Histogram.h>
8 #include <utl/AugerException.h>
9 #include <utl/QuadraticFitData.h>
26 static double GetError(
const double& ) {
return 1; }
27 static double GetError2(
const double& ) {
return 1; }
38 template<
class Histogram,
class ErrorPolicy >
39 class QuadraticFitter {
45 const int startBin,
const int stopBin)
48 if (startBin < 0 || stopBin - startBin < 3 || stopBin >=
int(h.GetNBins()))
53 const double xStart,
const double xStop)
56 int start = h.GetBinIndex(xStart);
60 int stop = h.GetBinIndex(xStop);
62 stop = h.GetNBins() - 1;
64 if (start < 0 || stop < 0 || stop - start < 3)
85 const double k22 =
Sqr(
fK[2]);
102 NeedsCoeficient<0>();
116 for (
int i = 0; i < 3; ++i)
117 polynomialCoeff[i] =
fK[i] /
fDet;
119 polynomialCoeff[0] +=
121 polynomialCoeff[1] *
fMeanX +
123 polynomialCoeff[1] = 0;
144 for (
unsigned int i = fStartBin; i <
fStopBin; ++i) {
154 for (
unsigned int i = fStartBin; i <
fStopBin; ++i) {
157 const double invSigma2 =
Sqr(
fHistogram.GetBinSize(i)) / ErrorPolicy::GetError2(raw);
160 const double xs = x * invSigma2;
162 const double ys = y * invSigma2;
166 const double x2s = x * xs;
169 const double x3s = x * x2s;
184 template<
unsigned int index>
224 double fK[3] = { 0 };
229 template<
class Histogram,
class ErrorPolicy>
231 QuadraticFitter<Histogram, ErrorPolicy>
237 template<
class Histogram>
239 QuadraticFitter<Histogram>
246 template<
class Histogram,
typename Type,
class ErrorPolicy>
248 QuadraticFitter<Histogram, ErrorPolicy>
250 const Type xStart,
const Type xStop,
251 [[maybe_unused]]
const ErrorPolicy ep)
256 template<
class Histogram,
typename Type>
258 QuadraticFitter<Histogram>
260 const Type xStart,
const Type xStop)
constexpr T Sqr(const T &x)
Holds result of the quadratic fit.
double GetExtremePosition(double &posError, double &chi2, int &ndof)
QuadraticFitter(const Histogram &h)
const Histogram & fHistogram
double GetBinAverage(const size_t i) const
double fExtremePositionError
static double GetError2(const double &)
Exception for reporting variable out of valid range.
QuadraticFitter(const Histogram &h, const double xStart, const double xStop)
const BinType & GetBin(const size_t i) const
double GetExtremePosition(double &posError, double &chi2, int &ndof, double polynomialCoeff[3])
static double GetError2(const double &value)
QuadraticFitter< Histogram, ErrorPolicy > MakeQuadraticFitter(const Histogram &h, const ErrorPolicy)
static double GetError(const double &value)
double GetExtremePosition(double &posError, int &ndof)
Type
The type of file that we are acutally opening.
static double GetError(const double &)
QuadraticFitter(const Histogram &h, const int startBin, const int stopBin)
void GetFitData(QuadraticFitData &fit)
double GetBinCenter(const size_t bin) const
double GetExtremePosition()