ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_pie_bins.cxx
Go to the documentation of this file.
1 // plot_1d: Macro that plots variables both lumi weighted and normalized to the same area.
2 #include "plot_pie.hpp"
3 
4 #include <iostream>
5 #include <vector>
6 
7 #include "TChain.h"
8 #include "TH1D.h"
9 #include "TCanvas.h"
10 #include "TPie.h"
11 #include "TLegend.h"
12 #include "TString.h"
13 #include "TColor.h"
14 
15 #include "styles.hpp"
16 #include "utilities.hpp"
17 #include "utilities_macros.hpp"
18 
19 namespace {
20  TString ntuple_date("2016_06_14");
21  TString lumi = "5";
22  TString plot_type=".pdf";
23  TString plot_style="RA4";
24 }
25 
26 using namespace std;
27 
28 int main(){
29  styles style(plot_style);
30  style.setDefaultStyle();
31 
32  TString folder="/cms2r0/babymaker/babies/"+ntuple_date+"/mc/skim_baseline/";
33 
34  vector<TString> s_tt;
35  s_tt.push_back(folder+"*_TTJets*Lept*");
36  s_tt.push_back(folder+"*_TTJets*HT*");
37  vector<TString> s_wjets;
38  s_wjets.push_back(folder+"*_WJetsToLNu*");
39  vector<TString> s_single;
40  s_single.push_back(folder+"*_ST_*");
41  vector<TString> s_ttv;
42  s_ttv.push_back(folder+"*TTW*");
43  s_ttv.push_back(folder+"*TTZ*");
44  vector<TString> s_other;
45  s_other.push_back(folder+"*QCD_HT*");
46  s_other.push_back(folder+"*DYJetsToLL*.root");
47  s_other.push_back(folder+"*_ZJet*.root");
48  s_other.push_back(folder+"*ggZH_HToBB*.root");
49  s_other.push_back(folder+"*ttHJetTobb*.root");
50  s_other.push_back(folder+"*_TTGJets*.root");
51  s_other.push_back(folder+"*_TTTT*.root");
52  s_other.push_back(folder+"*_WH_HToBB*.root");
53  s_other.push_back(folder+"*_ZH_HToBB*.root");
54  s_other.push_back(folder+"*_WWTo*.root");
55  s_other.push_back(folder+"*_WZTo*.root");
56  s_other.push_back(folder+"*_ZZ_*.root");
57 
58  vector<TString> s_t1t;
59  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
60  vector<TString> s_t1tc;
61  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
62 
63  // Reading
64  vector<TChain*> chains;
65  vector<sfeats> samples;
66  samples.push_back(sfeats(s_tt, "t#bar{t}, 1 true lepton", dps::c_tt_1l, 1,"ntruleps<=1&&stitch"));
67  samples.push_back(sfeats(s_tt, "t#bar{t}, 2 true leptons", dps::c_tt_2l,1,"ntruleps>=2&&stitch"));
68  samples.push_back(sfeats(s_wjets, "W+jets", dps::c_wjets,1));
69  samples.push_back(sfeats(s_single, "Single t", 42,1));
70  samples.push_back(sfeats(s_ttv, "ttV", ra4::c_ttv,1));
71  samples.push_back(sfeats(s_other, "Other", 2001, 1));
72 
73 
74  for(unsigned sam(0); sam < samples.size(); sam++){
75  chains.push_back(new TChain("tree"));
76  for(unsigned insam(0); insam < samples[sam].file.size(); insam++)
77  chains.at(sam)->Add(samples[sam].file[insam]);
78  }
79 
80  vector<int> bkgs;
81  bkgs.push_back(0);
82  bkgs.push_back(1);
83  bkgs.push_back(2);
84  bkgs.push_back(3);
85  bkgs.push_back(4);
86  bkgs.push_back(5);
87 
88  vector<pfeats> pies;
89  TString baseline = "ht>500&&met>200&&nleps==1&&nveto==0&&njets>=6&&nbm>=1&&mj14>250&&pass&&stitch";
90 
91  /* ///////////////////////////////////////////////////////////////
92  //LOW MET
93  //Low nj
94  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","lowmet_lownj_lownb"));
95  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","lowmet_lownj_mednb"));
96  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","lowmet_lownj_highnb"));
97  //High nj
98  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","lowmet_highnj_lownb"));
99  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","lowmet_highnj_mednb"));
100  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","lowmet_highnj_highnb"));
101  //MED MET
102  //Low nj
103  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","medmet_lownj_lownb"));
104  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","medmet_lownj_mednb"));
105  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","medmet_lownj_highnb"));
106  //High nj
107  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","medmet_highnj_lownb"));
108  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","medmet_highnj_mednb"));
109  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","medmet_highnj_highnb"));
110  //HIGH MET
111  //Low nj
112  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","highmet_lownj_lownb"));
113  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","highmet_lownj_mednb"));
114  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","highmet_lownj_highnb"));
115  //High nj
116  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","highmet_highnj_lownb"));
117  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","highmet_highnj_mednb"));
118  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=1&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","highmet_highnj_highnb"));
120 
121 
122  // NO NB=1 INTEGRATION
124  //LOW MET
125  //Low nj
126  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm==1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","no_nb1int_lowmet_lownj_lownb"));
127  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","no_nb1int_lowmet_lownj_mednb"));
128  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","no_nb1int_lowmet_lownj_highnb"));
129  //High nj
130  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm==1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","no_nb1int_lowmet_highnj_lownb"));
131  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","no_nb1int_lowmet_highnj_mednb"));
132  pies.push_back(pfeats(bkgs,baseline+"&&met<=350&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","no_nb1int_lowmet_highnj_highnb"));
133  //MED MET
134  //Low nj
135  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm==1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","no_nb1int_medmet_lownj_lownb"));
136  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","no_nb1int_medmet_lownj_mednb"));
137  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","no_nb1int_medmet_lownj_highnb"));
138  //High nj
139  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm==1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","no_nb1int_medmet_highnj_lownb"));
140  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","no_nb1int_medmet_highnj_mednb"));
141  pies.push_back(pfeats(bkgs,baseline+"&&met>350&&met<=500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","no_nb1int_medmet_highnj_highnb"));
142  //HIGH MET
143  //Low nj
144  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm==1&&mj14<=400)||(mj14>400&&njets<=8&&nbm==1))","no_nb1int_highmet_lownj_lownb"));
145  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm==2))","no_nb1int_highmet_lownj_mednb"));
146  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets<=8&&nbm>=3))","no_nb1int_highmet_lownj_highnb"));
147  //High nj
148  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm==1&&mj14<=400)||(mj14>400&&njets>=9&&nbm==1))","no_nb1int_highmet_highnj_lownb"));
149  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm==2))","no_nb1int_highmet_highnj_mednb"));
150  pies.push_back(pfeats(bkgs,baseline+"&&met>500&&((nbm>=2&&mj14<=400)||(mj14>400&&njets>=9&&nbm>=3))","no_nb1int_highmet_highnj_highnb"));
152 
153  for(size_t pie = 0; pie < pies.size(); ++pie){
154  DrawPie(pies.at(pie), samples, chains);
155  }
156 
157  for(size_t ichain = 0; ichain < chains.size(); ++ichain){
158  if(chains.at(ichain) != NULL){
159  delete chains.at(ichain);
160  chains.at(ichain) = NULL;
161  }
162  }
163 }
164 
165 void DrawPie(const pfeats &pfeat, const vector<sfeats> &samples, const vector<TChain*> &chains){
166  vector<double> counts(pfeat.samples.size());
167  vector<int> colors(pfeat.samples.size());
168  vector<const char*> labels(pfeat.samples.size());
169  vector<TH1D> dummy_histos(pfeat.samples.size(), TH1D("","",1,-1.,1.));
170  TLegend l(0., 0., 1., 1.);
171  for(size_t iisample = 0; iisample < pfeat.samples.size(); ++iisample){
172  size_t isample = pfeat.samples.at(iisample);
173  const sfeats &sample = samples.at(isample);
174  TChain &chain = *chains.at(isample);
175  TString cut = lumi+"*weight*("+pfeat.cut+"&&"+sample.cut+")";
176  double uncert;
177  get_count_and_uncertainty(chain, cut.Data(), counts.at(iisample), uncert);
178  colors.at(iisample) = sample.color;
179  labels.at(iisample) = sample.label;
180  dummy_histos.at(iisample).SetFillColor(sample.color);
181  l.AddEntry(&dummy_histos.at(iisample), sample.label, "f");
182  }
183 
184  TString name = FormatName(pfeat.tagname+"_"+pfeat.cut);
185 
186  TCanvas c("", "", 512, 512);
187  c.SetFillColorAlpha(0, 0.);
188  c.SetFillStyle(4000);
189  l.Draw();
190  c.Print("plots/pie_bins/legen_"+name+plot_type);
191  TPie pie("", "", pfeat.samples.size(), &counts.at(0), &colors.at(0), &labels.at(0));
192  pie.SetCircle(0.5, 0.5, 0.35);
193  pie.Draw();
194  c.Print("plots/pie_bins/label_"+name+plot_type);
195  pie.SetLabelFormat("%val");
196  pie.SetValueFormat("%0.1f");
197  pie.Draw();
198  c.Print("plots/pie_bins/count_"+name+plot_type);
199  pie.SetLabelFormat("");
200  pie.SetCircle(0.5, 0.5, 0.35);
201  pie.Draw();
202  pie.SetLabelFormat("%perc");
203  pie.SetValueFormat("%0.1f");
204  pie.Draw();
205  c.Print("plots/pie_bins/perc_"+name+plot_type);
206 }
207 
208 TString FormatName(TString name){
209  name.ReplaceAll("(","");
210  name.ReplaceAll(")","");
211  name.ReplaceAll("[","");
212  name.ReplaceAll("]","");
213  name.ReplaceAll("{","");
214  name.ReplaceAll("}","");
215  name.ReplaceAll("#","");
216  name.ReplaceAll(",","_");
217  name.ReplaceAll(" ","_");
218  name.ReplaceAll("\\","_");
219  name.ReplaceAll(">=","geq");
220  name.ReplaceAll(">","gt");
221  name.ReplaceAll("<=","leq");
222  name.ReplaceAll("<","lt");
223  name.ReplaceAll("==","eq");
224  name.ReplaceAll("!=","neq");
225  name.ReplaceAll("!","n");
226  name.ReplaceAll("&&","_");
227  name.ReplaceAll("||","_");
228  name.ReplaceAll("&","band");
229  name.ReplaceAll("|","bor");
230  name.ReplaceAll("+","plus");
231  name.ReplaceAll("-","minus");
232  name.ReplaceAll("*","times");
233  name.ReplaceAll("/","divby");
234  name.ReplaceAll("$","");
235  name.ReplaceAll("__","_");
236  return name;
237 }
int main()
void setDefaultStyle()
Definition: styles.cpp:36
STL namespace.
tuple file
Definition: parse_card.py:238