22 if (values1.GetLwb() != invCovMat.GetRowLwb() || values1.GetUpb() != invCovMat.GetRowUpb())
return -1;
23 if (values2.GetLwb() != invCovMat.GetColLwb() || values2.GetUpb() != invCovMat.GetColUpb())
return -1;
27 for (
int i = values1.GetLwb(); i <= values1.GetUpb(); i++) {
28 for (
int j = values2.GetLwb(); j <= values2.GetUpb(); j++) {
29 chi2Val += invCovMat(i, j)*values1(i)*values2(j);
41 cout <<
"Chi2Calc::deltas : Could not find overlap region between data and reference in [" << lw <<
", " << up <<
"]." << endl;
44 m_lwb = refVals.GetLwb();
45 m_upb = refVals.GetUpb();
66 if (dv.GetNrows() == 0)
return -1;
75 for (
int k =
lwb(); k <
upb(); k++)
76 chi2Val += dv(k)*dv(k)/(TMath::Power(
data.error(k),2) + errors(k,k));
97 if (!
result ||
r.GetNrows() < (
int)minNDof) {
108 TVectorD v =
data.values(
r.GetLwb(),
r.GetUpb());
113 k = sumR2==0 ? 0 : sumRV/sumR2;
114 chi2 = sumV2 - 2*k*sumRV + k*k*sumR2;
char data[hepevt_bytes_allocation_ATLAS]
double scalarProduct(const TVectorD &values1, const TVectorD &values2, const CovMatrix &invCovMat) const
TVectorD deltas(const AbsShape &data, const AbsShape &reference, CovMatrix &errors, const ScaledErrorData *shapeError=0, int lwb=-1, int upb=-1, bool noDataError=false)
double chi2(const AbsShape &data, const AbsShape &reference, const ScaledErrorData *shapeError=0, int lwb=-1, int upb=-1)
bool bestRescale(const AbsShape &data, const AbsShape &reference, double &k, double &chi2, double deltaT=0, const ScaledErrorData *sed=0, unsigned int minNDof=0) const
bool providesRange(int lw, int up) const
const TVectorD offsets(int first=-1, int last=-1) const
const CovMatrix errors(int first=-1, int last=-1) const
TMatrixTSym< double > CovMatrix