CMS 3D CMS Logo

BTagPerformance.h
Go to the documentation of this file.
1 #ifndef BTagPerformance_h
2 #define BTagPerformance_h
3 
12 #include <map>
13 #include <assert.h>
14 #include "TGraph.h"
15 #include "TArrayD.h"
16 
18 
19  public:
22  fname = name;
23  fNcuts = 40;
24  b_all = c_all = udsg_all = 0;
25  for( int i=0; i<fNcuts; ++i) {
26  b_tagged[i] = 0;
27  c_tagged[i] = 0;
28  udsg_tagged[i] = 0;
29  }
30 
31  };
32  void SetMinDiscriminator( double value) { fMinDisc = value; };
33  void SetMaxDiscriminator( double value) { fMaxDisc = value; };
34  void SetNcuts( int value ) {
35  fNcuts = value;
36  for( int i=0; i<fNcuts; ++i) {
37  b_tagged[i] = 0;
38  c_tagged[i] = 0;
39  udsg_tagged[i] = 0;
40  }
41  };
42  void Add( double discriminator, int flavor ) {
43 
45  fflavor = flavor;
46  double binwidth = (fMaxDisc-fMinDisc)/((double) fNcuts);
47  if (fflavor==5) b_all++;
48  if (fflavor==4) c_all++;
49  if ((fflavor>0 && fflavor<4)||(fflavor==21)) udsg_all++;
50 
51  for( int i=0; i<fNcuts; ++i ) {
52  double cut = i*binwidth + fMinDisc;
53  if (cut > fMaxDisc) cut = fMaxDisc;
54 
55  disc_map[i] = cut;
56  if ( fdisc > cut ) {
57  if ( fflavor==5 ) b_tagged[i]++;
58  if ( fflavor==4 ) c_tagged[i]++;
59  if ((fflavor>0 && fflavor<4)||(fflavor==21)) udsg_tagged[i]++;
60  }
61  }
62  };
63 
64  void Eval() {
65  double small = 1.e-5;
66  int ip = 0;
67  for(std::map<int,double>::const_iterator im=b_tagged.begin(); im!=b_tagged.end(); ++im) {
68 
69  double eff = (im->second)/((double)b_all);
70  double err = sqrt(eff*(1-eff)/b_all);
71  if ( eff==0 || eff< small ) { eff = small; err=0; }
72  b_eff[ip] = eff;
73  b_effErr[ip] = err;
74  //g1["b"+fname].SetPoint(ip,eff,eff);
75  //h1["b"+fname]->Fill(eff);
76  ip++;
77  }
78  ip=0;
79  for(std::map<int,double>::const_iterator im=c_tagged.begin(); im!=c_tagged.end(); ++im) {
80 
81  double eff = (im->second)/((double)c_all);
82  double err = sqrt(eff*(1-eff)/c_all);
83  if ( eff==0 || eff< small ) { eff = small; err=0; }
84  c_eff[ip] = eff;
85  c_effErr[ip] = err;
86  //g1["c"+fname].SetPoint(ip,b_tagged[ip],eff);
87  //h1["c"+fname]->Fill(eff);
88  ip++;
89  }
90  ip=0;
91  for(std::map<int,double>::const_iterator im=udsg_tagged.begin(); im!=udsg_tagged.end();
92 ++im) {
93 
94  double eff = (im->second)/((double)udsg_all);
95  double err = sqrt(eff*(1-eff)/udsg_all);
96  if ( eff==0 || eff< small ) { eff = small; err=0; }
97  udsg_eff[ip] = eff;
98  udsg_effErr[ip] = err;
99  //g1["udsg"+fname].SetPoint(ip,b_tagged[ip],eff);
100  //h1["udsg"+fname]->Fill(eff);
101  ip++;
102  }
103 
104  };
105  std::map< int,double> GetMap(TString option="b") {
106  if (option=="b") return b_eff;
107  if (option=="c") return c_eff;
108  if (option=="udsg") return udsg_eff;
109  if (option=="bErr") return b_effErr;
110  if (option=="cErr") return c_effErr;
111  if (option=="udsgErr") return udsg_effErr;
112  if (option=="discriminator") return disc_map;
113  else { assert(false); return disc_map;}
114  };
115 
116  TArrayD GetArray(TString option="b") {
117  std::map<int,double> amap = GetMap(option);
118  TArrayD tarray(fNcuts);
119  for(std::map<int,double>::const_iterator im=amap.begin(); im!=amap.end(); ++im) {
120  //std::cout << "i= " << im->first << " value= " << im->second << std::endl;
121  tarray[im->first] = im->second;
122  }
123  return tarray;
124 
125  };
126 
127  int GetN() { return fNcuts; };
128 //ed++
129  double Getb_all() {return b_all; };
130  double Getc_all() {return c_all; };
131  double Getudsg_all() {return udsg_all; };
132 //ed--
133  private:
134  Double_t *farray;
135  double fdisc;
136  int fflavor;
137  double fMinDisc;
138  double fMaxDisc;
139  int fNcuts;
141  //std::map< std::string, TH1* > h1;
142  //std::map< std::string, TGraph > g1;
143  std::map< int, double > b_eff;
144  std::map< int, double > c_eff;
145  std::map< int, double > udsg_eff;
146  std::map< int, double > b_effErr;
147  std::map< int, double > c_effErr;
148  std::map< int, double > udsg_effErr;
149  std::map< int, double > disc_map;
150 
151  std::map< int, double > b_tagged;
152  std::map< int, double > c_tagged;
153  std::map< int, double > udsg_tagged;
154  double b_all;
155  double c_all;
156  double udsg_all;
157 
158 
159 
160 };
161 
162 #endif
163 
std::map< int, double > udsg_tagged
void SetMaxDiscriminator(double value)
void SetNcuts(int value)
std::map< int, double > b_tagged
std::map< int, double > b_effErr
std::string fname
std::map< int, double > udsg_eff
void Set(std::string name)
std::map< int, double > GetMap(TString option="b")
T sqrt(T t)
Definition: SSEVec.h:18
std::map< int, double > b_eff
TArrayD GetArray(TString option="b")
std::map< int, double > c_tagged
Definition: value.py:1
std::map< int, double > c_effErr
std::map< int, double > udsg_effErr
std::map< int, double > disc_map
void Add(double discriminator, int flavor)
std::map< int, double > c_eff
void SetMinDiscriminator(double value)