ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
plot_rpv.cxx
Go to the documentation of this file.
1 // plot_note: Macro that plots variables both lumi weighted and normalized to the same area.
2 
3 #include <iostream>
4 #include <vector>
5 #include "TChain.h"
6 #include "TH1D.h"
7 #include "TCanvas.h"
8 #include "TLegend.h"
9 #include "TLine.h"
10 #include "TString.h"
11 #include "TColor.h"
12 
13 #include "styles.hpp"
14 #include "utilities.hpp"
15 #include "utilities_macros.hpp"
16 #include "utilities_macros_rpv.hpp"
17 
18 namespace {
19  TString plot_type=".pdf";
20  TString plot_style="CMSPaper_Preliminary";
21 }
22 
23 using namespace std;
24 using std::cout;
25 using std::endl;
26 
27 
28 int main(int argc, char *argv[]){
29  // don't want to include RA4 trigger efficiency
30  std::string extraWeight("w_pu_rpv/eff_trig");
31  // std::string extraWeight("(w_btag_loose*sys_bctag_loose[0]/w_btag)*w_pu_rpv/eff_trig");
32  // std::string extraWeight("(w_btag_loose*sys_udsgtag_loose[1]/w_btag)*w_pu_rpv/eff_trig");
33  bool showData=true;
34  bool nminus1=false;
35  TString outDir("rpv_base");
36  if(argc==2) {
37  TString nMinus1String("nminus1");
38  if(argv[1]!=nMinus1String) {
39  cout << "Only valid option is 'nminus1'. If no options are specified, the default plots are generated" << endl;
40  return 1;
41  }
42  else {
43  nminus1=true;
44  showData=false; // don't show data in signal region
45  outDir="nminus1";
46  }
47  }
48 
49  // TString folder_links="/homes/cawest/links/";
50 
51  vector<TString> s_rpv;
52  s_rpv.push_back("/homes/cawest/babymaker/CMSSW_7_4_14/src/babymaker/RPV_M1000.root");
53  vector<TString> s_rpv_M1100;
54  s_rpv_M1100.push_back("/homes/cawest/babymaker/CMSSW_7_4_14/src/babymaker/RPV_M1100.root");
55  vector<TString> s_rpv_NLO;
56  s_rpv_NLO.push_back("/homes/cawest/CMSSW_7_4_14/src/babymaker/RPV_M1000_NLO.root");
57 
58  vector<TString> s_tt_had;
59  // this dataset is skimmed to remove the leptonic component
60  s_tt_had.push_back("/net/cms2/cms2r0/jaehyeokyoo/babies/skim_ht1200/*TTJets_TuneCUETP8M1_13TeV-madgraphMLM*");
61  vector<TString> s_tt;
62  // s_tt.push_back(filestring("TT_TuneCUETP8M1_13TeV-powheg-pythia8"));
63  s_tt.push_back(filestring("TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
64  s_tt.push_back(filestring("TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
65  s_tt.push_back(filestring("TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
66  s_tt.push_back(filestring("TTJets_SingleLeptFromT_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
67  s_tt.push_back(filestring("TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
68  s_tt.push_back(filestring("TTJets_SingleLeptFromTbar_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
69  vector<TString> s_wjets;
70  s_wjets.push_back(filestring("WJetsToLNu_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
71  vector<TString> s_singlet;
72  s_singlet.push_back(filestring("ST_s-channel_4f_leptonDecays_13TeV-amcatnlo-pythia8_TuneCUETP8M1"));
73  s_singlet.push_back(filestring("ST_t-channel_antitop_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
74  s_singlet.push_back(filestring("ST_t-channel_top_4f_leptonDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
75  s_singlet.push_back(filestring("ST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
76  s_singlet.push_back(filestring("ST_tW_top_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1"));
77  vector<TString> s_qcd;
78  s_qcd.push_back(filestring("QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
79  s_qcd.push_back(filestring("QCD_HT1000to1500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
80  s_qcd.push_back(filestring("QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
81  s_qcd.push_back(filestring("QCD_HT1500to2000_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
82  s_qcd.push_back(filestring("QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
83  s_qcd.push_back(filestring("QCD_HT2000toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8_ext1"));
84  vector<TString> s_other;
85  s_other.push_back(filestring("DYJetsToLL_M-50_HT-600toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
86  s_other.push_back(filestring("TTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8"));
87  s_other.push_back(filestring("TTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8"));
88  s_other.push_back(filestring("TTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
89  s_other.push_back(filestring("TTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
90  s_other.push_back(filestring("ttHJetTobb_M125_13TeV_amcatnloFXFX_madspin_pythia8"));
91  s_other.push_back(filestring("TTTT_TuneCUETP8M1_13TeV-amcatnlo-pythia8"));
92  vector<TString> s_w_had;
93  s_w_had.push_back(filestring("WJetsToQQ_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8"));
94  vector<TString> s_z_had;
95  s_z_had.push_back(filestring("ZJetsToQQ_HT600toInf_13TeV-madgraph"));
96  vector<TString> s_jetht;
97  s_jetht.push_back(filestring("JetHT_Run2015C_25ns-05Oct2015-v1"));
98  s_jetht.push_back(filestring("JetHT_Run2015D-05Oct2015-v1"));
99  s_jetht.push_back(filestring("JetHT_Run2015D-PromptReco-v4"));
100 
101  // Reading ntuples
102  vector<sfeats> Samples;
103  if(showData) {
104  Samples.push_back(sfeats(s_jetht, "Data",kBlack,1,"trig[12] && pass && (njets<10 || (nmus+nels)==0)"));
105  Samples.back().isData = true;
106  Samples.back().doStack = false;
107  }
108  Samples.push_back(sfeats(s_rpv, "#tilde{g}(1.0 TeV)#rightarrow tbs", ra4::c_t1tttt));
109  Samples.back().doStack = false;
110  Samples.back().isSig = true;
111  Samples.push_back(sfeats(s_rpv_M1100, "#tilde{g}(1.1 TeV)#rightarrow tbs", ra4::c_t1tttt, 2));
112  Samples.back().doStack = false;
113  Samples.back().isSig = true;
114  Samples.push_back(sfeats(s_qcd, "QCD", kYellow, 1, cutandweight("1",extraWeight)));
115  Samples.push_back(sfeats(s_w_had, "W+jets, 0 l", ra4::c_wjets, 1, cutandweight("1",extraWeight)));
116  Samples.push_back(sfeats(s_z_had, "Z+jets, 0 l", kBlack, 1, cutandweight("1",extraWeight)));
117  Samples.push_back(sfeats(s_tt, "t#bar{t}, 1 l", ra4::c_tt_1l, 1, cutandweight("ntruleps==1", extraWeight)));
118  Samples.push_back(sfeats(s_tt, "t#bar{t}, 2 l", ra4::c_tt_2l, 1, cutandweight("ntruleps>=2", extraWeight)));
119  Samples.push_back(sfeats(s_tt_had, "t#bar{t}, 0 l", kTeal, 1, cutandweight("ntruleps==0", extraWeight)));
120  Samples.push_back(sfeats(s_wjets, "W+jets, 1 l", ra4::c_wjets, 1, cutandweight("1",extraWeight)));
121  Samples.push_back(sfeats(s_singlet, "Single t", ra4::c_singlet, 1, cutandweight("1",extraWeight)));
122  Samples.push_back(sfeats(s_other, "Other", ra4::c_other, 1, cutandweight("1",extraWeight)));
123 
124 
125  // Adding non-skimmed samples
126  vector<int> rpv_sam;
127  unsigned nsam(Samples.size());
128  for(unsigned sam(0); sam < nsam; sam++){
129  rpv_sam.push_back(sam);
130  vector<TString> sam_files = Samples[sam].file;
131  Samples.push_back(sfeats(sam_files, Samples[sam].label, Samples[sam].color, Samples[sam].style,
132  Samples[sam].cut));
133  } // Loop over samples
134 
135  vector<hfeats> vars;
136 
137  TString cuts("(nmus+nels)==1");
138 
139  std::vector<TString> basecut = {"(nmus+nels)==0", "(nmus+nels)==1"};
140  std::vector<TString> mjcuts = {"mj<=300", "mj>300&&mj<=500", "mj>500&&mj<=800", "mj>800"};
141  std::vector<TString> njetcuts = {"njets>=4&&njets<=5", "njets>=6&&njets<=7", "njets>=8&&njets<=9", "njets>=10"};
142  TString htcut("ht>1500");
143  if(!nminus1) {
144  for(auto ibasecut : basecut) {
145  for(auto imjcut : mjcuts) {
146  for(auto ijetcut : njetcuts) {
147  // skip blinded regions
148  bool isBlind = (ibasecut.EqualTo("(nmus+nels)==0") && !ijetcut.EqualTo("njets>=4&&njets<=5") && !ijetcut.EqualTo("njets>=6&&njets<=7" )) ||
149  (ibasecut.EqualTo("(nmus+nels)==1") && !ijetcut.EqualTo("njets>=4&&njets<=5"));
150  // reenable all regions for low mj
151  if(imjcut.EqualTo("mj>300&&mj<=500" && !ibasecut.EqualTo("(nmus+nels)==1"))) isBlind=false;
152  if(ibasecut.EqualTo("(nmus+nels)==0") && (imjcut.EqualTo("mj<=300") || (imjcut.EqualTo("mj>300&&mj<=500")))) isBlind=false;
153  if(isBlind && showData) continue;
154  if(ibasecut=="(nmus+nels)==1") {
155  ijetcut.ReplaceAll("njets>=10","njets>=8");
156  htcut="ht>1200";
157  }
158  cuts = ibasecut + "&&" + htcut + "&&" + ijetcut + "&&" + imjcut;
159  // vars.push_back(hfeats("ht",40, 0, 4000, rpv_sam, "H_{T} (GeV)", cuts));
160  // vars.back().normalize = true;
161  // vars.push_back(hfeats("mj",25, 0, 2500, rpv_sam, "M_{J} (GeV)", cuts));
162  // vars.back().normalize = true;
163  // vars.push_back(hfeats("dr_bb",15, 0, 6, rpv_sam, "#DeltaR_{b#bar{b}}", cuts));
164  // vars.back().normalize = true;
165  vars.push_back(hfeats("nbm", 4, 1, 5, rpv_sam, "N_{b}", cuts));
166  vars.back().normalize = true;
167  // vars.push_back(hfeats("Sum$(jets_csv>0.605)", 4, 1, 5, rpv_sam, "N_{b,loose}", cuts));
168  // vars.back().normalize = true;
169  // vars.push_back(hfeats("njets",20, 0, 20, rpv_sam, "N_{jets}", cuts));
170  // vars.back().normalize = true;
171  // vars.push_back(hfeats("jets_pt[0]",30, 0, 1500, rpv_sam, "p_{T,1} (GeV)", cuts));
172  // vars.back().normalize = true;
173  // vars.push_back(hfeats("jets_pt[1]",30, 0, 1500, rpv_sam, "p_{T,2} (GeV)", cuts));
174  // vars.back().normalize = true;
175  // vars.push_back(hfeats("met",30, 0, 1500, rpv_sam, "MET (GeV)", cuts));
176  // vars.back().normalize = true;
177  }
178  }
179  }
180 
181  //Njets plots
182  htcut="ht>1500";
183  for(auto ibasecut : basecut) {
184  for(auto imjcut : mjcuts) {
185  TString ijetcut = "njets<=7"; //Blind safe
186  if(!showData) ijetcut = "njets>=0";
187  if(ibasecut=="(nmus+nels)==1") {
188  ijetcut.ReplaceAll("njets<=7","njets<=5");
189  htcut="ht>1200";
190  }
191  cuts = ibasecut + "&&" + htcut + "&&" + ijetcut + "&&" + imjcut;
192 
193  vars.push_back(hfeats("njets",20, 0, 20, rpv_sam, "N_{jets}", cuts));
194  vars.back().normalize = true; vars.back().whichPlots = "1";
195  }
196  }
197  //mj plots
198  htcut="ht>1500";
199  for(auto ibasecut : basecut) {
200  for(auto ijetcut : njetcuts) {
201  // skip blinded regions
202  bool isBlind = (ibasecut.EqualTo("(nmus+nels)==0") && !ijetcut.EqualTo("njets>=4&&njets<=5") && !ijetcut.EqualTo("njets>=6&&njets<=7" )) ||
203  (ibasecut.EqualTo("(nmus+nels)==1") && !ijetcut.EqualTo("njets>=4&&njets<=5"));
204  if(isBlind && showData) continue;
205  if(ibasecut=="(nmus+nels)==1") {
206  ijetcut.ReplaceAll("njets>=10","njets>=8");
207  htcut="ht>1200";
208  }
209  cuts = ibasecut + "&&" + htcut + "&&" + ijetcut;
210 
211  vars.push_back(hfeats("mj",25, 0, 2500, rpv_sam, "M_{J} (GeV)", cuts));
212  vars.back().normalize = true; vars.back().whichPlots = "1";
213  }
214  }
215 
216 
217 
218 
219  } // end if(!minus1)
220 
221  // make N-1 plots for signal regions
222  else {
223  std::vector<std::string> basecutsNm1 = {"(nmus+nels)==0", "(nmus+nels)==1"};
224  std::vector<std::string> htcutsNm1 = {"ht>1500", "ht>1200"};
225  std::vector<std::string> mjcutsNm1 = {"mj>800", "mj>500"};
226  std::vector<std::string> njetcutsNm1 = {"njets>=10", "njets>=8"};
227  std::vector<std::string> nbcutsNm1 = {"nbm>=3", "nbm>=3"};
228  for(unsigned int i=0; i<basecutsNm1.size(); i++) {
229  std::string cutsNm1=basecutsNm1[i]+"&&"+mjcutsNm1[i]+"&&"+njetcutsNm1[i]+"&&"+nbcutsNm1[i];
230  vars.push_back(hfeats("ht",40, 0, 4000, rpv_sam, "H_{T} (GeV)", cutsNm1));
231  cutsNm1=basecutsNm1[i]+"&&"+htcutsNm1[i]+"&&"+njetcutsNm1[i]+"&&"+nbcutsNm1[i];
232  vars.push_back(hfeats("mj",25, 0, 2500, rpv_sam, "M_{J} (GeV)", cutsNm1));
233  cutsNm1=basecutsNm1[i]+"&&"+htcutsNm1[i]+"&&"+mjcutsNm1[i]+"&&"+nbcutsNm1[i];
234  vars.push_back(hfeats("njets",20, 0, 20, rpv_sam, "N_{jets}", cutsNm1));
235  cutsNm1=basecutsNm1[i]+"&&"+htcutsNm1[i]+"&&"+mjcutsNm1[i]+"&&"+njetcutsNm1[i];
236  vars.push_back(hfeats("nbm",6, 0, 6, rpv_sam, "N_{b}", cutsNm1));
237  cutsNm1=basecutsNm1[i]+"&&"+htcutsNm1[i]+"&&"+mjcutsNm1[i]+"&&"+njetcutsNm1[i]+"&&"+nbcutsNm1[i];
238  vars.push_back(hfeats("jets_pt[0]",30, 0, 1500, rpv_sam, "p_{T,1} (GeV)", cutsNm1));
239  }
240  }
241 
242  plot_distributions(Samples, vars, rpv::luminosity, plot_type, plot_style, outDir, showData, true); // last argument determines whether or not a ratio is drawn, and whether or not to show cuts
243 
244 }
245 
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)
STL namespace.
std::string cutandweight(std::string cut, std::string weight)
TString luminosity
int main(int argc, char *argv[])
Definition: plot_rpv.cxx:28
TString filestring(TString dataset, bool isSkimmed=true)