ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
syst_gs.cxx
Go to the documentation of this file.
1 #include <iostream>
2 #include <string>
3 #include <vector>
4 
5 #include "TCanvas.h"
6 #include "TFile.h"
7 #include "TGraphErrors.h"
8 #include "TStyle.h"
9 
10 #include "small_tree_rpv.hpp"
11 #include "utilities.hpp"
12 #include "utilities_macros.hpp"
13 #include "utilities_macros_rpv.hpp"
14 
15 namespace{
16  const int nmjbins = 3;
17  const int nnjetbins = 4;
18  bool make1D=true;
19  TString plot_type=".pdf";
20  TString plot_style="RA4";
21  TString outDir="rpv_gs";
22 }
23 
24 using namespace std;
25 
26 vector<vector<double> > getYields(small_tree_rpv &tree, vector<vector<double> >& low_drbb, vector<vector<double> >& high_drbb_err, vector<vector<double> >& low_drbb_err, bool isData=false);
27 void printPlots(TGraphErrors *graph, TString title="", TString filename="syst_gs.pdf");
28 void printPlotsOverlay(TGraphErrors *graph1, TGraphErrors *graph2, TString title="", TString filename="syst_gs.pdf");
29 void print1D(vector<vector<double> > norm);
30 double addError(double error, double added_error);
31 double divideErrors(double x, double y, double dx, double dy);
32 
33 int main(){
34 
35  string folder = "/net/cms29/cms29r0/cawest/skims/ht1200/";
36 
37  small_tree_rpv data(folder+"*JetHT_Run2015C_25ns-05Oct2015-v1*");
38  data.Add(folder+"*JetHT_Run2015D-05Oct2015-v1*");
39  data.Add(folder+"*JetHT_Run2015D-PromptReco-v4*");
40 
41  small_tree_rpv qcd(folder+"*QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
42  qcd.Add(folder+"*QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
43  qcd.Add(folder+"*QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
44  qcd.Add(folder+"*QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
45  qcd.Add(folder+"*QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
46  qcd.Add(folder+"*QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
47 
48  small_tree_rpv other("/net/cms2/cms2r0/jaehyeokyoo/babies/skim_ht1200/*TTJets_TuneCUETP8M1_13TeV-madgraphMLM*"); //ntruleps==0&&ht>1200
49  other.Add(folder+"*TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
50  other.Add(folder+"*TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
51  other.Add(folder+"*TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
52  other.Add(folder+"*TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
53  other.Add(folder+"*TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
54  other.Add(folder+"*TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1*");
55  other.Add(folder+"*ST_s-channel_4f_leptonDecays_13TeV-amcatnlo-pythia8_TuneCUETP8M1*");
56  other.Add(folder+"*ST_t-channel_antitop_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1*");
57  other.Add(folder+"*ST_t-channel_top_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1*");
58  other.Add(folder+"*ST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1*");
59  other.Add(folder+"*ST_tW_top_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1*");
60  other.Add(folder+"*DYJetsToLL_M-50_HT-600toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
61  other.Add(folder+"*ttHJetTobb_M125_13TeV_amcatnloFXFX_madspin_pythia8*");
62  other.Add(folder+"*TTTT_TuneCUETP8M1_13TeV-amcatnlo-pythia8*");
63  other.Add(folder+"*TTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8*");
64  other.Add(folder+"*TTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8*");
65  other.Add(folder+"*TTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8*");
66  other.Add(folder+"*TTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8*");
67  other.Add(folder+"*WJetsToLNu_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
68  other.Add(folder+"*WJetsToQQ_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8*");
69  other.Add(folder+"*ZJetsToQQ_HT600toInf_13TeV-madgraph*");
70 
71 
72  cout<<"[syst_gs] Getting Yields..."<<endl;
73 
74  // yields[MJ][Njets]: MJ=0/1/2 --> MJ>500/500<MJ<800/MJ>800 and Njets=0/1/2/3 --> 4-5/6-7/8-9/>10 jets
75  vector<vector<double> > data_yields_ldrbb, data_yields_hdrbb_err, data_yields_ldrbb_err;
76  vector<vector<double> > qcd_yields_ldrbb, qcd_yields_hdrbb_err, qcd_yields_ldrbb_err;
77  vector<vector<double> > other_yields_ldrbb, other_yields_hdrbb_err, other_yields_ldrbb_err;
78 
79  vector<vector<double> > data_yields_hdrbb = getYields(data, data_yields_ldrbb, data_yields_hdrbb_err, data_yields_ldrbb_err, true);
80  vector<vector<double> > qcd_yields_hdrbb = getYields(qcd, qcd_yields_ldrbb, qcd_yields_hdrbb_err, qcd_yields_ldrbb_err);
81  vector<vector<double> > other_yields_hdrbb = getYields(other, other_yields_ldrbb, other_yields_hdrbb_err, other_yields_ldrbb_err);
82 
83  vector<vector<double> > norm_hdrbb(nmjbins, vector<double>(nnjetbins)); // normalization from high dr_bb region
84  vector<vector<double> > norm_hdrbb_err(nmjbins, vector<double>(nnjetbins)); // error on the normalization from high dr_bb region
85  vector<vector<double> > dmc_ldrbb(nmjbins, vector<double>(nnjetbins)); // data/mc for low dr_bb region
86  vector<vector<double> > dmc_ldrbb_err(nmjbins, vector<double>(nnjetbins)); // error on data/mc for low dr_bb region
87 
88  cout<<"[syst_gs] Finding Normalization..."<<endl;
89 
90  for(unsigned int i=0; i<data_yields_hdrbb.size(); i++){
91  for(unsigned int j=0; j<data_yields_hdrbb[i].size(); j++){
92 
93  // Subtract yields of other
94  data_yields_hdrbb[i][j] -= other_yields_hdrbb[i][j];
95 
96  // Uncertainty on subtraction of other
97  data_yields_hdrbb_err[i][j] = AddInQuadrature(data_yields_hdrbb_err[i][j], other_yields_hdrbb_err[i][j]);
98 
99  // Find normalization in high dr_bb region
100  norm_hdrbb[i][j] = data_yields_hdrbb[i][j]/qcd_yields_hdrbb[i][j];
101  // Uncertainty on normalization
102  norm_hdrbb_err[i][j] = divideErrors(data_yields_hdrbb[i][j], qcd_yields_hdrbb[i][j], data_yields_hdrbb_err[i][j], qcd_yields_hdrbb_err[i][j]);
103 
104  //Get data/mc in low dr_bb region
105  dmc_ldrbb[i][j] = data_yields_ldrbb[i][j]/((norm_hdrbb[i][j]*qcd_yields_ldrbb[i][j]) + other_yields_ldrbb[i][j]);
106  // Uncertainty on data/mc in low dr_bb region
107  dmc_ldrbb_err[i][j] = divideErrors(data_yields_ldrbb[i][j],
108  (norm_hdrbb[i][j]*qcd_yields_ldrbb[i][j]) + other_yields_ldrbb[i][j],
109  data_yields_ldrbb_err[i][j],
111  divideErrors(data_yields_hdrbb[i][j], qcd_yields_hdrbb[i][j]/qcd_yields_ldrbb[i][j], data_yields_hdrbb_err[i][j],
112  divideErrors(qcd_yields_hdrbb[i][j], qcd_yields_ldrbb[i][j], qcd_yields_hdrbb_err[i][j], qcd_yields_ldrbb_err[i][j])),
113  other_yields_ldrbb_err[i][j])
114  );
115  }
116  }
117 
118  cout<<"[syst_gs] Writing Files..."<<endl;
119 
120  vector<double> xbins = {0,1,2,3};
121  vector<double> xerr = {0,0,0,0};
122 
123  TGraphErrors *dmc_ldrbb_allmj = new TGraphErrors(dmc_ldrbb[0].size(), &(xbins[0]), &(dmc_ldrbb[0][0]), &(xerr[0]), &(dmc_ldrbb_err[0][0]));
124  dmc_ldrbb_allmj->SetName("dmc_ldrbb_allmj");
125  TGraphErrors *dmc_ldrbb_lowmj = new TGraphErrors(dmc_ldrbb[1].size(), &(xbins[0]), &(dmc_ldrbb[1][0]), &(xerr[0]), &(dmc_ldrbb_err[1][0]));
126  dmc_ldrbb_lowmj->SetName("dmc_ldrbb_lowmj");
127  TGraphErrors *dmc_ldrbb_highmj = new TGraphErrors(dmc_ldrbb[2].size(), &(xbins[0]), &(dmc_ldrbb[2][0]), &(xerr[0]), &(dmc_ldrbb_err[2][0]));
128  dmc_ldrbb_highmj->SetName("dmc_ldrbb_highmj");
129 
130  // Write out values
131  TFile *out = new TFile("syst_gs.root","recreate");
132  out->cd();
133  dmc_ldrbb_allmj->Write();
134  dmc_ldrbb_lowmj->Write();
135  dmc_ldrbb_highmj->Write();
136  out->Close();
137 
138  // Format Plots
139  printPlots(dmc_ldrbb_allmj, "M_{J}>500", "syst_gs/dmc_ldrbb_allmj.pdf");
140  printPlots(dmc_ldrbb_lowmj, "500 #leq M_{J} #leq 800", "syst_gs/dmc_ldrbb_lowmj.pdf");
141  printPlots(dmc_ldrbb_highmj, "M_{J}>800", "syst_gs/dmc_ldrbb_highmj.pdf");
142  printPlotsOverlay(dmc_ldrbb_highmj, dmc_ldrbb_lowmj, "", "syst_gs/dmc_ldrbb_overlaid.pdf");
143 
144  // print 1D Dists after the normalization in the high dr_bb region
145  if(make1D){
146  cout<<"[syst_gs] Making 1D Distributions... "<<endl;
147  print1D(norm_hdrbb);
148  }
149 }
150 
151 vector<vector<double> > getYields(small_tree_rpv &tree, vector<vector<double> >& low_drbb, vector<vector<double> >& high_drbb_err, vector<vector<double> >& low_drbb_err, bool isData){
152 
153  // yields[MJ][Njets]: MJ=0/1/2 --> MJ>500/500<MJ<800/MJ>800 and Njets=0/1/2/3 --> 4-5/6-7/8-9/>10 jets
154  vector<vector<double> > yields_hdrbb(nmjbins, vector<double>(nnjetbins)); //high dr_bb region
155  vector<vector<double> > yields_ldrbb(nmjbins, vector<double>(nnjetbins)); //low dr_bb region
156  vector<vector<double> > yields_hdrbb_err(nmjbins, vector<double>(nnjetbins));
157  vector<vector<double> > yields_ldrbb_err(nmjbins, vector<double>(nnjetbins));
158 
159  double lumi = atof(rpv::luminosity);
160 
161  if(isData) lumi=1;
162 
163  for(int iEnt=0; iEnt<tree.GetEntries(); iEnt++){
164  tree.GetEntry(iEnt);
165 
166  // Pass filters and trigger for data
167  if(isData && (!tree.pass()||!tree.trig()[12])) continue;
168 
169  // Only two b-jets
170  if(tree.nbm()!=2) continue;
171 
172  // 0-lepton selection
173  if(tree.nleps()==0 && tree.ht()>1500 && tree.mj()>500){
174 
175  // 4-5 jets
176  if(tree.njets()>=4 && tree.njets()<=5){
177  for(unsigned int iDrbb=0; iDrbb<tree.dr_bb().size(); iDrbb++){
178  // High-dr_bb
179  if(tree.dr_bb()[iDrbb]>=2.4){
180  yields_hdrbb[0][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
181  yields_hdrbb_err[0][0] = addError(yields_hdrbb_err[0][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
182 
183  // Low-MJ
184  if(tree.mj()>500 && tree.mj()<=800){
185  yields_hdrbb[1][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
186  yields_hdrbb_err[1][0] = addError(yields_hdrbb_err[1][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
187  }
188  // High-MJ
189  else if(tree.mj()>800){
190  yields_hdrbb[2][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
191  yields_hdrbb_err[2][0] = addError(yields_hdrbb_err[2][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
192  }
193  }
194  // Low-dr_bb
195  else if(tree.dr_bb()[iDrbb]<=1.6){
196  yields_ldrbb[0][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
197  yields_ldrbb_err[0][0] = addError(yields_ldrbb_err[0][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
198 
199  // Low-MJ
200  if(tree.mj()>500 && tree.mj()<=800){
201  yields_ldrbb[1][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
202  yields_ldrbb_err[1][0] = addError(yields_ldrbb_err[1][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
203  }
204  // High-MJ
205  else if(tree.mj()>800){
206  yields_ldrbb[2][0] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
207  yields_ldrbb_err[2][0] = addError(yields_ldrbb_err[2][0], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
208  }
209  }
210  }
211  }
212 
213  // 6-7 jets
214  else if(tree.njets()>=6 && tree.njets()<=7){
215  for(unsigned int iDrbb=0; iDrbb<tree.dr_bb().size(); iDrbb++){
216  // High-dr_bb
217  if(tree.dr_bb()[iDrbb]>=2.4){
218  yields_hdrbb[0][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
219  yields_hdrbb_err[0][1] = addError(yields_hdrbb_err[0][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
220 
221  // Low-MJ
222  if(tree.mj()>500 && tree.mj()<=800){
223  yields_hdrbb[1][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
224  yields_hdrbb_err[1][1] = addError(yields_hdrbb_err[1][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
225  }
226  // High-MJ
227  else if(tree.mj()>800){
228  yields_hdrbb[2][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
229  yields_hdrbb_err[2][1] = addError(yields_hdrbb_err[2][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
230  }
231  }
232  // Low-dr_bb
233  else if(tree.dr_bb()[iDrbb]<=1.6){
234  yields_ldrbb[0][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
235  yields_ldrbb_err[0][1] = addError(yields_ldrbb_err[0][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
236 
237  // Low-MJ
238  if(tree.mj()>500 && tree.mj()<=800){
239  yields_ldrbb[1][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
240  yields_ldrbb_err[1][1] = addError(yields_ldrbb_err[1][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
241  }
242  // High-MJ
243  else if(tree.mj()>800){
244  yields_ldrbb[2][1] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
245  yields_ldrbb_err[2][1] = addError(yields_ldrbb_err[2][1], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
246  }
247  }
248  }
249 
250  }
251 
252  // 8-9 jets
253  else if(tree.njets()>=8 && tree.njets()<=9){
254  for(unsigned int iDrbb=0; iDrbb<tree.dr_bb().size(); iDrbb++){
255 
256  // High-dr_bb
257  if(tree.dr_bb()[iDrbb]>=2.4){
258  yields_hdrbb[0][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
259  yields_hdrbb_err[0][2] = addError(yields_hdrbb_err[0][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
260 
261  // Low-MJ
262  if(tree.mj()>500 && tree.mj()<=800){
263  yields_hdrbb[1][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
264  yields_hdrbb_err[1][2] = addError(yields_hdrbb_err[1][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
265  }
266  // High-MJ
267  else if(tree.mj()>800){
268  yields_hdrbb[2][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
269  yields_hdrbb_err[2][2] = addError(yields_hdrbb_err[2][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
270  }
271  }
272  // Low-dr_bb
273  else if(tree.dr_bb()[iDrbb]<=1.6){
274  yields_ldrbb[0][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
275  yields_ldrbb_err[0][2] = addError(yields_ldrbb_err[0][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
276 
277  // Low-MJ
278  if(tree.mj()>500 && tree.mj()<=800){
279  yields_ldrbb[1][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
280  yields_ldrbb_err[1][2] = addError(yields_ldrbb_err[1][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
281  }
282  // High-MJ
283  else if(tree.mj()>800){
284  yields_ldrbb[2][2] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
285  yields_ldrbb_err[2][2] = addError(yields_ldrbb_err[2][2], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
286  }
287  }
288  }
289  }
290  else if(tree.njets()>=10){
291  for(unsigned int iDrbb=0; iDrbb<tree.dr_bb().size(); iDrbb++){
292 
293  // High-dr_bb
294  if(tree.dr_bb()[iDrbb]>=2.4){
295  yields_hdrbb[0][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
296  yields_hdrbb_err[0][3] = addError(yields_hdrbb_err[0][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
297 
298  // Low-MJ
299  if(tree.mj()>500 && tree.mj()<=800){
300  yields_hdrbb[1][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
301  yields_hdrbb_err[1][3] = addError(yields_hdrbb_err[1][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
302  }
303  //High-MJ
304  else if(tree.mj()>800){
305  yields_hdrbb[2][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
306  yields_hdrbb_err[2][3] = addError(yields_hdrbb_err[2][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
307  }
308  }
309  // Low-dr_bb
310  else if(tree.dr_bb()[iDrbb]<=1.6){
311  yields_ldrbb[0][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
312  yields_ldrbb_err[0][3] = addError(yields_ldrbb_err[0][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
313 
314  // Low-MJ
315  if(tree.mj()>500 && tree.mj()<=800){
316  yields_ldrbb[1][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
317  yields_ldrbb_err[1][3] = addError(yields_ldrbb_err[1][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
318  }
319  // High-MJ
320  else if(tree.mj()>800){
321  yields_ldrbb[2][3] += lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig());
322  yields_ldrbb_err[2][3] = addError(yields_ldrbb_err[2][3], lumi*(tree.weight()*tree.w_pu_rpv()/tree.eff_trig()));
323  }
324  }
325  }
326  }
327  }
328  }
329  low_drbb = yields_ldrbb;
330  high_drbb_err = yields_hdrbb_err;
331  low_drbb_err = yields_ldrbb_err;
332  return yields_hdrbb;
333 }
334 
335 void printPlotsOverlay(TGraphErrors *graph1, TGraphErrors *graph2, TString title, TString filename){
336 
337  gStyle->SetOptStat(0);
338 
339  // Format plot
340  graph1->SetMarkerStyle(20);
341  graph2->SetMarkerStyle(20);
342 
343  TCanvas c1;
344  c1.SetGridy(1);
345 
346  // Setup TH1F to provide axis labels
347  double x[nnjetbins];
348  for(int i=0; i<nnjetbins; i++)
349  x[i] = i;
350 
351  TH1F* h = new TH1F("h",title,nnjetbins,x[0]-0.5,x[nnjetbins-1]+0.5);
352  for(int i=0; i<nnjetbins; i++){
353  if(i==0) h->GetXaxis()->SetBinLabel(i+1,"4 #leq N_{jets} #leq5");
354  if(i==1) h->GetXaxis()->SetBinLabel(i+1,"6 #leq N_{jets} #leq7");
355  if(i==2) h->GetXaxis()->SetBinLabel(i+1,"8 #leq N_{jets} #leq9");
356  if(i==3) h->GetXaxis()->SetBinLabel(i+1,"N_{jets} #geq10");
357  }
358  h->GetYaxis()->SetTitle("Data/MC");
359  h->GetYaxis()->SetTitleSize(0.045);
360  h->SetMaximum(1.5);
361  h->SetLabelSize(0.06);
362  h->SetLabelSize(0.06,"Y");
363  h->Draw();
364 
365  graph1->SetLineColor(kRed);
366  graph1->SetMarkerColor(kRed);
367  graph1->Draw("P");
368  graph2->Draw("SAME P");
369 
370  c1.SaveAs("plots/"+filename);
371 
372  h->Delete();
373 }
374 void printPlots(TGraphErrors *graph, TString title, TString filename){
375 
376  gStyle->SetOptStat(0);
377 
378  // Format plot
379  graph->SetMarkerStyle(20);
380 
381  TCanvas c1;
382  c1.SetGridy(1);
383 
384  // Setup TH1F to provide axis labels
385  double x[nnjetbins];
386  for(int i=0; i<nnjetbins; i++)
387  x[i] = i;
388 
389  TH1F* h = new TH1F("h",title,nnjetbins,x[0]-0.5,x[nnjetbins-1]+0.5);
390  for(int i=0; i<nnjetbins; i++){
391  if(i==0) h->GetXaxis()->SetBinLabel(i+1,"4 #leq N_{jets} #leq5");
392  if(i==1) h->GetXaxis()->SetBinLabel(i+1,"6 #leq N_{jets} #leq7");
393  if(i==2) h->GetXaxis()->SetBinLabel(i+1,"8 #leq N_{jets} #leq9");
394  if(i==3) h->GetXaxis()->SetBinLabel(i+1,"N_{jets} #geq10");
395  }
396  h->GetYaxis()->SetTitle("Data/MC");
397  h->GetYaxis()->SetTitleSize(0.045);
398  h->SetMaximum(1.5);
399  h->SetLabelSize(0.06);
400  h->SetLabelSize(0.06,"Y");
401  h->Draw();
402 
403  graph->Draw("P");
404 
405  c1.SaveAs("plots/"+filename);
406 
407  h->Delete();
408 }
409 
410 void print1D(vector<vector<double> > norm){
411 
412  string extraWeight("w_pu_rpv/eff_trig");
413 
414  vector<TString> s_rpv_M1000;
415  s_rpv_M1000.push_back("/homes/cawest/babymaker/CMSSW_7_4_14/src/babymaker/RPV_M1000.root");
416  vector<TString> s_rpv_M1100;
417  s_rpv_M1100.push_back("/homes/cawest/babymaker/CMSSW_7_4_14/src/babymaker/RPV_M1100.root");
418  vector<TString> s_rpv_NLO;
419  s_rpv_NLO.push_back("/homes/cawest/CMSSW_7_4_14/src/babymaker/RPV_M1000_NLO.root");
420 
421  vector<TString> s_tt_had;
422  s_tt_had.push_back("/net/cms2/cms2r0/jaehyeokyoo/babies/skim_ht1200/*TTJets_TuneCUETP8M1_13TeV-madgraphMLM*");
423  vector<TString> s_tt;
424  s_tt.push_back(filestring("TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
425  s_tt.push_back(filestring("TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
426  s_tt.push_back(filestring("TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
427  s_tt.push_back(filestring("TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
428  s_tt.push_back(filestring("TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
429  s_tt.push_back(filestring("TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
430  vector<TString> s_wjets;
431  s_wjets.push_back(filestring("WJetsToLNu_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
432  vector<TString> s_singlet;
433  s_singlet.push_back(filestring("ST_s-channel_4f_leptonDecays_13TeV-amcatnlo-pythia8_TuneCUETP8M1"));
434  s_singlet.push_back(filestring("ST_t-channel_antitop_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
435  s_singlet.push_back(filestring("ST_t-channel_top_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
436  s_singlet.push_back(filestring("ST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
437  s_singlet.push_back(filestring("ST_tW_top_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
438  vector<TString> s_qcd;
439  s_qcd.push_back(filestring("QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
440  s_qcd.push_back(filestring("QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
441  s_qcd.push_back(filestring("QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
442  s_qcd.push_back(filestring("QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
443  s_qcd.push_back(filestring("QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
444  s_qcd.push_back(filestring("QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
445  vector<TString> s_other;
446  s_other.push_back(filestring("DYJetsToLL_M-50_HT-600toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
447  s_other.push_back(filestring("TTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8"));
448  s_other.push_back(filestring("TTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8"));
449  s_other.push_back(filestring("TTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
450  s_other.push_back(filestring("TTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
451  s_other.push_back(filestring("ttHJetTobb_M125_13TeV_amcatnloFXFX_madspin_pythia8"));
452  s_other.push_back(filestring("TTTT_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
453  vector<TString> s_w_had;
454  s_w_had.push_back(filestring("WJetsToQQ_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
455  vector<TString> s_z_had;
456  s_z_had.push_back(filestring("ZJetsToQQ_HT600toInf_13TeV-madgraph"));
457  vector<TString> s_jetht;
458  s_jetht.push_back(filestring("JetHT_Run2015C_25ns-05Oct2015-v1"));
459  s_jetht.push_back(filestring("JetHT_Run2015D-05Oct2015-v1"));
460  s_jetht.push_back(filestring("JetHT_Run2015D-PromptReco-v4"));
461 
462 
463  // Reading ntuples
464  vector<sfeats> Samples;
465  Samples.push_back(sfeats(s_jetht, "Data",kBlack,1,"trig[12] && pass && (njets<10 || (nmus+nels)==0)"));
466  Samples.back().isData = true;
467  Samples.back().doStack = false;
468 
469  Samples.push_back(sfeats(s_rpv_M1000, "#tilde{g}(1.0 TeV)#rightarrow tbs", ra4::c_t1tttt));
470  Samples.back().doStack = false;
471  Samples.back().isSig = true;
472  Samples.push_back(sfeats(s_rpv_M1100, "#tilde{g}(1.1 TeV)#rightarrow tbs", ra4::c_t1tttt, 2));
473  Samples.back().doStack = false;
474  Samples.back().isSig = true;
475 
476  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[0][0])+"*w_pu_rpv/eff_trig"))); // 0 leps, All MJ, 4-5 jets
477  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[0][1])+"*w_pu_rpv/eff_trig"))); // 0 leps. All MJ, 6-7 jets
478  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[0][2])+"*w_pu_rpv/eff_trig"))); // 0 leps, All MJ, 8-9 jets
479  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[0][3])+"*w_pu_rpv/eff_trig"))); // 0 leps, All MJ, 10+ jets
480  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[1][0])+"*w_pu_rpv/eff_trig"))); // 0 leps, Low MJ, 4-5 jets
481  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[1][1])+"*w_pu_rpv/eff_trig"))); // 0 leps. Low MJ, 6-7 jets
482  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[1][2])+"*w_pu_rpv/eff_trig"))); // 0 leps, Low MJ, 8-9 jets
483  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[1][3])+"*w_pu_rpv/eff_trig"))); // 0 leps, Low MJ, 10+ jets
484  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[2][0])+"*w_pu_rpv/eff_trig"))); // 0 leps, High MJ, 4-5 jets
485  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[2][1])+"*w_pu_rpv/eff_trig"))); // 0 leps. High MJ, 6-7 jets
486  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[2][2])+"*w_pu_rpv/eff_trig"))); // 0 leps, High MJ, 8-9 jets
487  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",to_string(norm[2][3])+"*w_pu_rpv/eff_trig"))); // 0 leps, High MJ, 10+ jets
488 
489  Samples.push_back(sfeats(s_w_had, "W+jets, 0 l", ra4::c_wjets, 1, cutandweight("1",extraWeight)));
490  Samples.push_back(sfeats(s_z_had, "Z+jets, 0 l", kBlack, 1, cutandweight("1",extraWeight)));
491  Samples.push_back(sfeats(s_tt, "t#bar{t}, 1 l", ra4::c_tt_1l, 1, cutandweight("ntruleps==1", extraWeight)));
492  Samples.push_back(sfeats(s_tt, "t#bar{t}, 2 l", ra4::c_tt_2l, 1, cutandweight("ntruleps>=2", extraWeight)));
493  Samples.push_back(sfeats(s_tt_had, "t#bar{t}, 0 l", kTeal, 1, cutandweight("ntruleps==0", extraWeight)));
494  Samples.push_back(sfeats(s_wjets, "W+jets, 1 l", ra4::c_wjets, 1, cutandweight("1",extraWeight)));
495  Samples.push_back(sfeats(s_singlet, "Single t", ra4::c_singlet, 1, cutandweight("1",extraWeight)));
496  Samples.push_back(sfeats(s_other, "Other", ra4::c_other, 1, cutandweight("1",extraWeight)));
497 
498  const int nBins=12;
499  vector<vector<int> >rpv_sam(nBins);
500  for(unsigned sam(0); sam < nBins; sam++){
501  rpv_sam[sam].push_back(0);
502  rpv_sam[sam].push_back(1);
503  rpv_sam[sam].push_back(2);
504 
505  rpv_sam[sam].push_back(3+sam); //Only push back for the correct QCD sample corresponding to the bin
506 
507  rpv_sam[sam].push_back(15); //Index should equal 3+nBins, i.e. first sample after QCD
508  rpv_sam[sam].push_back(16);
509  rpv_sam[sam].push_back(17);
510  rpv_sam[sam].push_back(18);
511  rpv_sam[sam].push_back(19);
512  rpv_sam[sam].push_back(20);
513  rpv_sam[sam].push_back(21);
514  rpv_sam[sam].push_back(22);
515  }
516 
517  vector<hfeats> vars;
518 
519  vector<TString> cuts;
520  cuts.push_back("nleps==0&&ht>1500&&mj>500&&njets>=4&&njets<=5&&nbm==2"); // 0 leps, All MJ, 4-5 jets
521  cuts.push_back("nleps==0&&ht>1500&&mj>500&&njets>=6&&njets<=7&&nbm==2"); // 0 leps, All MJ, 6-7 jets
522  cuts.push_back("nleps==0&&ht>1500&&mj>500&&njets>=8&&njets<=9&&nbm==2"); // 0 leps, All MJ, 8-9 jets
523  cuts.push_back("nleps==0&&ht>1500&&mj>500&&njets>=10&&nbm==2"); // 0 leps, All MJ, 10+ jets
524 
525  cuts.push_back("nleps==0&&ht>1500&&mj>500&&mj<=800&&njets>=4&&njets<=5&&nbm==2"); // 0 leps, Low MJ, 4-5 jets
526  cuts.push_back("nleps==0&&ht>1500&&mj>500&&mj<=800&&njets>=6&&njets<=7&&nbm==2"); // 0 leps, Low MJ, 6-7 jets
527  cuts.push_back("nleps==0&&ht>1500&&mj>500&&mj<=800&&njets>=8&&njets<=9&&nbm==2"); // 0 leps, Low MJ, 8-9 jets
528  cuts.push_back("nleps==0&&ht>1500&&mj>500&&mj<=800&&njets>=10&&nbm==2"); // 0 leps, Low MJ, 10+ jets
529 
530  cuts.push_back("nleps==0&&ht>1500&&mj>800&&njets>=4&&njets<=5&&nbm==2"); // 0 leps, High MJ, 4-5 jets
531  cuts.push_back("nleps==0&&ht>1500&&mj>800&&njets>=6&&njets<=7&&nbm==2"); // 0 leps, High MJ, 6-7 jets
532  cuts.push_back("nleps==0&&ht>1500&&mj>800&&njets>=8&&njets<=9&&nbm==2"); // 0 leps, High MJ, 8-9 jets
533  cuts.push_back("nleps==0&&ht>1500&&mj>800&&njets>=10&&nbm==2"); // 0 leps, High MJ, 10+ jets
534 
535 
536  for(int iBins=0; iBins<nBins; iBins++){
537  vars.push_back(hfeats("dr_bb",15, 0, 6, rpv_sam[iBins], "#DeltaR_{b#bar{b}}", cuts[iBins]));
538  vars.back().whichPlots="12";
539  }
540 
542 }
543 
544 double addError(double error, double added_error){
545  return sqrt(pow(error,2)+pow(added_error,2));
546 }
547 
548 double divideErrors(double x, double y, double dx, double dy){
549  if(x==0||y==0||dx==0||dy==0) cout<<"Dividing by 0 in divideErrors"<<endl;
550  return (x/y)*sqrt(pow(dx/x,2)+pow(dy/y,2));
551 }
void plot_distributions(std::vector< sfeats > Samples, std::vector< hfeats > vars, TString luminosity="10", TString filetype=".eps", TString namestyle="LargeLabels", TString dir="1d", bool doRatio=false, bool showcuts=false)
virtual std::vector< float > const & dr_bb() const
virtual std::vector< bool > const & trig() const
void printPlots(TGraphErrors *graph, TString title="", TString filename="syst_gs.pdf")
Definition: syst_gs.cxx:374
int const & nbm() const
Definition: small_tree.cpp:550
float const & weight() const
Definition: small_tree.cpp:506
STL namespace.
double divideErrors(double x, double y, double dx, double dy)
Definition: syst_gs.cxx:548
int main()
Definition: syst_gs.cxx:33
std::string cutandweight(std::string cut, std::string weight)
void printPlotsOverlay(TGraphErrors *graph1, TGraphErrors *graph2, TString title="", TString filename="syst_gs.pdf")
Definition: syst_gs.cxx:335
vector< vector< double > > getYields(small_tree_rpv &tree, vector< vector< double > > &low_drbb, vector< vector< double > > &high_drbb_err, vector< vector< double > > &low_drbb_err, bool isData=false)
Definition: syst_gs.cxx:151
TString luminosity
int const & nleps() const
Definition: small_tree.cpp:594
void print1D(vector< vector< double > > norm)
Definition: syst_gs.cxx:410
virtual float const & mj() const
int const & njets() const
Definition: small_tree.cpp:583
TString filestring(TString dataset, bool isSkimmed=true)
virtual bool const & pass() const
virtual void GetEntry(const long entry)
long GetEntries() const
Definition: small_tree.cpp:400
tuple data
Definition: parse_card.py:260
virtual float const & w_pu_rpv() const
int Add(const std::string &filename)
Definition: small_tree.cpp:381
double addError(double error, double added_error)
Definition: syst_gs.cxx:544
float const & ht() const
Definition: small_tree.cpp:451
virtual float const & eff_trig() const
long double AddInQuadrature(long double x, long double y)
Definition: utilities.cpp:212