ATLAS Offline Software
Loading...
Searching...
No Matches
LArSamples::Chi2Calc Class Reference

#include <Chi2Calc.h>

Inheritance diagram for LArSamples::Chi2Calc:
Collaboration diagram for LArSamples::Chi2Calc:

Public Member Functions

 Chi2Calc (int pars=0)
 Constructor (takes ownership of LArCellInfo object)
virtual ~Chi2Calc ()
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)
double scalarProduct (const TVectorD &values1, const TVectorD &values2, const CovMatrix &invCovMat) const
int lwb () const
int upb () const
unsigned int nDof () const
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 isInRange (int i) const
bool hasSameRange (int lw, int up) const
bool hasSameRange (const IndexRange &other) const
bool hasSameRange (const TVectorD &v) const
bool providesRange (int lw, int up) const
bool providesRange (const IndexRange &other) const
bool providesRange (const TVectorD &v) const
TString rangeStr () const
int commonLwb (const IndexRange &other) const
int commonUpb (const IndexRange &other) const
bool checkRange (int &l, int &h) const

Private Member Functions

bool useCorrs () const

Private Attributes

int m_pars
int m_lwb
int m_upb

Detailed Description

Definition at line 26 of file Chi2Calc.h.

Constructor & Destructor Documentation

◆ Chi2Calc()

LArSamples::Chi2Calc::Chi2Calc ( int pars = 0)
inline

Constructor (takes ownership of LArCellInfo object)

Definition at line 31 of file Chi2Calc.h.

32 : m_pars(pars), m_lwb(-1), m_upb(-1) { }

◆ ~Chi2Calc()

virtual LArSamples::Chi2Calc::~Chi2Calc ( )
inlinevirtual

Definition at line 34 of file Chi2Calc.h.

34{ }

Member Function Documentation

◆ bestRescale()

bool Chi2Calc::bestRescale ( const AbsShape & data,
const AbsShape & reference,
double & k,
double & chi2,
double deltaT = 0,
const ScaledErrorData * sed = 0,
unsigned int minNDof = 0 ) const

Definition at line 88 of file Chi2Calc.cxx.

90{
91 k = 1;
92 chi2 = -1;
93 ScaledShiftedShape shiftedData(data, 1, -deltaT);
94 TVectorD r;
96 bool result = reference.interpolate(shiftedData, r, errors, -1, -1); // lwb and upb will come from data
97 if (!result || r.GetNrows() < (int)minNDof) {
98 k = 0;
99 chi2 = 1E99;
100 return true;
101 }
102
103 if (sed) {
104 ScaledErrorData sed2(*sed, sed->scale(), sed->time() + deltaT);
105 if (sed2.providesRange(r)) r += sed2.offsets(r.GetLwb(), r.GetUpb());
106 }
107
108 TVectorD v = data.values(r.GetLwb(), r.GetUpb());
109 CovMatrix invCovMat = data.invCovarianceMatrix(r.GetLwb(), r.GetUpb(), errors, useCorrs());
110 double sumR2 = scalarProduct(r, r, invCovMat);
111 double sumRV = scalarProduct(r, v, invCovMat);
112 double sumV2 = scalarProduct(v, v, invCovMat);
113 k = sumR2==0 ? 0 : sumRV/sumR2; // optimal K-factor
114 chi2 = sumV2 - 2*k*sumRV + k*k*sumR2; // chi2
115
116 return true;
117}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
double scalarProduct(const TVectorD &values1, const TVectorD &values2, const CovMatrix &invCovMat) const
Definition Chi2Calc.cxx:19
double chi2(const AbsShape &data, const AbsShape &reference, const ScaledErrorData *shapeError=0, int lwb=-1, int upb=-1)
Definition Chi2Calc.cxx:60
bool useCorrs() const
Definition Chi2Calc.h:54
int r
Definition globals.cxx:22
const ScaledErrorData * sed

◆ checkRange()

bool IndexRange::checkRange ( int & l,
int & h ) const
inherited

Definition at line 14 of file IndexRange.cxx.

