ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
table_regions.cxx
Go to the documentation of this file.
1 // table_yields: Generates a LaTeX file with a cutflow table for RA4
2 
3 #include <fstream>
4 #include <iostream>
5 #include <cmath>
6 #include <string>
7 #include <sstream>
8 #include <unistd.h> // getopt in Macs
9 
10 #include "TChain.h"
11 #include "TFile.h"
12 #include "TString.h"
13 #include "TH1D.h"
14 #include "TMath.h"
15 #include "RooStats/NumberCountingUtils.h"
16 
17 #include "styles.hpp"
18 #include "utilities.hpp"
19 #include "utilities_macros.hpp"
20 
21 namespace {
22  TString ntuple_date("2015_10_19");
23  TString luminosity="3";
24  TString tag = "";
25  bool do_1b=false;
26  bool do_2l=false;
27  bool do_ttbaronly = false;
28  bool do_note=true;
29  bool do_zbi=true;
30  bool print_full(false);
31 
32  int method = 0; // Only methods 1 and 2 currently supported
33 
34  TString minjets("6");
35  TString highjets("9");
36  TString mjthresh("400");
37  TString highmet("400");
38  int do_nb_binning=1; // 0 = No Nb binning. 1 = Nb binning at low MET. 2 = Nb binning at all MET.
39 }
40 
41 using namespace std;
42 using std::cout;
43 using std::endl;
44 
45 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig);
46 
47 int main(int argc, char *argv[]){
48 
49  int c(0);
50  while((c=getopt(argc, argv, "m:oz:t:j:h:f:e:b:p:"))!=-1){
51  switch(c){
52  case 'm':
53  method=atoi(optarg);
54  break;
55  case 'o':
56  do_ttbaronly = true;
57  break;
58  case 'z':
59  if(0==atoi(optarg)) do_zbi=false;
60  if(1==atoi(optarg)) do_zbi=true;
61  break;
62  case 'j':
63  minjets = optarg;
64  break;
65  case 'h':
66  highjets = optarg;
67  break;
68  case 'f':
69  mjthresh = optarg;
70  break;
71  case 'e':
72  highmet = optarg;
73  break;
74  case 'b':
75  do_nb_binning = atoi(optarg);
76  break;
77  case 't':
78  tag = optarg;
79  break;
80  case 'p':
81  print_full = true;
82  break;
83  default:
84  break;
85  }
86  }
87 
88  // Reading ntuples
89  TString folder = "~manuelf/work/babies/"+ntuple_date+"/mc/skim_1lht500met200/";
90  folder = "archive/2015_10_19/mc/skim_1lht500met200/";
91 
92  vector<TString> s_tt;
93  s_tt.push_back(folder+"*_TTJets*Lept*");
94  s_tt.push_back(folder+"*_TTJets_HT*");
95  vector<TString> s_wjets;
96  s_wjets.push_back(folder+"*_WJetsToLNu*");
97  vector<TString> s_ttv;
98  s_ttv.push_back(folder+"*_TTWJets*");
99  s_ttv.push_back(folder+"*_TTZTo*");
100  vector<TString> s_single;
101  s_single.push_back(folder+"*_ST_*");
102  vector<TString> s_other;
103  s_other.push_back(folder+"*DYJetsToLL*");
104  s_other.push_back(folder+"*_QCD_HT*");
105  s_other.push_back(folder+"*_ZJet*");
106  s_other.push_back(folder+"*_WWTo*");
107  s_other.push_back(folder+"*ggZH_HToBB*");
108  s_other.push_back(folder+"*ttHJetTobb*");
109  vector<TString> s_t1t;
110  s_t1t.push_back(folder+"*T1tttt*1500_*");
111  vector<TString> s_t1tc;
112  s_t1tc.push_back(folder+"*T1tttt*1200_*");
113 
114  vector<TChain *> chain;
115  vector<sfeats> Samples;
116  if(!do_ttbaronly){
117  Samples.push_back(sfeats(s_other, "Other", 1001));
118  Samples.push_back(sfeats(s_ttv, "$t\\bar{t}V$", 1002));
119  Samples.push_back(sfeats(s_single, "Single $t$", 1005));
120  Samples.push_back(sfeats(s_wjets, "W+jets", 1004));
121  }
122  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ (1$\\ell$)", 1000,1,
123  "ntruleps<=1"));
124  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ ($2\\ell$)", 1006,1,
125  "ntruleps>=2"));
126  int nsig(2);
127  Samples.push_back(sfeats(s_t1t, "T1tttt NC", 2));
128  Samples.push_back(sfeats(s_t1tc, "T1tttt C", 2,2));
129 
130  for(unsigned sam(0); sam < Samples.size(); sam++){
131  chain.push_back(new TChain("tree"));
132  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
133  chain[sam]->Add(Samples[sam].file[insam]);
134  }
135 
136  if(method==1) { minjets = "7"; highjets="9"; mjthresh="600"; highmet="400"; do_nb_binning=0; }
137  if(method==2) { minjets ="7"; highjets="9"; mjthresh="400"; highmet="400"; do_nb_binning=1; }
138 
139 
140  TString midjets(""); midjets += (highjets.Atoi()-1);
141  TString minjets_2l(""), midjets_2l("");
142  minjets_2l += (minjets.Atoi()-1); midjets_2l += (midjets.Atoi()-1);
143  TString fom("$Z_{\\rm bi}$");
144  if(!do_zbi) fom = "S/B";
145  TString lumi_s(luminosity); lumi_s.ReplaceAll(".","p");
146  TString outname = "txt/yields_mj"+mjthresh+"_met"+highmet+"_njets"+minjets+highjets+"_lumi"+lumi_s+"_"+ntuple_date+tag+".tex";
147  if(do_1b) outname.ReplaceAll("yields","yields_1b");
148  if(do_2l) outname.ReplaceAll("yields","yields_2l");
149  if(do_zbi) outname.ReplaceAll("yields","yields_zbi");
150 
151  TString baseline("ht>500&&met>200");
152  TString cuts_1l(baseline+"&&(nmus+nels)==1&&nbm>=2&&njets>="+minjets+"");
153  TString cuts_1l1b(baseline+"&&(nmus+nels)==1&&nbm==1&&njets>="+minjets+"");
154  TString cuts_2l(baseline+"&&(nmus+nels)==2&&nbm==1&&njets>="+minjets_2l+"");
155  TString cuts_2lbb(baseline+"&&(nmus+nels)==2&&nbm==2&&njets>="+minjets_2l+"");
156  TString cuts_1ltex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq "+minjets+", n_b\\geq 2, n_{\\rm lep}=1$");
157  TString cuts_1l1btex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq "+minjets+", n_b=1, n_{\\rm lep}=1$");
158  TString cuts_2ltex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq "+minjets_2l+", n_b=1, n_{\\rm lep}=2$");
159  TString cuts_2lbbtex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq "+minjets_2l+", n_b=2, n_{\\rm lep}=2$");
160  if(do_1b) {
161  cuts_1l.ReplaceAll("nbm>=2","nbm==1");
162  cuts_1ltex.ReplaceAll("n_b\\geq 2", "n_b=1");
163  }
164  ifstream header("txt/header.tex");
165  ifstream footer("txt/footer.tex");
166  ofstream file(outname);
167  file<<header.rdbuf();
168  file<<"\\vspace{80 mm}\n";
169  file << "\n\\begin{tabular}[tbp!]{ l | ";
170  for(unsigned sam(0); sam < Samples.size()-nsig; sam++) file << "r";
171  file<<" | r ";
172  for(int sam(0); sam < nsig; sam++) file<<"| r | r";
173  file<<"}\\hline\\hline\n";
174  file << " \\multicolumn{1}{c|}{${\\cal L} = "<<luminosity<<"$ fb$^{-1}$} ";
175  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
176  file << " & "<<Samples[sam].label;
177  file<< " & SM bkg. ";
178  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
179  file << " & "<<Samples[sam].label<< " & "+fom;
180  file << "\\\\ \\hline \n ";
181 
182  TString mtcut, mjcut;
183  TString indent("\\hspace{5 mm} ");
184  if(do_note) indent = "";
185  vector<TString> binnames;
186  for(unsigned bin(1); bin <= 6; bin++)
187  if(do_note) binnames.push_back("");
188  else {
189  TString name("Bin "); name += bin; name += ": ";
190  binnames.push_back(name);
191  }
192  TString lownj("$n_j\\leq "+midjets+"$");
193  TString hignj("$n_j\\geq "+highjets+"$");
194  TString lownj_2l("$n_j\\leq "+midjets_2l+"$");
195  TString highjets_2l(""); highjets_2l += (midjets_2l.Atoi()+1);
196  TString hignj_2l("$n_j\\geq "+highjets_2l+"$");
197  TString lowmet("$\\text{MET}\\leq "+highmet+"$");
198  TString higmet("$\\text{MET}> "+highmet+"$");
199  TString letter("R");
200  if(do_1b) letter = "B";
201  if(do_2l) letter = "D";
202  TString regions[4];
203  for(int ind(0); ind<4; ind++) {regions[ind] = letter; regions[ind] += (ind+1);}
205  if(!do_2l){
206  file << " \\multicolumn{"<< Samples.size()+1<<"}{c}{"<< cuts_1ltex <<"} \\\\ \\hline \\hline\n";
207 
208  // R1 region
209  mjcut="mj<="+mjthresh; mtcut="mt<=140";
210  file << YieldsCut(regions[0]+": $m_T \\leq 140,M_J\\leq "+mjthresh+"$", mjcut+"&&"+mtcut+"&&"+cuts_1l, chain, Samples, nsig);
211  file <<"\\hline\n";
212  if(print_full){
213  if(do_nb_binning==0){
214  file << YieldsCut(indent+lownj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&"+cuts_1l, chain, Samples, nsig);
215  file << YieldsCut(indent+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
216  file << YieldsCut(indent+hignj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&" +cuts_1l, chain, Samples, nsig);
217  file << YieldsCut(indent+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
218  }
219  else if(do_nb_binning==1) {
220  file << YieldsCut(indent+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
221  file << YieldsCut(indent+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
222  file << YieldsCut(indent+higmet, mjcut+"&&"+mtcut+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
223  }
224  else if(do_nb_binning==2) {
225  file << YieldsCut(indent+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
226  file << YieldsCut(indent+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
227  file << YieldsCut(indent+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
228  file << YieldsCut(indent+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
229  }
230  file <<"\\hline\n";
231  } // if(print_full)
232 
233  // R2 region
234  mjcut="mj>"+mjthresh; mtcut="mt<=140";
235  file << YieldsCut(regions[1]+": $m_T \\leq 140,M_J> "+mjthresh+"$", mjcut+"&&"+mtcut+"&&"+cuts_1l, chain, Samples, nsig);
236  file <<"\\hline\n";
237 
238  if(print_full){
239  if(do_nb_binning==0){
240  file << YieldsCut(indent+lownj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&"+cuts_1l, chain, Samples, nsig);
241  file << YieldsCut(indent+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
242  file << YieldsCut(indent+hignj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&" +cuts_1l, chain, Samples, nsig);
243  file << YieldsCut(indent+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
244  }
245  else if(do_nb_binning==1) {
246  file << YieldsCut(indent+lownj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
247  file << YieldsCut(indent+lownj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
248  file << YieldsCut(indent+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
249  file << YieldsCut(indent+hignj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
250  file << YieldsCut(indent+hignj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
251  file << YieldsCut(indent+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
252  }
253  else if(do_nb_binning==2) {
254  file << YieldsCut(indent+lownj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
255  file << YieldsCut(indent+lownj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
256  file << YieldsCut(indent+lownj+", "+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
257  file << YieldsCut(indent+lownj+", "+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
258  file << YieldsCut(indent+hignj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
259  file << YieldsCut(indent+hignj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
260  file << YieldsCut(indent+hignj+", "+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
261  file << YieldsCut(indent+hignj+", "+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
262  }
263 
264  file <<"\\hline\n";
265  } // if(print_full)
266 
267  // R3 region
268  mjcut="mj<="+mjthresh; mtcut="mt>140";
269  file << YieldsCut(regions[2]+": $m_T > 140,M_J \\leq "+mjthresh+"$", mjcut+"&&"+mtcut+"&&"+cuts_1l, chain, Samples, nsig);
270  file <<"\\hline\n";
271 
272  if(do_nb_binning==0){
273  file << YieldsCut(indent+lownj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&"+cuts_1l, chain, Samples, nsig);
274  file << YieldsCut(indent+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
275  file << YieldsCut(indent+hignj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&" +cuts_1l, chain, Samples, nsig);
276  file << YieldsCut(indent+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
277  }
278  else if(do_nb_binning==1) {
279  file << YieldsCut(indent+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
280  file << YieldsCut(indent+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
281  file << YieldsCut(indent+higmet, mjcut+"&&"+mtcut+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
282  }
283  else if(do_nb_binning==2) {
284  file << YieldsCut(indent+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
285  file << YieldsCut(indent+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
286  file << YieldsCut(indent+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
287  file << YieldsCut(indent+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
288  }
289 
290  file <<"\\hline\n";
291  file <<"\\hline\n";
292 
293 
294  // R4 region
295  mjcut="mj>"+mjthresh; mtcut="mt>140";
296  file << YieldsCut(regions[3]+": $m_T > 140,M_J > "+mjthresh+"$", mjcut+"&&"+mtcut+"&&"+cuts_1l, chain, Samples, nsig);
297  file <<"\\hline\n";
298 
299  if(do_nb_binning==0){
300  file << YieldsCut(binnames[0]+lownj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&"+cuts_1l, chain, Samples, nsig);
301  file << YieldsCut(binnames[1]+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
302  file << YieldsCut(binnames[2]+hignj+", "+lowmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&" +cuts_1l, chain, Samples, nsig);
303  file << YieldsCut(binnames[3]+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
304  }
305  else if(do_nb_binning==1){
306  file << YieldsCut(binnames[0]+lownj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
307  file << YieldsCut(binnames[1]+lownj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
308  file << YieldsCut(binnames[2]+lownj+", "+higmet, mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
309  file << YieldsCut(binnames[3]+hignj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
310  file << YieldsCut(binnames[4]+hignj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
311  file << YieldsCut(binnames[5]+hignj+", "+higmet, mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&" +cuts_1l, chain, Samples, nsig);
312  }
313  else if(do_nb_binning==2){
314  file << YieldsCut(binnames[0]+lownj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm==2&&"+cuts_1l, chain, Samples, nsig);
315  file << YieldsCut(binnames[1]+lownj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met<="+highmet+"&&nbm>=3&&"+cuts_1l, chain, Samples, nsig);
316  file << YieldsCut(binnames[2]+lownj+", "+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
317  file << YieldsCut(binnames[2]+lownj+", "+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets<="+midjets+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
318  file << YieldsCut(binnames[3]+hignj+", "+lowmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
319  file << YieldsCut(binnames[4]+hignj+", "+lowmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met<="+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
320  file << YieldsCut(binnames[5]+hignj+", "+higmet+", $n_b=2$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&nbm==2&&" +cuts_1l, chain, Samples, nsig);
321  file << YieldsCut(binnames[5]+hignj+", "+higmet+", $n_b\\geq 3$", mjcut+"&&"+mtcut+"&&njets>"+midjets+"&&met>"+highmet+"&&nbm>=3&&" +cuts_1l, chain, Samples, nsig);
322 
323  }
324 
325  file <<"\\hline\n";
326 
327  } else {
328  file << "\\hline \\hline\\multicolumn{"<< Samples.size()+1<<"}{c}{"
329  <<cuts_2ltex <<"} \\\\ \\hline \\hline\n";
330 
331  mjcut="mj<="+mjthresh;
332  file << YieldsCut(regions[2]+": $M_J \\leq "+mjthresh+"$", "mj <= "+mjthresh+"&&"+cuts_2l, chain, Samples, nsig);
333  file <<"\\hline\n";
334  file << YieldsCut(indent+lownj_2l+", "+lowmet, mjcut+"&&njets<="+midjets_2l+"&&met<="+highmet+"&&"+cuts_2l, chain, Samples, nsig);
335  file << YieldsCut(indent+lownj_2l+", "+higmet, mjcut+"&&njets<="+midjets_2l+"&&met>"+highmet+"&&" +cuts_2l, chain, Samples, nsig);
336  file << YieldsCut(indent+hignj_2l+", "+lowmet, mjcut+"&&njets>"+midjets_2l+"&&met<="+highmet+"&&" +cuts_2l, chain, Samples, nsig);
337  file << YieldsCut(indent+hignj_2l+", "+higmet, mjcut+"&&njets>"+midjets_2l+"&&met>"+highmet+"&&" +cuts_2l, chain, Samples, nsig);
338  file <<"\\hline\n";
339 
340 
341  mjcut="mj>"+mjthresh;
342  file << YieldsCut(regions[3]+": $M_J > "+mjthresh+"$", "mj>"+mjthresh+"&&"+cuts_2l, chain, Samples, nsig);
343  file <<"\\hline\n";
344  file << YieldsCut(indent+lownj_2l+", "+lowmet, mjcut+"&&njets<="+midjets_2l+"&&met<="+highmet+"&&"+cuts_2l, chain, Samples, nsig);
345  file << YieldsCut(indent+lownj_2l+", "+higmet, mjcut+"&&njets<="+midjets_2l+"&&met>"+highmet+"&&" +cuts_2l, chain, Samples, nsig);
346  file << YieldsCut(indent+hignj_2l+", "+lowmet, mjcut+"&&njets>"+midjets_2l+"&&met<="+highmet+"&&" +cuts_2l, chain, Samples, nsig);
347  file << YieldsCut(indent+hignj_2l+", "+higmet, mjcut+"&&njets>"+midjets_2l+"&&met>"+highmet+"&&" +cuts_2l, chain, Samples, nsig);
348 
349  file << "\\hline \\hline\\multicolumn{"<< Samples.size()+1<<"}{c}{"
350  << cuts_2lbbtex<<"} \\\\ \\hline \\hline\n";
351 
352  mjcut="mj<="+mjthresh;
353  file << YieldsCut(regions[2]+": $M_J \\leq "+mjthresh+"$", "mj<="+mjthresh+"&&"+cuts_2lbb, chain, Samples, nsig);
354  file <<"\\hline\n";
355  file << YieldsCut(indent+lownj_2l+", "+lowmet, mjcut+"&&njets<="+midjets_2l+"&&met<="+highmet+"&&"+cuts_2lbb, chain, Samples, nsig);
356  file << YieldsCut(indent+lownj_2l+", "+higmet, mjcut+"&&njets<="+midjets_2l+"&&met>"+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
357  file << YieldsCut(indent+hignj_2l+", "+lowmet, mjcut+"&&njets>"+midjets_2l+"&&met<="+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
358  file << YieldsCut(indent+hignj_2l+", "+higmet, mjcut+"&&njets>"+midjets_2l+"&&met>"+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
359  file <<"\\hline\n";
360 
361  mjcut="mj>"+mjthresh;
362  file << YieldsCut(regions[3]+": $M_J > "+mjthresh+"$", "mj>"+mjthresh+"&&"+cuts_2lbb, chain, Samples, nsig);
363  file <<"\\hline\n";
364  file << YieldsCut(indent+lownj_2l+", "+lowmet, mjcut+"&&njets<="+midjets_2l+"&&met<="+highmet+"&&"+cuts_2lbb, chain, Samples, nsig);
365  file << YieldsCut(indent+lownj_2l+", "+higmet, mjcut+"&&njets<="+midjets_2l+"&&met>"+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
366  file << YieldsCut(indent+hignj_2l+", "+lowmet, mjcut+"&&njets>"+midjets_2l+"&&met<="+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
367  file << YieldsCut(indent+hignj_2l+", "+higmet, mjcut+"&&njets>"+midjets_2l+"&&met>"+highmet+"&&" +cuts_2lbb, chain, Samples, nsig);
368  }
369 
370  file << "\\hline\\multicolumn{1}{c|}{} ";
371  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
372  file << " & "<<Samples[sam].label;
373  file<< " & SM bkg. ";
374  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
375  file << " & "<<Samples[sam].label<< " & "+fom;
376  file << "\\\\ \n ";
377 
378  file<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
379  file<<footer.rdbuf();
380  file.close();
381  cout<<endl<<" pdflatex "<<outname<<endl<<endl;
382 }
383 
384 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig){
385  TString totCut, Hname = "histo", out;
386  vector<double> yield, error;
387  double bkg(0), bkg_err(0), err, yield_sam;
388  int nsam(chain.size()), entries(0);
389  for(int sam(0); sam < nsam; sam++){
390  totCut = luminosity+"*weight*("+cuts+"&&"+Samples[sam].cut+")";
391  entries = getYieldErr(*chain[sam], totCut, yield_sam, err);
392  yield.push_back(yield_sam);
393  error.push_back(err);
394  if(sam<nsam-nsig) {
395  if(yield[sam]>0) bkg += yield[sam];
396  bkg_err = sqrt(pow(bkg_err,2)+pow(err,2));
397  }
398  if(false) cout<<sam<<": yield "<<Samples[sam].label<<" "<<yield[sam]<<", n "<<entries<<" \t "<<totCut<<endl;
399  }
400 
401  int digits(2);
402  cout<<title<<": B = "<<(RoundNumber(bkg,digits)+" +- "+RoundNumber(bkg_err,digits));
403  out = title;
404  for(int sam(0); sam < nsam-nsig; sam++) out += (" \t & " + RoundNumber(yield[sam],digits));
405  out += (" \t & $"+RoundNumber(bkg,digits))+" \\pm "+RoundNumber(bkg_err,digits)+"$";
406  for(int sam(nsam-nsig); sam < nsam; sam++) {
407  float fracerr(sqrt(pow(bkg_err/bkg,2)+0.3*0.3+0.24*0.24));
408  out += (" \t& $" + RoundNumber(yield[sam],digits)+" \\pm "+RoundNumber(error[sam],digits) + "$ \t& ");
409  if(do_zbi) out += RoundNumber(RooStats::NumberCountingUtils::BinomialExpZ(yield[sam], bkg, fracerr),2);
410  else out += RoundNumber(yield[sam],2,bkg);
411 
412  cout<<", S = "<<RoundNumber(yield[sam],digits)+" +- "+RoundNumber(error[sam],digits)<<" with Zbi = ";
413  cout<<RoundNumber(RooStats::NumberCountingUtils::BinomialExpZ(yield[sam], bkg, fracerr),2);
414  }
415  out += " \\\\ \n";
416  cout<<endl;
417  return out;
418 }
long getYieldErr(TChain &tree, TString cut, double &yield, double &uncertainty)
STL namespace.
TString YieldsCut(TString title, TString cuts, vector< TChain * > chain, vector< sfeats > Samples, int nsig)
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
int main(int argc, char *argv[])
tuple file
Definition: parse_card.py:238