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);
bool isValidRange(float pt, float rho, float eta, const QGLikelihoodCategory &qgValidRange) const
Check the valid range of this qg tagger.
float smearingFunction(float x0, float a, float b, float min, float max) const
Return the smeared qgLikelihood value, given input x0 and parameters a, b, min and max...
QGLikelihoodCategory qgValidRange
float systematicSmearing(edm::ESHandle< QGLikelihoodSystematicsObject > &QGLParamsColl, float pt, float eta, float rho, float qgValue, int qgIndex) const
std::vector< Entry > data
float computeQGLikelihood(edm::ESHandle< QGLikelihoodObject > &QGLParamsColl, float pt, float eta, float rho, std::vector< float > vars) const
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) const
Find matching entry in vector for a given eta, pt, rho, qgIndex and varIndex.
char data[epos_bytes_allocation]
std::vector< Entry > data