CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

SimpleJetCorrector Class Reference

#include <SimpleJetCorrector.h>

List of all members.

Public Member Functions

float correction (const std::vector< float > &fX, const std::vector< float > &fY) const
const JetCorrectorParametersparameters () 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
SimpleJetCorrectoroperator= (const SimpleJetCorrector &)
 SimpleJetCorrector (const SimpleJetCorrector &)

Private Attributes

bool mDoInterpolation
TFormula * mFunc
unsigned mInvertVar
JetCorrectorParametersmParameters

Detailed Description

Definition at line 12 of file SimpleJetCorrector.h.


Constructor & Destructor Documentation

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 = "" 
)
SimpleJetCorrector::SimpleJetCorrector ( const JetCorrectorParameters fParameters)
SimpleJetCorrector::~SimpleJetCorrector ( )

Definition at line 45 of file SimpleJetCorrector.cc.

References mFunc, and mParameters.

{
  delete mFunc;
  delete mParameters;
}
SimpleJetCorrector::SimpleJetCorrector ( const SimpleJetCorrector ) [private]

Member Function Documentation

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]

Definition at line 24 of file SimpleJetCorrector.h.

References mParameters.

{return *mParameters;} 
void SimpleJetCorrector::setInterpolation ( bool  fInterpolation) [inline]

Definition at line 22 of file SimpleJetCorrector.h.

References mDoInterpolation.

{mDoInterpolation = fInterpolation;}

Member Data Documentation

Definition at line 34 of file SimpleJetCorrector.h.

Referenced by correction(), setInterpolation(), and SimpleJetCorrector().

TFormula* SimpleJetCorrector::mFunc [private]
unsigned SimpleJetCorrector::mInvertVar [private]

Definition at line 35 of file SimpleJetCorrector.h.

Referenced by invert(), and SimpleJetCorrector().