ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_mj_ratios.cxx
Go to the documentation of this file.
1 // plot_mj_macros: Macro that plots variables both lumi weighted and normalized to the same area.
2 
3 #include <iostream>
4 #include <vector>
5 
6 #include "TChain.h"
7 #include "TH1D.h"
8 #include "TCanvas.h"
9 #include "TLegend.h"
10 #include "TLine.h"
11 #include "TString.h"
12 #include "TColor.h"
13 #include "TMath.h"
14 
15 #include "styles.hpp"
16 #include "utilities.hpp"
17 #include "utilities_macros.hpp"
18 
19 using namespace std;
20 using std::cout;
21 using std::endl;
22 
23 int main(){
24  TH1::SetDefaultSumw2(true);
25 
26  styles style("LargeLabels"); style.setDefaultStyle();
27  vector<hfeats> vars;
28  TCanvas can;
29 
30  TColor ucsb_blue(1000, 1/255.,57/255.,166/255.);
31  TColor ucsb_gold(1001, 255/255.,200/255.,47/255);
32  TColor penn_red(1002, 149/255.,0/255.,26/255.);
33  TColor uf_orange(1003, 255/255.,74/255.,0/255.);
34  TColor uo_green(1004, 0/255.,79/255.,39/255.);
35  TColor tcu_purple(1005, 72/255.,42/255.,100/255.);
36  TColor tar_heel_blue(1006, 86/255.,160/255.,211/255.);
37  TColor sig_teal(1007, 96/255.,159/255.,128/255.);
38  TColor sig_gold(1008, 215/255.,162/255.,50/255.);
39  TColor seal_brown(1010, 89/255.,38/255.,11/255.);
40 
41  TString folder="archive/15-03-17/skims/";
42  //TString folder="archive/15-03-03/";
43  vector<TString> s_tt;
44  s_tt.push_back(folder+"*_TTJet*");
45  vector<TString> s_wjets;
46  s_wjets.push_back(folder+"*_WJets*");
47  vector<TString> s_single;
48  s_single.push_back(folder+"*_T*channel*");
49  vector<TString> s_ttv;
50  s_ttv.push_back(folder+"*TTW*");
51  s_ttv.push_back(folder+"*TTZ*");
52  vector<TString> s_other;
53  s_other.push_back(folder+"*QCD_HT*");
54  s_other.push_back(folder+"*_ZJet*");
55  s_other.push_back(folder+"*DY*");
56  s_other.push_back(folder+"*WH_HToBB*");
57  vector<TString> s_t1t;
58  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
59  vector<TString> s_t1tc;
60  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
61 
62  // Reading ntuples
63  vector<TChain *> chain;
64  vector<sfeats> Samples;
65  Samples.push_back(sfeats(s_other, "Other", 1001));
66  Samples.push_back(sfeats(s_ttv, "ttV", 1002));
67  Samples.push_back(sfeats(s_single, "Single top", 1005));
68  Samples.push_back(sfeats(s_wjets, "W + jets", 1004));
69  Samples.push_back(sfeats(s_tt, "t#bar{t}, 2 l", 1006,1,"((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)>=2"));
70  Samples.push_back(sfeats(s_tt, "t#bar{t}, 1 l", 1000,1,"((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)<=1"));
71  Samples.push_back(sfeats(s_t1t, "T1tttt(1500,100)", 2));
72  Samples.push_back(sfeats(s_t1tc, "T1tttt(1200,800)", 2,2));
73 
74  for(unsigned sam(0); sam < Samples.size(); sam++){
75  chain.push_back(new TChain("tree"));
76  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
77  chain[sam]->Add(Samples[sam].file[insam]);
78  }
79 
80  vector<int> mj_sam_lep;
81  mj_sam_lep.push_back(0);
82  mj_sam_lep.push_back(1);
83  mj_sam_lep.push_back(2);
84  mj_sam_lep.push_back(3);
85  mj_sam_lep.push_back(4);
86  mj_sam_lep.push_back(5);
87  mj_sam_lep.push_back(6);
88  mj_sam_lep.push_back(7);
89 
90  int mj_nbins = 6;
91  float mj_binning[] = {0,200,300,400,500,600,1500};
92  // int mj_nbins = 15;
93  // float mj_binning[] = {0,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500};
94  vars.push_back(hfeats("mj",mj_nbins,mj_binning, mj_sam_lep, "M_{J} (GeV)",
95  "ht>500&&met>250&&nbm>=2&&njets>=6&&mt<150&&(nmus+nels)==1",600));
96  vars.push_back(hfeats("mj",mj_nbins,mj_binning, mj_sam_lep, "M_{J} (GeV)",
97  "ht>500&&met>250&&nbm>=2&&njets>=6&&mt>=150&&(nmus+nels)==1",600));
98  vars.push_back(hfeats("mj",mj_nbins,mj_binning, mj_sam_lep, "M_{J} (GeV)",
99  "ht>500&&met>250&&nbm==1&&njets>=6&&mt<150&&(nmus+nels)==1",600));
100  vars.push_back(hfeats("mj",mj_nbins,mj_binning, mj_sam_lep, "M_{J} (GeV)",
101  "ht>500&&met>250&&nbm==1&&njets>=6&&mt>=150&&(nmus+nels)==1",600));
102 
103  vector<int> bkg_ind(vars.size(), -1);
104 
105  float binW = 100; // Entries normalized to bin width binW
106 
107  TString cuts("ht>750&&met>250&&nbm>=2&&njets>=6&&(nmus+nels)==1");
108  //vars.push_back(hfeats("Max$(fjets_r08_m)",40,0,800, mj_sam_lep, "Max(m_{J}^{R=0.8}) (GeV)",cuts));
109  // vars.push_back(hfeats("Max$(fjets_30_m)", 40,0,800, mj_sam_lep, "Max(m_{J}^{R=1.2}) (GeV)",cuts));
110  cuts ="ht>750&&met>250&&nbl>=2&&njets>=4&&mt>150&&(nmus+nels)==1";
111  //vars.push_back(hfeats("Max$(fjets_r08_m)",40,0,800, mj_sam_lep, "Max(m_{J}^{R=0.8}) (GeV)",cuts));
112  // vars.push_back(hfeats("Max$(fjets_30_m)", 40,0,800, mj_sam_lep, "Max(m_{J}^{R=1.2}) (GeV)",cuts));
113 
114  // vars.push_back(hfeats("mj_r08",40,0,2000, mj_sam_lep, "M{J}^{R=0.8} (GeV)",cuts));
115  // vars.push_back(hfeats("mj_30",40,0,2000, mj_sam_lep, "M{J}^{R=1.2} (GeV)",cuts));
116 
117 
118  TString luminosity="4";
119  float minLog = 0.04, maxLog = 10;
120  double legX = 0.6, legY = 0.87, legSingle = 0.055;
121  double legW = 0.12, legH = legSingle*vars[0].samples.size();
122  TLegend leg(legX, legY-legH, legX+legW, legY);
123  leg.SetTextSize(0.052); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
124  leg.SetTextFont(132);
125 
126  TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
127  vector< vector<TH1D*> > histo[2];
128  vector<TH1D*> varhisto;
129  vector<float> nentries;
130  TString hname, pname, variable, leghisto, totCut, title, ytitle;
131  for(unsigned var(0); var<vars.size(); var++){
132  cout<<endl;
133  // Generating vector of histograms
134  title = vars[var].cuts; if(title=="1") title = "";
135  title.ReplaceAll("nvmus==1&&nmus==1&&nvels==0","1 #mu");
136  title.ReplaceAll("(nmus+nels)","n_{lep}");
137  title.ReplaceAll("nvmus10==0&&nvels10==0", "0 leptons");
138  title.ReplaceAll("(Max$(els_pt*els_sigid*(els_miniso_tr10<0.1))>20||Max$(mus_pt*mus_sigid*(mus_miniso_tr10<0.4))>20)&&(nmus+nels)", "n_{lep}"); title.ReplaceAll("njets30","n_{jets}^{30}");
139  title.ReplaceAll("els_pt","p^{e}_{T}");title.ReplaceAll("mus_pt","p^{#mu}_{T}");
140  title.ReplaceAll("mus_reliso","RelIso"); title.ReplaceAll("els_reliso","RelIso");
141  title.ReplaceAll("mus_miniso_tr15","MiniIso"); title.ReplaceAll("els_miniso_tr15","MiniIso");
142  title.ReplaceAll("njets","n_{jets}");title.ReplaceAll("abs(lep_id)==13&&","");
143  title.ReplaceAll(">=", " #geq "); title.ReplaceAll(">", " > "); title.ReplaceAll("&&", ", ");
144  title.ReplaceAll("<", " < ");
145  title.ReplaceAll("met", "MET"); title.ReplaceAll("ht", "H_{T}"); title.ReplaceAll("mt", "m_{T}");
146  title.ReplaceAll("nleps==1", "1 lepton"); title.ReplaceAll("nbm","n_{b}"); title.ReplaceAll("==", " = ");
147  title.ReplaceAll("nbl[1]","n_{b,l}");
148  for(unsigned his(0); his < 2; his++){
149  varhisto.resize(0);
150  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
151  hname = "histo"; hname += var; hname += his; hname += sam;
152  varhisto.push_back(new TH1D(hname, title, vars[var].nbins, vars[var].binning));
153  }
154  histo[his].push_back(varhisto);
155  }
156 
158  leg.Clear();
159  nentries.resize(0);
160  variable = vars[var].varname;
161  float maxhisto(-999);
162  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
163  int isam = vars[var].samples[sam];
164  bool isSig = Samples[isam].isSig;
165  totCut = Samples[isam].factor+"*"+luminosity+"*weight*("+vars[var].cuts+"&&"+Samples[isam].cut+")";
166  //cout<<totCut<<endl;
167  histo[0][var][sam]->Sumw2();
168  chain[isam]->Project(histo[0][var][sam]->GetName(), variable, totCut);
169  histo[0][var][sam]->SetBinContent(vars[var].nbins,
170  histo[0][var][sam]->GetBinContent(vars[var].nbins)+
171  histo[0][var][sam]->GetBinContent(vars[var].nbins+1));
172  histo[0][var][sam]->SetBinError(vars[var].nbins,
173  sqrt(pow(histo[0][var][sam]->GetBinError(vars[var].nbins),2)+
174  pow(histo[0][var][sam]->GetBinError(vars[var].nbins+1),2)));
175  nentries.push_back(histo[0][var][sam]->Integral(1,vars[var].nbins));
176  histo[0][var][sam]->SetXTitle(vars[var].title);
177  ytitle = "Entries for "+luminosity+" fb^{-1}";
178  if(vars[var].unit!="") {
179  int digits(0);
180  float binwidth((vars[var].maxx-vars[var].minx)/static_cast<float>(vars[var].nbins));
181  binwidth = binW;
182  if(binwidth<1) digits = 1;
183  ytitle += ("/("+RoundNumber(binwidth,digits) +" "+vars[var].unit+")");
184  }
185  histo[0][var][sam]->SetYTitle(ytitle);
186  // Cloning histos for later
187  for(int bin(0); bin<=histo[0][var][sam]->GetNbinsX()+1; bin++){
188  float val(histo[0][var][sam]->GetBinContent(bin)), errval(histo[0][var][sam]->GetBinError(bin));
189  float thisbinW(histo[0][var][sam]->GetBinWidth(bin));
190  histo[0][var][sam]->SetBinContent(bin, val*binW/thisbinW);
191  histo[0][var][sam]->SetBinError(bin, errval*binW/thisbinW);
192  histo[1][var][sam]->SetBinContent(bin, histo[0][var][sam]->GetBinContent(bin));
193  }
194  if(!isSig){ // Adding previous bkg histos
195  bkg_ind[var] = sam;
196  for(int bsam(sam-1); bsam >= 0; bsam--){
197  histo[0][var][sam]->Add(histo[0][var][bsam]);
198  break;
199  // if(!Samples[vars[var].samples[bsam]].file[0].Contains("T1tttt")){
200  // histo[0][var][sam]->Add(histo[0][var][bsam]);
201  // break;
202  // }
203  }
204  histo[0][var][sam]->SetFillColor(Samples[isam].color);
205  histo[0][var][sam]->SetFillStyle(1001);
206  histo[0][var][sam]->SetLineColor(1);
207  histo[0][var][sam]->SetLineWidth(1);
208  } else {
209  histo[0][var][sam]->SetLineColor(Samples[isam].color);
210  histo[0][var][sam]->SetLineStyle(Samples[isam].style);
211  histo[0][var][sam]->SetLineWidth(3);
212  }
213  if(maxhisto < histo[0][var][sam]->GetMaximum()) maxhisto = histo[0][var][sam]->GetMaximum();
214  } // First loop over samples
215  int firstplotted(-1);
216  for(int sam(vars[var].samples.size()-1); sam >= 0; sam--){
217  int isam = vars[var].samples[sam];
218  leghisto = Samples[isam].label+" [N = " + RoundNumber(nentries[sam],0) + "]";
219  leg.AddEntry(histo[0][var][sam], leghisto);
220  bool isSig = Samples[isam].isSig;
221  if(!isSig){
222  if(firstplotted < 0) {
223  histo[0][var][sam]->Draw("hist");
224  firstplotted = sam;
225  } else histo[0][var][sam]->Draw("hist same");
226  }
227  }
228  for(int sam(vars[var].samples.size()-1); sam >= 0; sam--){
229  int isam = vars[var].samples[sam];
230  bool isSig = Samples[isam].isSig;
231  if(isSig) histo[0][var][sam]->Draw("hist same");
232  }
233  legH = legSingle*vars[var].samples.size(); leg.SetY1NDC(legY-legH);
234  leg.Draw();
235  if(histo[0][var][firstplotted]->GetMinimum() > minLog) histo[0][var][firstplotted]->SetMinimum(minLog);
236  histo[0][var][firstplotted]->SetMinimum(minLog);
237  histo[0][var][firstplotted]->SetMaximum(maxhisto*maxLog);
238  if(variable=="mt" && var==vars.size()-1) {
239  histo[0][var][firstplotted]->SetMinimum(0.2);
240  histo[0][var][firstplotted]->SetMaximum(maxhisto*2);
241  }
242  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*maxLog);
243  can.SetLogy(1);
244  pname = "plots/1d/log_lumi_"+vars[var].tag+".eps";
245  can.SaveAs(pname);
246  histo[0][var][firstplotted]->SetMinimum(0);
247  histo[0][var][firstplotted]->SetMaximum(maxhisto*1.1);
248  can.SetLogy(0);
249  pname = "plots/1d/lumi_"+vars[var].tag+".eps";
250  can.SaveAs(pname);
251 
253  leg.Clear(); maxhisto = -999;
254  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
255  int isam = vars[var].samples[sam];
256  histo[1][var][sam]->SetLineColor(Samples[isam].color);
257  histo[1][var][sam]->SetLineStyle(Samples[isam].style);
258  histo[1][var][sam]->SetLineWidth(3);
259  if(nentries[sam]) histo[1][var][sam]->Scale(100./nentries[sam]);
260  if(maxhisto < histo[1][var][sam]->GetMaximum()) maxhisto = histo[1][var][sam]->GetMaximum();
261  if(sam==0){
262  histo[1][var][sam]->SetXTitle(vars[var].title);
263  histo[1][var][sam]->SetYTitle("Entries (%)");
264  histo[1][var][sam]->Draw();
265  } else histo[1][var][sam]->Draw("same");
266  leghisto = Samples[isam].label+" [#mu = ";
267  int digits(1);
268  leghisto += RoundNumber(histo[1][var][sam]->GetMean(),digits) + "]";
269  leg.AddEntry(histo[1][var][sam], leghisto);
270  } // Loop over samples
271  leg.Draw();
272  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*1.1);
273  histo[1][var][0]->SetMaximum(maxhisto*1.1);
274  can.SetLogy(0);
275  pname = "plots/1d/shapes_"+vars[var].tag+".eps";
276  can.SaveAs(pname);
277  histo[1][var][0]->SetMaximum(maxhisto*maxLog);
278  can.SetLogy(1);
279  pname = "plots/1d/log_shapes_"+vars[var].tag+".eps";
280  can.SaveAs(pname);
281  }// Loop over variables
282 
283  cout<<endl<<endl;
284 
285  for(unsigned var(0); var<vars.size(); var++){
286  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
287  int isam = vars[var].samples[sam];
288  bool isSig = Samples[isam].isSig;
289  if(isSig){
290  histo[0][var][isam]->Divide(histo[0][var][bkg_ind[var]]);
291  histo[0][var][isam]->SetYTitle("S/B");
292  histo[0][var][isam]->SetMarkerStyle(20);
293  histo[0][var][isam]->SetMarkerColor(2);
294  histo[0][var][isam]->Draw();
295  histo[0][var][isam]->SetMinimum(0);
296  histo[0][var][isam]->SetMaximum(3.3);
297  line.DrawLine(0,1,mj_binning[mj_nbins],1);
298  can.SetLogy(0);
299  pname = "plots/1d/sbratio_"+Samples[isam].label+vars[var].tag+".eps";
300  pname.ReplaceAll("(",""); pname.ReplaceAll(")",""); pname.ReplaceAll(",","");
301  can.SaveAs(pname);
302 
303  }
304  } // Loop over samples
305  }// Loop over variables
306 
307 
308  bool do_2b1b(true);
309  //bool do_2b1b(false);
310 
311  TString leglabel;
312  float chi2, pvalue, average[2];
313  int ndof;
314  int hden1(3), hnum2(0), hden2(2);
315  if(!do_2b1b) {hden1=0; hnum2=3;}
316  leg.Clear();
317  leg.SetY1NDC(legY-legSingle*2);
318  leg.SetX1NDC(0.17);
319  leg.SetX2NDC(0.17+legW);
320 
321  cout<<endl<<endl;
322  calc_chi2_diff(histo[0][1][bkg_ind[1]], histo[0][hden1][bkg_ind[hden1]], chi2, ndof, pvalue, average);
323 
324  histo[0][1][bkg_ind[1]]->SetLineColor(4);
325  histo[0][1][bkg_ind[1]]->SetMarkerColor(4);
326  histo[0][1][bkg_ind[1]]->SetMarkerStyle(20);
327  histo[0][1][bkg_ind[1]]->SetMaximum(histo[0][1][bkg_ind[1]]->GetMaximum()*1.3);
328  if(do_2b1b) {
329  histo[0][1][bkg_ind[1]]->SetMaximum(2.5);
330  histo[0][1][bkg_ind[1]]->SetTitle("n_{b} #geq 2 to n_{b} = 1 ratio");
331  leglabel = ("m_{T} #geq 150 (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
332  }else{
333  histo[0][1][bkg_ind[1]]->SetMaximum(0.25);
334  histo[0][1][bkg_ind[1]]->SetTitle("High-m_{T} to low-m_{T} ratio");
335  leglabel = ("n_{b} #geq 2 (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
336  }
337  histo[0][1][bkg_ind[1]]->SetYTitle("R");
338 
339  leglabel += ndof;
340  leglabel += (", p = "+RoundNumber(pvalue*100,1)+"%)");
341  leg.AddEntry(histo[0][1][bkg_ind[1]], leglabel,"lm");
342 
343  histo[0][1][bkg_ind[1]]->Divide(histo[0][hden1][bkg_ind[hden1]]);
344  histo[0][1][bkg_ind[1]]->Draw("");
345  line.SetLineColor(4);
346  line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
347 
348 
349  calc_chi2_diff(histo[0][hnum2][bkg_ind[hnum2]], histo[0][hden2][bkg_ind[hden2]], chi2, ndof, pvalue, average);
350  histo[0][hnum2][bkg_ind[hnum2]]->Divide(histo[0][hden2][bkg_ind[hden2]]);
351  histo[0][hnum2][bkg_ind[hnum2]]->SetLineColor(2);
352  histo[0][hnum2][bkg_ind[hnum2]]->SetMarkerColor(2);
353  histo[0][hnum2][bkg_ind[hnum2]]->SetMarkerStyle(20);
354  histo[0][hnum2][bkg_ind[hnum2]]->Draw("same");
355 
356  if(do_2b1b) leglabel = ("m_{T} < 150 (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
357  else leglabel = ("n_{b} = 1 (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
358  leglabel += ndof;
359  leglabel += (", p = "+RoundNumber(pvalue*100,1)+"%)");
360  leg.AddEntry(histo[0][hnum2][bkg_ind[hnum2]], leglabel,"lm");
361  leg.Draw();
362  line.SetLineColor(2);
363  line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
364  can.SetLogy(0);
365  pname = "plots/1d/ratio_"+vars[1].tag+(do_2b1b?"_2b1b.eps":"_mt.eps");
366  can.SaveAs(pname);
367 
368  calc_chi2_diff(histo[0][1][bkg_ind[1]], histo[0][hnum2][bkg_ind[hnum2]], chi2, ndof, pvalue, average);
369  histo[0][1][bkg_ind[1]]->Divide(histo[0][hnum2][bkg_ind[hnum2]]);
370  histo[0][1][bkg_ind[1]]->Draw("");
371  histo[0][1][bkg_ind[1]]->SetMaximum(3);
372  if(do_2b1b) {
373  histo[0][1][bkg_ind[1]]->SetTitle("Double ratio high-m_{T} to low-m_{T}");
374  histo[0][1][bkg_ind[1]]->SetYTitle("R_{high}/R_{low}");
375  leglabel = ("R_{high}/R_{low} (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
376  } else {
377  histo[0][1][bkg_ind[1]]->SetTitle("Double ratio n_{b} #geq 2 to n_{b} = 1");
378  histo[0][1][bkg_ind[1]]->SetYTitle("R_{2b}/R_{1b}");
379  leglabel = ("R_{2b}/R_{1b} (#chi^{2}/n = "+RoundNumber(chi2,1)+"/");
380  }
381  leg.Clear();
382  line.SetLineColor(4);
383  leglabel += ndof;
384  leglabel += (", p = "+RoundNumber(pvalue*100,1)+"%)");
385  leg.AddEntry(histo[0][1][bkg_ind[1]], leglabel,"lm");
386  leg.Draw();
387 
388  line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
389  pname = "plots/1d/doubleratio_"+vars[1].tag+(do_2b1b?"_2b1b.eps":"_mt.eps");
390  can.SaveAs(pname);
391 
392  cout<<endl;
393 
394  for(unsigned his(0); his < 2; his++){
395  for(unsigned var(0); var<vars.size(); var++){
396  for(unsigned sam(0); sam < vars[var].samples.size(); sam++)
397  if(histo[his][var][sam]) histo[his][var][sam]->Delete();
398  }
399  }
400 }
401 
TColor tcu_purple(2005, 52/255., 42/255., 123/255.)
TColor ucsb_gold(2001, 255/255., 200/255., 47/255)
int main()
void setDefaultStyle()
Definition: styles.cpp:36
TColor uf_orange(2003, 255/255., 74/255., 0/255.)
TColor tar_heel_blue(2006, 86/255., 160/255., 211/255.)
STL namespace.
TColor ucsb_blue(2000, 1/255., 57/255., 166/255.)
TString luminosity
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
TColor sig_gold(2008, 215/255., 162/255., 50/255.)
tuple file
Definition: parse_card.py:238
TColor uo_green(2004, 0/255., 79/255., 39/255.)
TColor penn_red(2002, 149/255., 0/255., 26/255.)
void calc_chi2_diff(TH1D *histo1, TH1D *histo2, float &chi2, int &ndof, float &pvalue, float *average)
TColor seal_brown(2010, 89/255., 38/255., 11/255.)
TColor sig_teal(2007, 96/255., 159/255., 128/255.)