15{
16 if (l < 0)
17 l = lwb();
18 else if (!isInRange(l)) {
19 cout << "IndexRange::checkRange : lower bound " << l << " is out of bounds" << endl;
20 return false;
21 }
22
23 if (h < 0)
24 h = upb();
25 else if (!isInRange(h)) {
26 cout << "IndexRange::checkRange : upper bound " << h << " is out of bounds" << endl;
27 return false;
28 }
29
30 return true;
31}
virtual int lwb() const =0
bool isInRange(int i) const
Definition IndexRange.h:27
virtual int upb() const =0
l
Printing final latex table to .tex output file.

◆ chi2()

double Chi2Calc::chi2 ( const AbsShape & data,
const AbsShape & reference,
const ScaledErrorData * shapeError = 0,
int lwb = -1,
int upb = -1 )

Definition at line 60 of file Chi2Calc.cxx.

62{
63 double chi2Val = 0;
65 TVectorD dv = deltas(data, reference, errors, shapeError, lw, up, true);
66 if (dv.GetNrows() == 0) return -1;
67
68 // OFC version (gives correct error terms for individual samplings after OFC fit is performed
69 if (m_pars & OFCChi2) {
70 OFC ofc(reference, data, errors, lwb(), upb(), shapeError, useCorrs());
71 return scalarProduct(dv, dv, ofc.invGamma());
72 }
73 // Basic version --- fast, simple
74 if (m_pars & BasicChi2) {
75 for (int k = lwb(); k < upb(); k++)
76 chi2Val += dv(k)*dv(k)/(TMath::Power(data.error(k),2) + errors(k,k));
77 return chi2Val;
78 }
79 // Default version :
80 CovMatrix invCovMat = data.invCovarianceMatrix(lwb(), upb(), errors, useCorrs());
81/* dv.Print();
82 data.covarianceMatrix(lwb(), upb()).Print();
83 data.covarianceMatrix(lwb(), upb(), errors, useCorrs()).Print();*/
84 return scalarProduct(dv, dv, invCovMat);
85}
TVectorD deltas(const AbsShape &data, const AbsShape &reference, CovMatrix &errors, const ScaledErrorData *shapeError=0, int lwb=-1, int upb=-1, bool noDataError=false)
Definition Chi2Calc.cxx:36
int upb() const
Definition Chi2Calc.h:46
int lwb() const
Definition Chi2Calc.h:45

◆ commonLwb()

int LArSamples::IndexRange::commonLwb ( const IndexRange & other) const
inlineinherited

Definition at line 39 of file IndexRange.h.

39{ return (other.lwb() > lwb() ? other.lwb() : lwb()); }

◆ commonUpb()

int LArSamples::IndexRange::commonUpb ( const IndexRange & other) const
inlineinherited

Definition at line 40 of file IndexRange.h.

40{ return (other.upb() < upb() ? other.upb() : upb()); }

◆ deltas()

TVectorD Chi2Calc::deltas ( const AbsShape & data,
const AbsShape & reference,
CovMatrix & errors,
const ScaledErrorData * shapeError = 0,
int lwb = -1,
int upb = -1,
bool noDataError = false )

Definition at line 36 of file Chi2Calc.cxx.

38{
39 TVectorD refVals;
40 if (!reference.interpolate(data, refVals, errors, lw, up)) {
41 cout << "Chi2Calc::deltas : Could not find overlap region between data and reference in [" << lw << ", " << up << "]." << endl;
42 return TVectorD();
43 }
44 m_lwb = refVals.GetLwb();
45 m_upb = refVals.GetUpb();
46
47 TVectorD deltas = data.values(lwb(), upb());
48 deltas -= refVals;
49 if (shapeError && shapeError->providesRange(*this)) {
50 TVectorD offsets = shapeError->offsets(lwb(), upb());
51 deltas -= offsets;
52 errors += shapeError->errors(lwb(), upb());
53 }
54
55 if (!noDataError) errors = data.covarianceMatrix(lwb(), upb(), errors, useCorrs());
56 return deltas;
57}
bool providesRange(int lw, int up) const
Definition IndexRange.h:33
const TVectorD offsets(int first=-1, int last=-1) const
const CovMatrix errors(int first=-1, int last=-1) const

