ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_cuts.cxx
Go to the documentation of this file.
1 // plot_cuts: Macro that plots significance and other S,B quantities
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 "RooStats/NumberCountingUtils.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 minjets("7"), midjets("9");
22  TString mjthresh("400");
23  TString luminosity="10";
24  TString plot_type=".pdf";
25  TString plot_style="RA4";
26 }
27 
28 using namespace std;
29 using std::cout;
30 using std::endl;
31 
32 int main(){
33  styles style(plot_style); style.setDefaultStyle();
34  vector<hfeats> vars;
35  TCanvas can;
36 
37  TString folder="/cms5r0/ald77/archive/"+ntuple_date+"/skim100/";
38  folder="/afs/cern.ch/user/m/manuelf/work/ucsb/2015_05_25/skim/";
39  vector<TString> s_tt;
40  s_tt.push_back(folder+"*_TTJet*");
41  vector<TString> s_wjets;
42  s_wjets.push_back(folder+"*WJetsToLNu_HT*");
43  vector<TString> s_single;
44  s_single.push_back(folder+"*_T*channel*");
45  vector<TString> s_ttv;
46  s_ttv.push_back(folder+"*TTW*");
47  s_ttv.push_back(folder+"*TTZ*");
48  vector<TString> s_other;
49  s_other.push_back(folder+"*QCD_HT*");
50  s_other.push_back(folder+"*_ZJet*");
51  s_other.push_back(folder+"*DY*");
52  s_other.push_back(folder+"*WH_HToBB*");
53  vector<TString> s_t1t;
54  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
55  vector<TString> s_t1tc;
56  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
57 
58  // Reading ntuples
59  vector<TChain *> chain;
60  vector<sfeats> Samples;
61  Samples.push_back(sfeats(s_other, "Other", 1001));
62  Samples.push_back(sfeats(s_ttv, "ttV", 1002));
63  Samples.push_back(sfeats(s_single, "Single top", 1005));
64  Samples.push_back(sfeats(s_wjets, "W + jets", 1004));
65  Samples.push_back(sfeats(s_tt, "t#bar{t}, 2 l", 1006,1,"ntruleps>=2"));
66  Samples.push_back(sfeats(s_tt, "t#bar{t}, 1 l", 1000,1,"ntruleps<=1"));
67  Samples.push_back(sfeats(s_t1t, "T1tttt(1500,100)", 2));
68  Samples.push_back(sfeats(s_t1tc, "T1tttt(1200,800)", 4));
69 
70  for(unsigned sam(0); sam < Samples.size(); sam++){
71  chain.push_back(new TChain("tree"));
72  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
73  chain[sam]->Add(Samples[sam].file[insam]);
74  }
75 
76  vector<int> ra4_sam;
77  ra4_sam.push_back(0);
78  ra4_sam.push_back(1);
79  ra4_sam.push_back(2);
80  ra4_sam.push_back(3);
81  ra4_sam.push_back(4);
82  ra4_sam.push_back(5);
83  ra4_sam.push_back(6);
84  ra4_sam.push_back(7);
85 
86  const int scanbins(100);
87  // vars.push_back(hfeats("met",scanbins,100,1200, ra4_sam, "Cut on MET (GeV)",
88  // "ht>500&&nbm>=2&&njets>="+minjets+"&&mt>140&&(nmus+nels)==1",200));
89  // vars.push_back(hfeats("njets",18,-0.5,17.5, ra4_sam, "Cut on n_{jets}",
90  // "ht>500&&met>200&&nbm>=2&&mt>140&&(nmus+nels)==1",minjets.Atof()));
91  // vars.push_back(hfeats("nbm",7,-0.5,6.5, ra4_sam, "Cut on n_{b}",
92  // "ht>500&&met>200&&njets>="+minjets+"&&mt>140&&(nmus+nels)==1",2));
93 
94 
95  // vars.push_back(hfeats("mt",scanbins,0,600, ra4_sam, "Cut on m_{T} (GeV)",
96  // "ht>500&&met>400&&nbm>=2&&njets>=6&&(nmus+nels)==1",140));
97  // vars.push_back(hfeats("mj",scanbins,0,1600, ra4_sam, "Cut on M_{J} (GeV)",
98  // "ht>500&&met>400&&nbm>=2&&njets>=6&&mt>140&&(nmus+nels)==1",600));
99 
100 
101  vars.push_back(hfeats("mj",scanbins,0,1600, ra4_sam, "Cut on M_{J} (GeV)",
102  "ht>500&&met>200&&nbm>=2&&njets>=7&&mt>140&&(nmus+nels)==1"));
103  vars.push_back(hfeats("ht",scanbins,500,3000, ra4_sam, "Cut on H_{T} (GeV)",
104  "ht>500&&met>200&&nbm>=2&&njets>=7&&mt>140&&(nmus+nels)==1"));
105 
106 
107  TString plot_tag("_lumi"+luminosity+plot_type);
108  double Syserr(pow(0.3,2));
109  double legX = 0.66, legY = 0.9, legSingle = 0.061;
110  double legW = 0.12, legH = legSingle*3;
111  TLegend leg(legX, legY-legH, legX+legW, legY);
112  leg.SetTextSize(0.052); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
113  leg.SetTextFont(132);
114 
115  TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
116  const unsigned Nhis(4);
117  vector< vector<TH1D*> > histo[Nhis];
118  vector<TH1D*> varhisto;
119  vector<float> nentries;
120  TString hname, pname, variable, leghisto, totCut, title;
121  for(unsigned var(0); var<vars.size(); var++){
122  cout<<endl;
123  // Generating vector of histograms
124  title = vars[var].cuts; if(title=="1") title = "";
125  title.ReplaceAll("nvmus==1&&nmus==1&&nvels==0","1 #mu");
126  title.ReplaceAll("nvmus10==0&&nvels10==0", "0 leptons");
127  title.ReplaceAll("(nmus+nels)", "n_{lep}"); title.ReplaceAll("njets30","n_{jets}^{30}");
128  title.ReplaceAll("els_pt","p^{e}_{T}");title.ReplaceAll("mus_pt","p^{#mu}_{T}");
129  title.ReplaceAll("mus_reliso","RelIso"); title.ReplaceAll("els_reliso","RelIso");
130  title.ReplaceAll("mus_miniso_tr15","MiniIso"); title.ReplaceAll("els_miniso_tr15","MiniIso");
131  title.ReplaceAll("njets","n_{jets}");title.ReplaceAll("abs(lep_id)==13&&","");
132  title.ReplaceAll(">=", " #geq "); title.ReplaceAll(">", " > "); title.ReplaceAll("&&", ", ");
133  title.ReplaceAll("met", "MET"); title.ReplaceAll("ht", "H_{T}"); title.ReplaceAll("mt", "m_{T}");
134  title.ReplaceAll("nleps==1", "1 lepton"); title.ReplaceAll("nbm","n_{b}"); title.ReplaceAll("==", " = ");
135  title.ReplaceAll("nbl[1]","n_{b,l}");
136  for(unsigned his(0); his < Nhis; his++){
137  varhisto.resize(0);
138  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
139  int isam = vars[var].samples[sam];
140  hname = "histo"; hname += var; hname += his; hname += sam;
141  varhisto.push_back(new TH1D(hname, title, vars[var].nbins, vars[var].minx, vars[var].maxx));
142  varhisto[sam]->SetXTitle(vars[var].title);
143  varhisto[sam]->SetLineColor(Samples[isam].color);
144  varhisto[sam]->SetLineStyle(Samples[isam].style);
145  varhisto[sam]->SetLineWidth(3);
146  }
147  histo[his].push_back(varhisto);
148  }
149 
151  leg.Clear();
152  nentries.resize(0);
153  variable = vars[var].varname;
154  int bkgind(-1);
155  for(unsigned sam(0); sam < vars[var].samples.size(); sam++){
156  int isam = vars[var].samples[sam];
157  bool isSig = Samples[isam].isSig;
158  totCut = Samples[isam].factor+"*"+luminosity+"*weight*("+vars[var].cuts+"&&"+Samples[isam].cut+")";
159  //cout<<totCut<<endl;
160  histo[0][var][sam]->Sumw2();
161  chain[isam]->Project(histo[0][var][sam]->GetName(), variable, totCut);
162  histo[0][var][sam]->SetBinContent(vars[var].nbins,
163  histo[0][var][sam]->GetBinContent(vars[var].nbins)+
164  histo[0][var][sam]->GetBinContent(vars[var].nbins+1));
165  histo[0][var][sam]->SetBinError(vars[var].nbins,
166  sqrt(pow(histo[0][var][sam]->GetBinError(vars[var].nbins),2)+
167  pow(histo[0][var][sam]->GetBinError(vars[var].nbins+1),2)));
168  nentries.push_back(histo[0][var][sam]->Integral(1,vars[var].nbins));
169  histo[0][var][sam]->SetYTitle("Z_{bi} (#sigma)");
170  histo[1][var][sam]->SetYTitle("S/#sqrt{B} (#sigma)");
171  histo[2][var][sam]->SetYTitle("Events");
172  histo[2][var][sam]->SetLineColor(1);
173  if(!isSig){ // Adding previous bkg histos
174  for(int bsam(sam-1); bsam >= 0; bsam--){
175  histo[0][var][sam]->Add(histo[0][var][bsam]);
176  break;
177  }
178  bkgind = sam;
179  }
180  } // First loop over samples
181 
182  for(int sam(vars[var].samples.size()-1); sam >= 0; sam--){
183  int isam = vars[var].samples[sam];
184  if(!(Samples[isam].isSig)) continue;
185 
186  double maxhisto[Nhis];
187  for(unsigned his(0); his<Nhis; his++) maxhisto[his] = -1;
188  for(int bin(1); bin<=vars[var].nbins; bin++){
189  double Nerr(0);
190  const double Nsig(histo[0][var][sam]->Integral(bin,vars[var].nbins+1));
191  const double Nbkg(histo[0][var][bkgind]->IntegralAndError(bin,vars[var].nbins+1,Nerr));
192  histo[2][var][sam]->SetBinContent(bin,Nbkg);
193  histo[3][var][sam]->SetBinContent(bin,Nsig);
194  if(Nbkg==0){
195  histo[0][var][sam]->SetBinContent(bin,0);
196  histo[1][var][sam]->SetBinContent(bin,0);
197  } else {
198  const double Zbi(RooStats::NumberCountingUtils::BinomialExpZ(Nsig, Nbkg, sqrt(pow(Nerr/Nbkg,2)+Syserr)));
199  histo[0][var][sam]->SetBinContent(bin,Zbi>0?Zbi:0);
200  histo[1][var][sam]->SetBinContent(bin,Nsig/sqrt(Nbkg));
201  }
202  for(unsigned his(0); his<Nhis; his++)
203  if(maxhisto[his] < histo[his][var][sam]->GetBinContent(bin))
204  maxhisto[his] = histo[his][var][sam]->GetBinContent(bin);
205  }
206  } // Loop over samples
207 
208  unsigned sam_nc(vars[var].samples.size()-2);
209  unsigned isam_nc = vars[var].samples[sam_nc];
210  unsigned sam_c(vars[var].samples.size()-1);
211  unsigned isam_c = vars[var].samples[sam_c];
212 
213  float maxleg = 1.35;
214  leg.Clear();
215  legH = legSingle*3;
216  leg.SetY1NDC(legY-legH);
217  leg.SetHeader("#font[22]{ L = "+luminosity+" fb^{-1}}");
218  leg.AddEntry(histo[0][var][sam_nc], Samples[isam_nc].label);
219  leg.AddEntry(histo[0][var][sam_c], Samples[isam_c].label);
220  float hismax = max(histo[0][var][sam_nc]->GetMaximum(), histo[0][var][sam_c]->GetMaximum())*maxleg;
221  histo[0][var][sam_nc]->SetMaximum(hismax);
222  histo[0][var][sam_nc]->SetMaximum(3.7);
223  histo[0][var][sam_nc]->SetMinimum(0);
224  histo[0][var][sam_nc]->Draw("l hist");
225  histo[0][var][sam_c]->Draw("l hist same");
226  style.moveYAxisLabel(histo[0][var][sam_nc], hismax, false);
227  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, hismax);
228  leg.Draw();
229  pname = "plots/zbi_"+vars[var].tag+plot_tag;
230  can.SaveAs(pname);
231  histo[1][var][sam_nc]->SetMaximum(max(histo[1][var][sam_nc]->GetMaximum(),
232  histo[1][var][sam_c]->GetMaximum())*maxleg);
233  histo[1][var][sam_nc]->SetMinimum(0);
234  histo[1][var][sam_nc]->Draw("l hist");
235  histo[1][var][sam_c]->Draw("l hist same");
236  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, histo[1][var][sam_nc]->GetMaximum()*1.05);
237  pname = "plots/s_sqrtb_"+vars[var].tag+plot_tag;
238  leg.Draw();
239  can.SaveAs(pname);
240  hismax = max(histo[3][var][sam_nc]->GetMaximum(), histo[3][var][sam_c]->GetMaximum())*maxleg;
241  histo[2][var][sam_nc]->SetMaximum(hismax);
242  histo[2][var][sam_nc]->Draw("l hist");
243  histo[3][var][sam_c]->Draw("l hist same");
244  histo[3][var][sam_nc]->Draw("l hist same");
245  if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, hismax);
246  style.moveYAxisLabel(histo[0][var][sam_nc], hismax, false);
247  leg.AddEntry(histo[2][var][sam_nc], "Total bkg.");
248  legH = legSingle*4;
249  leg.SetY1NDC(legY-legH);
250  leg.Draw();
251  pname = "plots/sb_"+vars[var].tag+plot_tag;
252  can.SaveAs(pname);
253 
254  }// Loop over variables
255 
256  for(unsigned his(0); his < Nhis; his++){
257  for(unsigned var(0); var<vars.size(); var++){
258  for(unsigned sam(0); sam < vars[var].samples.size(); sam++)
259  if(histo[his][var][sam]) histo[his][var][sam]->Delete();
260  }
261  }
262 }
263 
TString ntuple_date("2015_05_25")
void setDefaultStyle()
Definition: styles.cpp:36
STL namespace.
void moveYAxisLabel(TH1 *h, float maxi, bool isLog=false)
Definition: styles.cpp:96
tuple file
Definition: parse_card.py:238
int main()
Definition: plot_cuts.cxx:32