CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
QGLikelihoodCalculator.cc
Go to the documentation of this file.
5 #include <math.h>
6 
8 float QGLikelihoodCalculator::computeQGLikelihood(edm::ESHandle<QGLikelihoodObject> &QGLParamsColl, float pt, float eta, float rho, std::vector<float> vars){
9  if(!isValidRange(pt, rho, eta, QGLParamsColl->qgValidRange)) return -1;
10 
11  float Q=1., G=1.;
12  for(unsigned int varIndex = 0; varIndex < vars.size(); ++varIndex){
13 
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;
17 
18  int binQ = quarkEntry->histogram.findBin(vars[varIndex]);
19  float Qi = quarkEntry->histogram.binContent(binQ);
20 
21  int binG = gluonEntry->histogram.findBin(vars[varIndex]);
22  float Gi = gluonEntry->histogram.binContent(binG);
23 
24  Q *= Qi;
25  G *= Gi;
26  }
27 
28  if(Q==0) return 0;
29  return Q/(Q+G);
30 }
31 
32 
34 const QGLikelihoodObject::Entry* QGLikelihoodCalculator::findEntry(std::vector<QGLikelihoodObject::Entry> const &data, float eta, float pt, float rho, int qgIndex, int varIndex){
35  QGLikelihoodParameters myParameters;
36  myParameters.Rho = rho;
37  myParameters.Pt = pt;
38  myParameters.Eta = fabs(eta);
39  myParameters.QGIndex = qgIndex;
40  myParameters.VarIndex = varIndex;
41 
42  auto myDataObject = data.begin();
43  while(!(myParameters == myDataObject->category)){
44  ++myDataObject;
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;
48  return nullptr;
49  }
50  }
51  return &*myDataObject;
52 }
53 
54 
56 bool QGLikelihoodCalculator::isValidRange(float pt, float rho, float eta, const QGLikelihoodCategory &qgValidRange){
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;
63  return true;
64 }
65 
66 
68 float QGLikelihoodCalculator::smearingFunction(float x0, float a ,float b,float min,float max){
69  float x=(x0-min)/(max-min);
70  if(x<0.) x=0.;
71  if(x>1.) x=1.;
72 
73  float x1= tanh(a*atanh(2.*x-1.)+b)/2.+.5;
74  if(x<=0.) x1=0.;
75  if(x>=1.) x1=1.;
76 
77  return x1*(max-min)+min;
78 }
79 
80 // Get systematic smearing
81 float QGLikelihoodCalculator::systematicSmearing(edm::ESHandle<QGLikelihoodSystematicsObject> &QGLSystematicsColl, float pt, float eta, float rho, float qgValue, int qgIndex){
82  if(qgValue < 0 || qgValue > 1) return -1.;
83 
84  QGLikelihoodParameters myParameters;
85  myParameters.Rho = rho;
86  myParameters.Pt = pt;
87  myParameters.Eta = fabs(eta);
88  myParameters.QGIndex = qgIndex;
89  myParameters.VarIndex = -1;
90 
91  auto myDataObject = QGLSystematicsColl->data.begin();
92  while(!(myParameters == myDataObject->systCategory)){
93  ++myDataObject;
94  if(myDataObject == QGLSystematicsColl->data.end()) return -1; //Smearing not available in the whole qgValidRange: do not throw warnings or errors
95  }
96  return smearingFunction(qgValue, myDataObject->a, myDataObject->b, myDataObject->lmin, myDataObject->lmax);
97 }
Parameters structure.
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...
T min(T a, T b)
Definition: MathUtil.h:58
Category structure: ranges associated with QGLikelihood histograms.
tuple G
Definition: callgraph.py:12
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
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)