◆ hasSameRange() [1/3]

bool LArSamples::IndexRange::hasSameRange ( const IndexRange & other) const
inlineinherited

Definition at line 30 of file IndexRange.h.

30{ return hasSameRange(other.lwb(), other.upb()); }
bool hasSameRange(int lw, int up) const
Definition IndexRange.h:29

◆ hasSameRange() [2/3]

bool LArSamples::IndexRange::hasSameRange ( const TVectorD & v) const
inlineinherited

Definition at line 31 of file IndexRange.h.

31{ return hasSameRange(v.GetLwb(), v.GetUpb()); }

◆ hasSameRange() [3/3]

bool LArSamples::IndexRange::hasSameRange ( int lw,
int up ) const
inlineinherited

Definition at line 29 of file IndexRange.h.

29{ return (lwb() == lw && upb() == up); }

◆ isInRange()

bool LArSamples::IndexRange::isInRange ( int i) const
inlineinherited

Definition at line 27 of file IndexRange.h.

27{ return (i >= lwb() && i <= upb()); }

◆ lwb()

int LArSamples::Chi2Calc::lwb ( ) const
inlinevirtual

Implements LArSamples::IndexRange.

Definition at line 45 of file Chi2Calc.h.

45{ return m_lwb; }

◆ nDof()

unsigned int LArSamples::Chi2Calc::nDof ( ) const
inline

Definition at line 47 of file Chi2Calc.h.

47{ return upb() - lwb() + 1; }

◆ providesRange() [1/3]

bool LArSamples::IndexRange::providesRange ( const IndexRange & other) const
inlineinherited

Definition at line 34 of file IndexRange.h.

34{ return providesRange(other.lwb(), other.upb()); }

◆ providesRange() [2/3]

bool LArSamples::IndexRange::providesRange ( const TVectorD & v) const
inlineinherited

Definition at line 35 of file IndexRange.h.

35{ return providesRange(v.GetLwb(), v.GetUpb()); }

◆ providesRange() [3/3]

bool LArSamples::IndexRange::providesRange ( int lw,
int up ) const
inlineinherited

Definition at line 33 of file IndexRange.h.

33{ return (lwb() <= lw && upb() >= up); }

◆ rangeStr()

TString LArSamples::IndexRange::rangeStr ( ) const
inlineinherited

Definition at line 37 of file IndexRange.h.

37{ return Form("[%d, %d]", lwb(), upb()); }

◆ scalarProduct()

double Chi2Calc::scalarProduct ( const TVectorD & values1,
const TVectorD & values2,
const CovMatrix & invCovMat ) const

Definition at line 19 of file Chi2Calc.cxx.

21{
22 if (values1.GetLwb() != invCovMat.GetRowLwb() || values1.GetUpb() != invCovMat.GetRowUpb()) return -1;
23 if (values2.GetLwb() != invCovMat.GetColLwb() || values2.GetUpb() != invCovMat.GetColUpb()) return -1;
24
25 double chi2Val = 0;
26
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);
30 }
31 }
32 return chi2Val;
33}

◆ upb()

int LArSamples::Chi2Calc::upb ( ) const
inlinevirtual

Implements LArSamples::IndexRange.

Definition at line 46 of file Chi2Calc.h.

46{ return m_upb; }

◆ useCorrs()

bool LArSamples::Chi2Calc::useCorrs ( ) const
inlineprivate

Definition at line 54 of file Chi2Calc.h.

54{ return !(m_pars & NoCorrs); }

Member Data Documentation

◆ m_lwb

int LArSamples::Chi2Calc::m_lwb
private

Definition at line 58 of file Chi2Calc.h.

◆ m_pars

int LArSamples::Chi2Calc::m_pars
private

Definition at line 56 of file Chi2Calc.h.

◆ m_upb

int LArSamples::Chi2Calc::m_upb
private

Definition at line 58 of file Chi2Calc.h.


The documentation for this class was generated from the following files: