ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_track_veto.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 
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 
14 #include "styles.hpp"
15 #include "utilities.hpp"
16 #include "utilities_macros.hpp"
17 
18 using namespace std;
19 using std::cout;
20 using std::endl;
21 
22 int main(){
23  styles style("RA4"); style.setDefaultStyle();
24  vector<hfeats> vars;
25  TCanvas can;
26  TString folder="archive/2015_05_02/skim/";
27  TString folder_noskim="archive/15-05-02//";
28  vector<TString> s_tt;
29  s_tt.push_back(folder+"*_TTJet*");
30  vector<TString> s_tt_noskim;
31  s_tt_noskim.push_back(folder_noskim+"*_TTJet*12.root");
32  vector<TString> s_wjets;
33  s_wjets.push_back(folder+"*WJetsToLNu_HT*");
34  vector<TString> s_single;
35  s_single.push_back(folder+"*_T*channel*");
36  vector<TString> s_ttv;
37  s_ttv.push_back(folder+"*TTW*");
38  s_ttv.push_back(folder+"*TTZ*");
39  vector<TString> s_other;
40  s_other.push_back(folder+"*QCD_HT*");
41  s_other.push_back(folder+"*_ZJet*");
42  s_other.push_back(folder+"*DY*");
43  s_other.push_back(folder+"*WH_HToBB*");
44  vector<TString> s_t1t;
45  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
46  vector<TString> s_t1tc;
47  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
48 
49  // Reading ntuples
50  vector<TChain *> chain;
51  vector<sfeats> Samples;
52  Samples.push_back(sfeats(s_other, "Other", 1001));
53  Samples.push_back(sfeats(s_ttv, "ttV", 1002));
54  Samples.push_back(sfeats(s_single, "Single top", 1005));
55  Samples.push_back(sfeats(s_wjets, "W + jets", 1004));
56  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"));
57  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"));
58  Samples.push_back(sfeats(s_t1t, "T1tttt(1500,100)", 2));
59  Samples.push_back(sfeats(s_t1tc, "T1tttt(1200,800)", 2,2));
60  Samples.push_back(sfeats(s_tt_noskim, "t#bar{t}", 1000,1));
61  //Samples.push_back(sfeats(s_tt, "t#bar{t}", 1000,1));
62 
63  for(unsigned sam(0); sam < Samples.size(); sam++){
64  chain.push_back(new TChain("tree"));
65  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
66  chain[sam]->Add(Samples[sam].file[insam]);
67  }
68 
69  vector<int> ra4_sam;
70  ra4_sam.push_back(0);
71  ra4_sam.push_back(1);
72  ra4_sam.push_back(2);
73  ra4_sam.push_back(3);
74  ra4_sam.push_back(4);
75  ra4_sam.push_back(5);
76  ra4_sam.push_back(6);
77  ra4_sam.push_back(7);
78 
79 
80  vector<int> ra4_tt_t1;
81  ra4_tt_t1.push_back(4);
82  ra4_tt_t1.push_back(5);
83  ra4_tt_t1.push_back(6);
84  ra4_tt_t1.push_back(7);
85 
86 
87  vector<int> ra4_tt2l_t1;
88  ra4_tt2l_t1.push_back(4);
89  ra4_tt2l_t1.push_back(6);
90  ra4_tt2l_t1.push_back(7);
91 
92 
93  //to switch between different kinds of tracks, just need to do a few search and replace:
94  // hadrons use this id :!(tks_id*tks_id==169||tks_id*tks_id==121)
95  // replace with tks_id*tks_id==121 for elec, tks_id*tks_id==169 for muons
96 
97  //VERY IMPORTANT (tks_id*lep_charge)<0 selects OS tracks for hadronic tracks
98  // (tks_id*lep_charge)>0 selects OS tracks for leptonic tracks
99 
100 
101 
102 
103  //different binnings are generally relevant for different kinds of tracks
104 
105  //absolute isolation is just relative isolation * pT
106 
107 
108 
109  //The number of events in a region are printed in the legend by using the first three histograms put in "vars" (mT from each region).
110  //The code finds the correct number by looking at your cuts for these strings:
111  //mj>300&&met>200 or mj>500&&met>200 or mj>300&&met>40
112  //So preserve the order of these cuts if you want them to be found.
113 
114 
115 
116 
117  //primary lepton mt plot used later to get region normalization for other plots (just to throw on legend)- DO NOT delete or move
118  vars.push_back(hfeats("mt",50,0,200, ra4_tt2l_t1, "m_{T} (GeV)",
119  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1"));
120 
121  vars.push_back(hfeats("mt",50,0,200, ra4_tt2l_t1, "m_{T} (GeV)",
122  "ht>500&&mj>500&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1"));
123 
124  vars.push_back(hfeats("mt",50,0,200, ra4_tt2l_t1, "m_{T} (GeV)",
125  "ht>500&&mj>300&&met>400&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1"));
126 
127 
128 
129 
130 
131 
132  //absolute charge + neutral isolation, baseline study region
133  //prompt
134  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
135  "ht>500&&mj>500&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
136 
137  //nonprompt
138  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
139  "ht>500&&mj>500&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)"));
140 
141  //Absolute charged isolation, prompt and non-prompt
142  vars.push_back(hfeats("(tks_pt)*(tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg mini isolation, hadronic tracks",
143  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
144 
145  vars.push_back(hfeats("(tks_pt)*(tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg mini isolation, hadronic tracks",
146  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)"));
147 
148 
149  //absolute charged + neutral isolation, high MET region
150  //prompt
151  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
152  "ht>500&&mj>300&&met>400&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
153  //non-prompt
154  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
155  "ht>500&&mj>300&&met>400&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)"));
156 
157 
158  //Relative charged + neutral isolation, prompt and non-prompt
159  vars.push_back(hfeats("tks_mini_ne+tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg+neu mini isolation, hadronic tracks",
160  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
161 
162  vars.push_back(hfeats("tks_mini_ne+tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg+neu mini isolation, hadronic tracks",
163  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)"));
164 
165  //Relative charged isolation, prompt and non-prompt
166  vars.push_back(hfeats("tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg mini isolation, hadronic tracks",
167  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
168  vars.push_back(hfeats("tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg mini isolation, hadronic tracks",
169  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)"));
170 
171 
172 
173  //track mT with different isolation cuts
174  vars.push_back(hfeats("tks_mt",30,0,300, ra4_tt2l_t1, "track m_{T} (GeV), hadronic tracks, abs chg+neu mini iso < 10",
175  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&((tks_pt)*(tks_mini_ne+tks_mini_ch))<10"));
176  vars.push_back(hfeats("tks_mt",30,0,300, ra4_tt2l_t1, "track m_{T} (GeV), hadronic tracks, abs chg+neu iso mini < 20",
177  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&((tks_pt)*(tks_mini_ne+tks_mini_ch))<20"));
178 
179 
180  //track mT without isolation cuts
181  vars.push_back(hfeats("tks_mt",30,0,300, ra4_tt2l_t1, "track m_{T} (GeV), hadronic tracks",
182  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
183 
184 
185  //track pT, with and without isolation cuts
186  vars.push_back(hfeats("tks_pt",30,0,150, ra4_tt2l_t1, "track p_{T} (GeV), hadronic tracks",
187  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)"));
188  vars.push_back(hfeats("tks_pt",30,0,150, ra4_tt2l_t1, "track p_{T} (GeV), hadronic tracks, chg+neu iso < 0.2",
189  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&(tks_mini_ne+tks_mini_ch)<0.2"));
190  vars.push_back(hfeats("tks_pt",30,0,150, ra4_tt2l_t1, "track p_{T} (GeV), hadronic tracks, chg+neu iso < 1.0",
191  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&(tks_mini_ne+tks_mini_ch)<1.0"));
192 
193 
194  //Now plot only tracks with mT<100:
195  //Absolute charged + neutral isolation, prompt and non-prompt
196  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
197  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&tks_mt<100"));
198 
199  vars.push_back(hfeats("(tks_pt)*(tks_mini_ne+tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg+neu mini isolation, hadronic tracks",
200  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)&&tks_mt<100"));
201 
202  //Absolute charged isolation, prompt and non-prompt
203  vars.push_back(hfeats("(tks_pt)*(tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg mini isolation, hadronic tracks",
204  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&tks_mt<100"));
205 
206  vars.push_back(hfeats("(tks_pt)*(tks_mini_ch)",40,0,100, ra4_tt2l_t1, "abs chg mini isolation, hadronic tracks",
207  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)&&tks_mt<100"));
208 
209  //Relative charged + neutral isolation, prompt and non-prompt
210  vars.push_back(hfeats("tks_mini_ne+tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg+neu mini isolation, hadronic tracks",
211  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&tks_mt<100"));
212  vars.push_back(hfeats("tks_mini_ne+tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg+neu mini isolation, hadronic tracks",
213  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)&&tks_mt<100"));
214 
215  //Relative charged isolation, prompt and non-prompt
216  vars.push_back(hfeats("tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg mini isolation, hadronic tracks",
217  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&(tks_from_w)&&tks_mt<100"));
218  vars.push_back(hfeats("tks_mini_ch",60,0,3, ra4_tt2l_t1, "chg mini isolation, hadronic tracks",
219  "ht>500&&mj>300&&met>200&&nbm>=1&&mt>140&&njets>=6&&(nmus+nels)==1&&((tks_id*lep_charge)<0)&&(!tks_is_primary)&&!(tks_id*tks_id==169||tks_id*tks_id==121)&&!(tks_from_w)&&tks_mt<100"));
220 
221 
222 
223 
224 
225 
226 
228 
229 
230 
231  TString luminosity="10";
232  float minLog = 0.04, maxLog = 20;
233  double legX = 0.44, legY = 0.88, legSingle = 0.055;
234  double legW = 0.26, legH = legSingle*vars[0].samples.size();
235  TLegend leg(legX, legY-legH, legX+legW, legY);
236  leg.SetTextSize(0.04); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
237  leg.SetTextFont(42);
238 
239  TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
240  vector< vector<TH1D*> > histo[2];
241  vector<TH1D*> varhisto;
242  vector<float> nentries;
243  //capture event counts for the 3 regions in the study
244  vector<float> nevents1;
245  vector<float> nevents2;
246  vector<float> nevents3;
247  nevents1.resize(0);
248  nevents2.resize(0); nevents3.resize(0);
249  TString hname, pname, variable, leghisto, totCut, title, ytitle;
250  for(unsigned var(0); var<vars.size(); var++){
251  //if(vars[var].title.Contains("hadronic") || vars[var].title.Contains("hadronic")) continue;
252  cout<<endl;
253  // Generating vector of histograms
254  title = vars[var].cuts; if(title=="1") title = "";
255  title.ReplaceAll("Sum$(abs(mc_id)==11)>0","");title.ReplaceAll("Sum$(abs(mc_id)==13)>0","");
256  title.ReplaceAll("nvmus==1&&nmus==1&&nvels==0","1 #mu");
257  title.ReplaceAll("nvmus10==0&&nvels10==0", "0 leptons");
258  title.ReplaceAll("(nmus+nels)", "n_{lep}"); title.ReplaceAll("njets30","n_{jets}^{30}");
259  title.ReplaceAll("els_pt","p^{e}_{T}");title.ReplaceAll("mus_pt","p^{#mu}_{T}");
260  title.ReplaceAll("mus_reliso","RelIso"); title.ReplaceAll("els_reliso","RelIso");
261  title.ReplaceAll("mus_miniso_tr15","MiniIso"); title.ReplaceAll("els_miniso_tr15","MiniIso");
262  title.ReplaceAll("njets","n_{jets}");title.ReplaceAll("abs(lep_id)==13&&","");
263  title.ReplaceAll(">=", " #geq "); title.ReplaceAll(">", " > "); title.ReplaceAll("&&", ", ");
264  title.ReplaceAll("met", "MET"); title.ReplaceAll("ht", "H_{T}"); title.ReplaceAll("mt", "m_{T}");
265  title.ReplaceAll("nleps==1", "1 lepton"); title.ReplaceAll("nbm","n_{b}"); title.ReplaceAll("==", " = ");
266  title.ReplaceAll("nbl[1]","n_{b,l}");
267 
268  for(unsigned his(0); his < 2; his++){
269  varhisto.resize(0);
270  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
271  hname = "histo"; hname += var; hname += his; hname += sam;
272  varhisto.push_back(new TH1D(hname, title, vars[var].nbins, vars[var].minx, vars[var].maxx));
273  }
274  histo[his].push_back(varhisto);
275  }
276 
278  leg.Clear();
279  nentries.resize(0);
280  variable = vars[var].varname;
281  float maxhisto(-999);
282  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
283  int isam = vars[var].samples[sam];
284  bool isSig = Samples[isam].isSig;
285  totCut = Samples[isam].factor+"*"+luminosity+"*weight*("+vars[var].cuts+"&&"+Samples[isam].cut+")";
286  //cout<<totCut<<endl;
287  chain[isam]->Project(histo[0][var][sam]->GetName(), variable, totCut);
288  histo[0][var][sam]->SetBinContent(vars[var].nbins,
289  histo[0][var][sam]->GetBinContent(vars[var].nbins)+
290  histo[0][var][sam]->GetBinContent(vars[var].nbins+1));
291  nentries.push_back(histo[0][var][sam]->Integral(1,vars[var].nbins));
292  if(var==0) nevents1.push_back(nentries[sam]);
293  if(var==1) nevents2.push_back(nentries[sam]);
294  if(var==2) nevents3.push_back(nentries[sam]);
295  histo[0][var][sam]->SetXTitle(vars[var].title);
296  ytitle = "Entries for "+luminosity+" fb^{-1}";
297  if(vars[var].unit!="") {
298  int digits(0);
299  float binwidth((vars[var].maxx-vars[var].minx)/static_cast<float>(vars[var].nbins));
300  if(binwidth<1) digits = 1;
301  ytitle += ("/("+RoundNumber(binwidth,digits) +" "+vars[var].unit+")");
302  }
303  histo[0][var][sam]->SetYTitle(ytitle);
304  // Cloning histos for later
305  for(int bin(0); bin<=histo[0][var][sam]->GetNbinsX()+1; bin++)
306  histo[1][var][sam]->SetBinContent(bin, histo[0][var][sam]->GetBinContent(bin));
307 
308  if(!isSig){ // Adding previous bkg histos
309  for(int bsam(sam-1); bsam >= 0; bsam--){
310  histo[0][var][sam]->Add(histo[0][var][bsam]);
311  break;
312  // if(!Samples[vars[var].samples[bsam]].file[0].Contains("T1tttt")){
313  // histo[0][var][sam]->Add(histo[0][var][bsam]);
314  // break;
315  // }
316  }
317  histo[0][var][sam]->SetFillColor(Samples[isam].color);
318  histo[0][var][sam]->SetFillStyle(1001);
319  histo[0][var][sam]->SetLineColor(1);
320  histo[0][var][sam]->SetLineWidth(1);
321  } else {
322  histo[0][var][sam]->SetLineColor(Samples[isam].color);
323  histo[0][var][sam]->SetLineStyle(Samples[isam].style);
324  histo[0][var][sam]->SetLineWidth(3);
325  }
326  if(maxhisto < histo[0][var][sam]->GetMaximum()) maxhisto = histo[0][var][sam]->GetMaximum();
327  } // First loop over samples
328  int firstplotted(-1);
329  for(int sam(vars[var].samples.size()-1); sam >= 0; sam--){
330  int isam = vars[var].samples[sam];
331  leghisto = Samples[isam].label+" [N = " + RoundNumber(nentries[sam],0) + "]";
332  if(var==0){
333  cout<<endl<<Samples[isam].label<<" Total entries: " <<RoundNumber(nentries[sam],0)<<endl;
334 
335  }
336  leg.AddEntry(histo[0][var][sam], leghisto);
337  bool isSig = Samples[isam].isSig;
338  if(!isSig){
339  if(firstplotted < 0) {
340  histo[0][var][sam]->Draw();
341  firstplotted = sam;
342  } else histo[0][var][sam]->Draw("same");
343  }
344  }
345  for(int sam(vars[var].samples.size()-1); sam >= 0; sam--){
346  int isam = vars[var].samples[sam];
347  bool isSig = Samples[isam].isSig;
348  if(isSig) histo[0][var][sam]->Draw("same");
349  }
350  legH = legSingle*vars[var].samples.size(); leg.SetY1NDC(legY-legH);
351  leg.SetX1NDC(legX); leg.SetX2NDC(legX+legW);
352  leg.Draw();
353  if(histo[0][var][firstplotted]->GetMinimum() > minLog) histo[0][var][firstplotted]->SetMinimum(minLog);
354  histo[0][var][firstplotted]->SetMinimum(minLog);
355  histo[0][var][firstplotted]->SetMaximum(maxhisto*maxLog);
356  // if(variable=="mt" && var==vars.size()-1) {
357  // histo[0][var][firstplotted]->SetMinimum(0.2);
358  // histo[0][var][firstplotted]->SetMaximum(maxhisto*2);
359  // }
360  histo[0][var][firstplotted]->Draw("axis same");
361  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*maxLog);
362  can.SetLogy(1);
363  pname = "plots/1d6_tau/log_lumi_"+vars[var].tag+".pdf";
364  //can.SaveAs(pname);
365  histo[0][var][firstplotted]->SetMinimum(0);
366  histo[0][var][firstplotted]->SetMaximum(maxhisto*1.1);
367  can.SetLogy(0);
368  pname = "plots/1d6_tau/lumi_"+vars[var].tag+".pdf";
369  can.SaveAs(pname);
370 
372  leg.Clear(); maxhisto = -999;
373  leg.SetX1NDC(legX-0.08); leg.SetX2NDC(legX+legW-0.08);
374  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
375  int isam = vars[var].samples[sam];
376  histo[1][var][sam]->SetLineColor(Samples[isam].color);
377  histo[1][var][sam]->SetLineStyle(Samples[isam].style);
378  histo[1][var][sam]->SetLineWidth(3);
379  if(nentries[sam]) histo[1][var][sam]->Scale(100./nentries[sam]);
380  if(maxhisto < histo[1][var][sam]->GetMaximum()) maxhisto = histo[1][var][sam]->GetMaximum();
381  if(sam==0){
382  histo[1][var][sam]->SetXTitle(vars[var].title);
383  histo[1][var][sam]->SetYTitle("Entries (%)");
384  histo[1][var][sam]->Draw();
385  } else histo[1][var][sam]->Draw("same");
386  if(vars[var].title.Contains("mini") && !vars[var].title.Contains("abs") && (sam !=1 || vars[var].samples.size()<4 )){ //not for single lepton ttbar, if present
387  //print integrals on screen
388  cout<<Samples[isam].label<<" track isolation efficiency"<<endl<<Form("0.05: %.2f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(0.049)))<<"%"<<endl;
389  cout<<Form("0.1: %.2f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(0.09)))<<"%"<<endl;
390  cout<<Form("0.2: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(0.19)))<<"%"<<endl;
391  cout<<Form("0.3: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(0.29)))<<"%"<<endl;
392  cout<<Form("0.5: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(0.49)))<<"%"<<endl<<endl;
393 
394  }
395 
396  if(vars[var].title.Contains("mini") && vars[var].title.Contains("abs") && (sam !=1 || vars[var].samples.size()<4 )){
397  //print integrals on screen
398  cout<<Samples[isam].label<<" track isolation efficiency"<<endl<<Form("2.5: %.2f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(2.49)))<<"%"<<endl;
399  cout<<Form("5: %.2f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(4.9)))<<"%"<<endl;
400  cout<<Form("10: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(9.9)))<<"%"<<endl;
401  cout<<Form("20: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(19.9)))<<"%"<<endl;
402  cout<<Form("30: %.1f",histo[1][var][sam]->Integral(histo[1][var][sam]->FindBin(0),histo[1][var][sam]->FindBin(29.9)))<<"%"<<endl<<endl;
403 
404  }
405 
406 
407  leghisto = Samples[isam].label;//+" [#mu = ";
408  //int digits(1);
409  // leghisto += RoundNumber(histo[1][var][sam]->GetMean(),digits) + "]";
410 
411  //get number of events for region
412  if(vars[var].cuts.Contains("mj>500&&met>200"))leghisto+= +" [N_{tks} = " + RoundNumber(nentries[sam],0) + ", from N_{events} = "+RoundNumber(nevents2[sam],0)+"]";
413  else if(vars[var].cuts.Contains("mj>300&&met>400"))leghisto+= +" [N_{tks} = " + RoundNumber(nentries[sam],0) + ", from N_{events} = "+RoundNumber(nevents3[sam],0)+"]";
414  else leghisto+= +" [N_{tks} = " + RoundNumber(nentries[sam],0) + ", from N_{events} = "+RoundNumber(nevents1[sam],0)+"]";
415  leg.AddEntry(histo[1][var][sam], leghisto);
416  } // Loop over samples
417  leg.Draw();
418  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*1.1);
419  histo[1][var][0]->SetMaximum(maxhisto*1.1);
420  histo[1][var][0]->Draw("axis same");
421  can.SetLogy(0);
422  pname = "plots/1d6_tau/shapes_"+vars[var].tag+".pdf";
423  can.SaveAs(pname);
424  histo[1][var][0]->SetMaximum(maxhisto*maxLog);
425  can.SetLogy(1);
426  pname = "plots/1d6_tau/log_shapes_"+vars[var].tag+".pdf";
427  //can.SaveAs(pname);
428  }// Loop over variables
429 
430  for(unsigned his(0); his < 2; his++){
431  for(unsigned var(0); var<vars.size(); var++){
432  //if(vars[var].title.Contains("muon") || vars[var].title.Contains("hadronic")) continue;
433  for(unsigned sam(0); sam < vars[var].samples.size(); sam++)
434  if(histo[his][var][sam]) histo[his][var][sam]->Delete();
435  }
436  }
437 }
438 
void setDefaultStyle()
Definition: styles.cpp:36
STL namespace.
TString luminosity
int main()
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
tuple file
Definition: parse_card.py:238