CMS 3D CMS Logo

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