#include <SimpleJetCorrector.h>
Public Member Functions | |
float | correction (const std::vector< float > &fX, const std::vector< float > &fY) const |
const JetCorrectorParameters & | parameters () const |
void | setInterpolation (bool fInterpolation) |
SimpleJetCorrector (const std::string &fDataFile, const std::string &fOption="") | |
SimpleJetCorrector () | |
SimpleJetCorrector (const JetCorrectorParameters &fParameters) | |
~SimpleJetCorrector () | |
Private Member Functions | |
float | correctionBin (unsigned fBin, const std::vector< float > &fY) const |
unsigned | findInvertVar () |
float | invert (std::vector< float > fX) const |
SimpleJetCorrector & | operator= (const SimpleJetCorrector &) |
SimpleJetCorrector (const SimpleJetCorrector &) | |
Private Attributes | |
bool | mDoInterpolation |
TFormula * | mFunc |
unsigned | mInvertVar |
JetCorrectorParameters * | mParameters |
Definition at line 12 of file SimpleJetCorrector.h.
SimpleJetCorrector::SimpleJetCorrector | ( | ) |
Definition at line 11 of file SimpleJetCorrector.cc.
References mDoInterpolation, mFunc, mInvertVar, and mParameters.
{ mFunc = new TFormula(); mParameters = new JetCorrectorParameters(); mDoInterpolation = false; mInvertVar = 9999; }
SimpleJetCorrector::SimpleJetCorrector | ( | const std::string & | fDataFile, |
const std::string & | fOption = "" |
||
) |
Definition at line 22 of file SimpleJetCorrector.cc.
References JetCorrectorParameters::definitions(), findInvertVar(), EcalElecEmulExample_cfg::formula, mDoInterpolation, mFunc, mInvertVar, and mParameters.
{ mParameters = new JetCorrectorParameters(fDataFile,fOption); mFunc = new TFormula("function",((mParameters->definitions()).formula()).c_str()); mDoInterpolation = false; if (mParameters->definitions().isResponse()) mInvertVar = findInvertVar(); }
SimpleJetCorrector::SimpleJetCorrector | ( | const JetCorrectorParameters & | fParameters | ) |
Definition at line 34 of file SimpleJetCorrector.cc.
References JetCorrectorParameters::definitions(), findInvertVar(), EcalElecEmulExample_cfg::formula, mDoInterpolation, mFunc, mInvertVar, and mParameters.
{ mParameters = new JetCorrectorParameters(fParameters); mFunc = new TFormula("function",((mParameters->definitions()).formula()).c_str()); mDoInterpolation = false; if (mParameters->definitions().isResponse()) mInvertVar = findInvertVar(); }
SimpleJetCorrector::~SimpleJetCorrector | ( | ) |
Definition at line 45 of file SimpleJetCorrector.cc.
References mFunc, and mParameters.
{ delete mFunc; delete mParameters; }
SimpleJetCorrector::SimpleJetCorrector | ( | const SimpleJetCorrector & | ) | [private] |
float SimpleJetCorrector::correction | ( | const std::vector< float > & | fX, |
const std::vector< float > & | fY | ||
) | const |
Definition at line 53 of file SimpleJetCorrector.cc.
References newFWLiteAna::bin, JetCorrectorParameters::binIndex(), correctionBin(), JetCorrectorParameters::definitions(), i, mDoInterpolation, mParameters, JetCorrectorParameters::neighbourBin(), JetCorrectorParameters::record(), query::result, and tmp.
{ float result = 1.; float tmp = 0.0; float cor = 0.0; int bin = mParameters->binIndex(fX); if (bin<0) return result; if (!mDoInterpolation) result = correctionBin(bin,fY); else { for(unsigned i=0;i<mParameters->definitions().nBinVar();i++) { float xMiddle[3]; float xValue[3]; int prevBin = mParameters->neighbourBin((unsigned)bin,i,false); int nextBin = mParameters->neighbourBin((unsigned)bin,i,true); if (prevBin>=0 && nextBin>=0) { xMiddle[0] = mParameters->record(prevBin).xMiddle(i); xMiddle[1] = mParameters->record(bin).xMiddle(i); xMiddle[2] = mParameters->record(nextBin).xMiddle(i); xValue[0] = correctionBin(prevBin,fY); xValue[1] = correctionBin(bin,fY); xValue[2] = correctionBin(nextBin,fY); cor = quadraticInterpolation(fX[i],xMiddle,xValue); tmp+=cor; } else { cor = correctionBin(bin,fY); tmp+=cor; } } result = tmp/mParameters->definitions().nBinVar(); } return result; }
float SimpleJetCorrector::correctionBin | ( | unsigned | fBin, |
const std::vector< float > & | fY | ||
) | const [private] |
Definition at line 95 of file SimpleJetCorrector.cc.
References JetCorrectorParameters::definitions(), i, invert(), mFunc, mParameters, N, JetCorrectorParameters::record(), query::result, JetCorrectorParameters::size(), tmp, and x.
Referenced by correction().
{ if (fBin >= mParameters->size()) { std::stringstream sserr; sserr<<"wrong bin: "<<fBin<<": only "<<mParameters->size()<<" available!"; handleError("SimpleJetCorrector",sserr.str()); } unsigned N = fY.size(); if (N > 4) { std::stringstream sserr; sserr<<"two many variables: "<<N<<" maximum is 4"; handleError("SimpleJetCorrector",sserr.str()); } float result = -1; const std::vector<float>& par = mParameters->record(fBin).parameters(); for(unsigned int i=2*N;i<par.size();i++) mFunc->SetParameter(i-2*N,par[i]); float x[4]; std::vector<float> tmp; for(unsigned i=0;i<N;i++) { x[i] = (fY[i] < par[2*i]) ? par[2*i] : (fY[i] > par[2*i+1]) ? par[2*i+1] : fY[i]; tmp.push_back(x[i]); } if (mParameters->definitions().isResponse()) result = invert(tmp); else result = mFunc->Eval(x[0],x[1],x[2],x[3]); return result; }
unsigned SimpleJetCorrector::findInvertVar | ( | ) | [private] |
Definition at line 130 of file SimpleJetCorrector.cc.
References JetCorrectorParameters::definitions(), i, mParameters, and query::result.
Referenced by SimpleJetCorrector().
{ unsigned result = 9999; std::vector<std::string> vv = mParameters->definitions().parVar(); for(unsigned i=0;i<vv.size();i++) if (vv[i]=="JetPt") { result = i; break; } if (result >= vv.size()) handleError("SimpleJetCorrector","Response inversion is required but JetPt is not specified as parameter"); return result; }
float SimpleJetCorrector::invert | ( | std::vector< float > | fX | ) | const [private] |
Definition at line 147 of file SimpleJetCorrector.cc.
References alignCSCRings::e, i, mFunc, mInvertVar, N, tmp, and x.
Referenced by correctionBin().
{ unsigned nMax = 50; unsigned N = fX.size(); float precision = 0.0001; float rsp = 1.0; float e = 1.0; float x[4] = {0.0,0.0,0.0,0.0}; for(unsigned i=0;i<N;i++) x[i] = fX[i]; unsigned nLoop=0; while(e > precision && nLoop < nMax) { rsp = mFunc->Eval(x[0],x[1],x[2],x[3]); float tmp = x[mInvertVar] * rsp; e = fabs(tmp - fX[mInvertVar])/fX[mInvertVar]; x[mInvertVar] = fX[mInvertVar]/rsp; nLoop++; } return 1./rsp; }
SimpleJetCorrector& SimpleJetCorrector::operator= | ( | const SimpleJetCorrector & | ) | [private] |
const JetCorrectorParameters& SimpleJetCorrector::parameters | ( | void | ) | const [inline] |
void SimpleJetCorrector::setInterpolation | ( | bool | fInterpolation | ) | [inline] |
Definition at line 22 of file SimpleJetCorrector.h.
References mDoInterpolation.
{mDoInterpolation = fInterpolation;}
bool SimpleJetCorrector::mDoInterpolation [private] |
Definition at line 34 of file SimpleJetCorrector.h.
Referenced by correction(), setInterpolation(), and SimpleJetCorrector().
TFormula* SimpleJetCorrector::mFunc [private] |
Definition at line 36 of file SimpleJetCorrector.h.
Referenced by correctionBin(), invert(), SimpleJetCorrector(), and ~SimpleJetCorrector().
unsigned SimpleJetCorrector::mInvertVar [private] |
Definition at line 35 of file SimpleJetCorrector.h.
Referenced by invert(), and SimpleJetCorrector().
Definition at line 37 of file SimpleJetCorrector.h.
Referenced by correction(), correctionBin(), findInvertVar(), parameters(), SimpleJetCorrector(), and ~SimpleJetCorrector().