9 if(!
isValidRange(pt, rho, eta, QGLParamsColl->qgValidRange))
return -1;
12 for(
unsigned int varIndex = 0; varIndex < vars.size(); ++varIndex){
14 auto quarkEntry =
findEntry(QGLParamsColl->data, eta, pt, rho, 0, varIndex);
15 auto gluonEntry =
findEntry(QGLParamsColl->data, eta, pt, rho, 1, varIndex);
16 if(!quarkEntry || !gluonEntry)
return -2;
18 int binQ = quarkEntry->histogram.findBin(vars[varIndex]);
19 float Qi = quarkEntry->histogram.binContent(binQ);
21 int binG = gluonEntry->histogram.findBin(vars[varIndex]);
22 float Gi = gluonEntry->histogram.binContent(binG);
36 myParameters.
Rho = rho;
38 myParameters.
Eta = fabs(eta);
42 auto myDataObject = data.begin();
43 while(!(myParameters == myDataObject->category)){
45 if(myDataObject == data.end()){
46 edm::LogWarning(
"QGLCategoryNotFound") <<
"Jet passed qgValidRange criteria, but no category found with rho=" << rho <<
", pt=" << pt <<
", eta=" << eta
47 <<
"\nPlease contact cms-qg-workinggroup@cern.ch" << std::endl;
51 return &*myDataObject;
57 if(pt < qgValidRange.
PtMin)
return false;
58 if(pt > qgValidRange.
PtMax)
return false;
59 if(rho < qgValidRange.
RhoMin)
return false;
60 if(rho > qgValidRange.
RhoMax)
return false;
61 if(fabs(eta) < qgValidRange.
EtaMin)
return false;
62 if(fabs(eta) > qgValidRange.
EtaMax)
return false;
69 float x=(x0-
min)/(max-min);
73 float x1= tanh(a*atanh(2.*x-1.)+b)/2.+.5;
77 return x1*(max-
min)+min;
82 if(qgValue < 0 || qgValue > 1)
return -1.;
85 myParameters.
Rho = rho;
87 myParameters.
Eta = fabs(eta);
91 auto myDataObject = QGLSystematicsColl->data.begin();
92 while(!(myParameters == myDataObject->systCategory)){
94 if(myDataObject == QGLSystematicsColl->data.end())
return -1;
96 return smearingFunction(qgValue, myDataObject->a, myDataObject->b, myDataObject->lmin, myDataObject->lmax);
float smearingFunction(float x0, float a, float b, float min, float max)
Return the smeared qgLikelihood value, given input x0 and parameters a, b, min and max...
T x() const
Cartesian x coordinate.
float computeQGLikelihood(edm::ESHandle< QGLikelihoodObject > &QGLParamsColl, float pt, float eta, float rho, std::vector< float > vars)
Compute likelihood for a jet using the QGLikelihoodObject information and a set of variables...
Category structure: ranges associated with QGLikelihood histograms.
const QGLikelihoodObject::Entry * findEntry(std::vector< QGLikelihoodObject::Entry > const &data, float eta, float pt, float rho, int qgIndex, int varIndex)
Find matching entry in vector for a given eta, pt, rho, qgIndex and varIndex.
bool isValidRange(float pt, float rho, float eta, const QGLikelihoodCategory &qgValidRange)
Check the valid range of this qg tagger.
float systematicSmearing(edm::ESHandle< QGLikelihoodSystematicsObject > &QGLParamsColl, float pt, float eta, float rho, float qgValue, int qgIndex)