ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_pie.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("2015_05_25");
21  TString plot_type=".eps";
22  TString plot_style="RA4";
23 }
24 
25 using namespace std;
26 
27 int main(){
28  styles style(plot_style);
29  style.setDefaultStyle();
30 
31  TString folder="/cms5r0/ald77/archive/"+ntuple_date+"/skim/";
32  //TString folder="archive/current/";
33  vector<TString> s_tt;
34  s_tt.push_back(folder+"*_TTJet*");
35  vector<TString> s_wjets;
36  s_wjets.push_back(folder+"*WJetsToLNu_HT*");
37  vector<TString> s_single;
38  s_single.push_back(folder+"*_T*channel*");
39  vector<TString> s_ttv;
40  s_ttv.push_back(folder+"*TTW*");
41  s_ttv.push_back(folder+"*TTZ*");
42  vector<TString> s_other;
43  s_other.push_back(folder+"*QCD_HT*");
44  s_other.push_back(folder+"*_ZJet*");
45  s_other.push_back(folder+"*DY*");
46  s_other.push_back(folder+"*WH_HToBB*");
47  vector<TString> s_t1t;
48  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
49  vector<TString> s_t1tc;
50  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
51 
52  // Reading ntuples
53  vector<TChain*> chains;
54  vector<sfeats> samples;
55  samples.push_back(sfeats(s_tt, "t#bar{t}, 2 l", 1006,1,"ntruleps>=2"));//0
56  samples.push_back(sfeats(s_tt, "t#bar{t}, 1 l", 1000,1,"ntruleps<=1"));//1
57  samples.push_back(sfeats(s_ttv, "ttV", 1002));//2
58  samples.push_back(sfeats(s_single, "Single top", 1005));//3
59  samples.push_back(sfeats(s_wjets, "W+jets", 1004));//4
60  samples.push_back(sfeats(s_other, "Other", 1001));//5
61  samples.push_back(sfeats(s_t1t, "T1tttt(1500,100)", 2));//6
62  samples.push_back(sfeats(s_t1tc, "T1tttt(1200,800)", 2,2));//7
63 
64  samples.push_back(sfeats(s_tt, "0 leps", kGreen-4, 1, "ntruleps==0"));//8
65  samples.push_back(sfeats(s_tt, "1 #tau_{had}", kRed-4, 1, "ntruleps==1 && ntrutaush==1"));//9
66  samples.push_back(sfeats(s_tt, "1 e/#mu", kBlue-4, 1, "ntruleps==1 && (ntruels+ntrumus)==1"));//10
67  samples.push_back(sfeats(s_tt, "2 #tau_{had}", kRed+2, 1, "ntruleps==2 && ntrutaush==2"));//11
68  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{had}", kMagenta+2, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutaush==1"));//12
69  samples.push_back(sfeats(s_tt, "2 e/#mu", kBlue+2, 1, "ntruleps==2 && (ntruels+ntrumus)==2"));//13
70  samples.push_back(sfeats(s_tt, "3+ leps", kGreen+2, 1, "ntruleps>=3"));//14
71 
72  samples.push_back(sfeats(s_tt, "0 leps", kGreen-4, 1, "ntruleps==0&&met>100&&met<=200"));//15
73  samples.push_back(sfeats(s_tt, "1 #tau_{had}", kRed-4, 1, "ntruleps==1 && ntrutaush==1&&met>100&&met<=200"));//16
74  samples.push_back(sfeats(s_tt, "1 e/#mu", kBlue-4, 1, "ntruleps==1 && (ntruels+ntrumus)==1&&met>100&&met<=200"));//17
75  samples.push_back(sfeats(s_tt, "2 #tau_{had}", kRed+2, 1, "ntruleps==2 && ntrutaush==2&&met>100&&met<=200"));//18
76  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{had}", kMagenta+2, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutaush==1&&met>100&&met<=200"));//19
77  samples.push_back(sfeats(s_tt, "2 e/#mu", kBlue+2, 1, "ntruleps==2 && (ntruels+ntrumus)==2&&met>100&&met<=200"));//20
78  samples.push_back(sfeats(s_tt, "2 #tau_{lep}", kOrange+3, 1, "ntruleps==2 && ntrutaush==1"));//21
79  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{lep}", kBlack, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutausl==1"));//22
80  samples.push_back(sfeats(s_tt, "1 #tau_{had}, 1 #tau_{lep}", kYellow, 1, "ntruleps==2 && ntrutaush==1 && ntrutausl==1"));//23
81  samples.push_back(sfeats(s_tt, "3+ leps", kGreen+2, 1, "ntruleps>=3"));//24
82 
83  samples.push_back(sfeats(s_tt, "0 leps", kGreen-4, 1, "ntruleps==0&&met>200&&met<=400"));//25
84  samples.push_back(sfeats(s_tt, "1 #tau_{had}", kRed-4, 1, "ntruleps==1 && ntrutaush==1&&met>200&&met<=400"));//26
85  samples.push_back(sfeats(s_tt, "1 e/#mu", kBlue-4, 1, "ntruleps==1 && (ntruels+ntrumus)==1&&met>200&&met<=400"));//27
86  samples.push_back(sfeats(s_tt, "2 #tau_{had}", kRed+2, 1, "ntruleps==2 && ntrutaush==2&&met>200&&met<=400"));//28
87  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{had}", kMagenta+2, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutaush==1&&met>200&&met<=400"));//29
88  samples.push_back(sfeats(s_tt, "2 e/#mu", kBlue+2, 1, "ntruleps==2 && (ntruels+ntrumus)==2&&met>200&&met<=400"));//30
89  samples.push_back(sfeats(s_tt, "2 #tau_{lep}", kOrange+3, 1, "ntruleps==2 && ntrutaush==1"));//31
90  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{lep}", kBlack, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutausl==1"));//32
91  samples.push_back(sfeats(s_tt, "1 #tau_{had}, 1 #tau_{lep}", kYellow, 1, "ntruleps==2 && ntrutaush==1 && ntrutausl==1"));//33
92  samples.push_back(sfeats(s_tt, "3+ leps", kGreen+2, 1, "ntruleps>=3&&met>200&&met<=400"));//34
93 
94  samples.push_back(sfeats(s_tt, "0 leps", kGreen-4, 1, "ntruleps==0&&met>400"));//35
95  samples.push_back(sfeats(s_tt, "1 #tau_{had}", kRed-4, 1, "ntruleps==1 && ntrutaush==1&&met>400"));//36
96  samples.push_back(sfeats(s_tt, "1 e/#mu", kBlue-4, 1, "ntruleps==1 && (ntruels+ntrumus)==1&&met>400"));//37
97  samples.push_back(sfeats(s_tt, "2 #tau_{had}", kRed+2, 1, "ntruleps==2 && ntrutaush==2&&met>400"));//38
98  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{had}", kMagenta+2, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutaush==1&&met>400"));//39
99  samples.push_back(sfeats(s_tt, "2 e/#mu", kBlue+2, 1, "ntruleps==2 && (ntruels+ntrumus)==2&&met>400"));//40
100  samples.push_back(sfeats(s_tt, "2 #tau_{lep}", kOrange+3, 1, "ntruleps==2 && ntrutaush==1"));//41
101  samples.push_back(sfeats(s_tt, "1 e/#mu, 1 #tau_{lep}", kBlack, 1, "ntruleps==2 && (ntruels+ntrumus)==1 && ntrutausl==1"));//42
102  samples.push_back(sfeats(s_tt, "1 #tau_{had}, 1 #tau_{lep}", kYellow, 1, "ntruleps==2 && ntrutaush==1 && ntrutausl==1"));//43
103  samples.push_back(sfeats(s_tt, "3+ leps", kGreen+2, 1, "ntruleps>=3&&met>400"));//44
104 
105  for(unsigned sam(0); sam < samples.size(); sam++){
106  chains.push_back(new TChain("tree"));
107  for(unsigned insam(0); insam < samples[sam].file.size(); insam++)
108  chains.at(sam)->Add(samples[sam].file[insam]);
109  }
110 
111  vector<int> bkgs;
112  bkgs.push_back(0);
113  bkgs.push_back(1);
114  bkgs.push_back(2);
115  bkgs.push_back(3);
116  bkgs.push_back(4);
117  bkgs.push_back(5);
118 
119  vector<int> with1500 = bkgs;
120  with1500.push_back(6);
121 
122  vector<int> with1200 = bkgs;
123  with1200.push_back(7);
124 
125  vector<int> leps_lmet;
126  // leps_lmet.push_back(15);
127  //leps_lmet.push_back(16);
128  // leps_lmet.push_back(17);
129  leps_lmet.push_back(18);
130  leps_lmet.push_back(19);
131  leps_lmet.push_back(20);
132  leps_lmet.push_back(21);
133  leps_lmet.push_back(22);
134  leps_lmet.push_back(23);
135  leps_lmet.push_back(24);
136  vector<int> leps_mmet;
137  // leps_mmet.push_back(25);
138  // leps_mmet.push_back(26);
139  // leps_mmet.push_back(27);
140  leps_mmet.push_back(28);
141  leps_mmet.push_back(29);
142  leps_mmet.push_back(30);
143  leps_mmet.push_back(31);
144  leps_mmet.push_back(32);
145  leps_mmet.push_back(33);
146  leps_mmet.push_back(34);
147  vector<int> leps_hmet;
148  // leps_hmet.push_back(35);
149  // leps_hmet.push_back(36);
150  // leps_hmet.push_back(37);
151  leps_hmet.push_back(38);
152  leps_hmet.push_back(39);
153  leps_hmet.push_back(40);
154  leps_hmet.push_back(41);
155  leps_hmet.push_back(42);
156  leps_hmet.push_back(43);
157  leps_hmet.push_back(44);
158 
159  vector<pfeats> pies;
161  // pies.push_back(pfeats(bkgs, "ht>500&&met>200&&njets>=6&&nbm>=2&&mt>125&&mj>400", "comp"));
162  // pies.push_back(pfeats(bkgs, "ht>500&&met>200&&njets>=6&&nbm>=2&&mt>125&&mj<=400", "comp"));
163  // pies.push_back(pfeats(bkgs, "ht>500&&met>200&&njets>=6&&nbm>=2&&mt<=125&&mj>400", "comp"));
164  // pies.push_back(pfeats(bkgs, "ht>500&&met>200&&njets>=6&&nbm>=2&&mt<=125&&mj<=400", "comp"));
165 
166  pies.push_back(pfeats(leps_lmet, "ht>500&&met>100&&njets>=7&&nbm>=2&&(nels+nmus)==1", "leps_lmet"));
167  pies.push_back(pfeats(leps_mmet, "ht>500&&met>100&&njets>=7&&nbm>=2&&(nels+nmus)==1", "leps_mmet"));
168  pies.push_back(pfeats(leps_hmet, "ht>500&&met>100&&njets>=7&&nbm>=2&&(nels+nmus)==1", "leps_hmet"));
170 
171  for(size_t pie = 0; pie < pies.size(); ++pie){
172  DrawPie(pies.at(pie), samples, chains);
173  }
174 
175  for(size_t ichain = 0; ichain < chains.size(); ++ichain){
176  if(chains.at(ichain) != NULL){
177  delete chains.at(ichain);
178  chains.at(ichain) = NULL;
179  }
180  }
181 }
182 
183 void DrawPie(const pfeats &pfeat, const vector<sfeats> &samples, const vector<TChain*> &chains){
184  vector<double> counts(pfeat.samples.size());
185  vector<int> colors(pfeat.samples.size());
186  vector<const char*> labels(pfeat.samples.size());
187  vector<TH1D> dummy_histos(pfeat.samples.size(), TH1D("","",1,-1.,1.));
188  TLegend l(0., 0., 1., 1.);
189  for(size_t iisample = 0; iisample < pfeat.samples.size(); ++iisample){
190  size_t isample = pfeat.samples.at(iisample);
191  const sfeats &sample = samples.at(isample);
192  TChain &chain = *chains.at(isample);
193  TString cut = "3.0*weight*("+pfeat.cut+"&&"+sample.cut+")";
194  double uncert;
195  get_count_and_uncertainty(chain, cut.Data(), counts.at(iisample), uncert);
196  colors.at(iisample) = sample.color;
197  labels.at(iisample) = sample.label;
198  dummy_histos.at(iisample).SetFillColor(sample.color);
199  l.AddEntry(&dummy_histos.at(iisample), sample.label, "f");
200  }
201 
202  TString name = FormatName(pfeat.tagname+"_"+pfeat.cut);
203 
204  TCanvas c("", "", 512, 512);
205  c.SetFillColorAlpha(0, 0.);
206  c.SetFillStyle(4000);
207  l.Draw();
208  c.Print("plots/pies/legen_"+name+plot_type);
209  TPie pie("", "", pfeat.samples.size(), &counts.at(0), &colors.at(0), &labels.at(0));
210  pie.SetCircle(0.5, 0.5, 0.3);
211  pie.Draw();
212  c.Print("plots/pies/label_"+name+plot_type);
213  pie.SetLabelFormat("%val");
214  pie.SetValueFormat("%0.1f");
215  pie.Draw();
216  c.Print("plots/pies/count_"+name+plot_type);
217  pie.SetLabelFormat("");
218  pie.SetCircle(0.5, 0.5, 0.49);
219  pie.Draw();
220  pie.SetLabelFormat("%perc");
221  pie.SetValueFormat("%0.1f");
222  pie.Draw();
223  c.Print("plots/pies/perc_"+name+plot_type);
224  c.Print("plots/pies/plain_"+name+plot_type);
225 }
226 
227 TString FormatName(TString name){
228  name.ReplaceAll("(","");
229  name.ReplaceAll(")","");
230  name.ReplaceAll("[","");
231  name.ReplaceAll("]","");
232  name.ReplaceAll("{","");
233  name.ReplaceAll("}","");
234  name.ReplaceAll("#","");
235  name.ReplaceAll(",","_");
236  name.ReplaceAll(" ","_");
237  name.ReplaceAll("\\","_");
238  name.ReplaceAll(">=","geq");
239  name.ReplaceAll(">","gt");
240  name.ReplaceAll("<=","leq");
241  name.ReplaceAll("<","lt");
242  name.ReplaceAll("==","eq");
243  name.ReplaceAll("!=","neq");
244  name.ReplaceAll("!","n");
245  name.ReplaceAll("&&","_");
246  name.ReplaceAll("||","_");
247  name.ReplaceAll("&","band");
248  name.ReplaceAll("|","bor");
249  name.ReplaceAll("+","plus");
250  name.ReplaceAll("-","minus");
251  name.ReplaceAll("*","times");
252  name.ReplaceAll("/","divby");
253  name.ReplaceAll("$","");
254  name.ReplaceAll("__","_");
255  return name;
256 }
TString cut
TString tagname
void setDefaultStyle()
Definition: styles.cpp:36
void get_count_and_uncertainty(TTree &tree, const std::string &cut, double &count, double &uncertainty)
Definition: utilities.cpp:257
STL namespace.
TString FormatName(TString name)
Definition: plot_pie.cxx:227
TString label
std::vector< int > samples
void DrawPie(const pfeats &pfeat, const vector< sfeats > &samples, const vector< TChain * > &chains)
Definition: plot_pie.cxx:183
int main()
Definition: plot_pie.cxx:27
TString cut
tuple file
Definition: parse_card.py:238
TString ntuple_date("2015_05_25")