ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
table_yields.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 "TChain.h"
9 #include "TFile.h"
10 #include "TString.h"
11 #include "TH1D.h"
12 #include "TMath.h"
13 #include "RooStats/NumberCountingUtils.h"
14 
15 #include "styles.hpp"
16 #include "utilities.hpp"
17 #include "utilities_macros.hpp"
18 
19 using namespace std;
20 using std::cout;
21 using std::endl;
22 
23 
24 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig);
25 
26 int main(){
27 
28  // Reading ntuples
29  TString folder="archive/15-04-07/skims/";
30  vector<TString> s_tt;
31  s_tt.push_back(folder+"*_TTJet*");
32  vector<TString> s_wjets;
33  s_wjets.push_back(folder+"*_WJets*");
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  vector<TChain *> chain;
50  vector<sfeats> Samples;
51  Samples.push_back(sfeats(s_other, "Other", 1001));
52  Samples.push_back(sfeats(s_ttv, "$t\\bar{t}V$", 1002));
53  Samples.push_back(sfeats(s_single, "Single $t$", 1005));
54  Samples.push_back(sfeats(s_wjets, "W + jets", 1004));
55  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ (1$\\ell$)", 1000,1,
56  "((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)<=1"));
57  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ ($2\\ell$)", 1006,1,
58  "((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)>=2"));
59  int nsig(2);
60  Samples.push_back(sfeats(s_t1t, "T1tttt NC", 2));
61  Samples.push_back(sfeats(s_t1tc, "T1tttt C", 2,2));
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 
70  TString metcut("400"), mjcut("400");
71  TString name = "txt/ra4_yields_met"+metcut+"_mj"+mjcut+".tex";
72  TString cuts_1bmt("(nmus+nels)==1&&ht>500&&mt>150&&nbm==1&&njets>=6");
73  TString cuts_2bmt("(nmus+nels)==1&&ht>500&&mt>150&&nbm>=2&&njets>=6");
74  TString cuts_1b("(nmus+nels)==1&&ht>500&&met>"+metcut+"&&nbm==1&&njets>=6");
75  TString cuts_2b("(nmus+nels)==1&&ht>500&&met>"+metcut+"&&nbm==2&&njets>=6");
76  TString cuts_3b("(nmus+nels)==1&&ht>500&&met>"+metcut+"&&nbm>=3&&njets>=6");
77  TString cuts_2l("(nmus+nels)==2&&ht>500&&met>"+metcut+"&&nbm==1&&njets>=4");
78  TString cuts_2lp("(nmus+nels)==2&&ht>500&&met>"+metcut+"&&nbm==2&&njets>=4");
79  TString cuts_2l_3b("(nmus+nels)==2&&ht>500&&met>"+metcut+"&&nbm>=3&&njets>=4");
80  ofstream file(name);
81 
82  file << "\n\\begin{tabular}{ l | rrrrrr | r | rr | rr}\\hline\\hline\n";
83  file << " \\multicolumn{1}{c|}{Cuts} ";
84  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
85  file << " & "<<Samples[sam].label;
86  file<< " & {\\bf SM bkg.} ";
87  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
88  file << " & "<<Samples[sam].label<< " & {\\bf S/B} ";
89  file << "\\\\ \\hline \n ";
90 
92  file << " \\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>200, m_T>150, n_{\\rm jets}\\geq 6, "
93  <<"n_b=1, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
94  file << YieldsCut("MET$ < "+metcut+",m_J< "+mjcut+"$ ", "mj<"+mjcut+"&&met<"+metcut+"&&"+cuts_1bmt, chain, Samples, nsig);
95  file << YieldsCut("MET$ < "+metcut+",m_J\\geq "+mjcut+"$ ", "mj>="+mjcut+"&&met<"+metcut+"&&"+cuts_1bmt, chain, Samples, nsig);
96  file << YieldsCut("MET$\\geq "+metcut+",m_J< "+mjcut+"$ ", "mj<"+mjcut+"&&met>="+metcut+"&&"+cuts_1bmt, chain, Samples, nsig);
97  file << YieldsCut("MET$\\geq "+metcut+",m_J\\geq "+mjcut+"$", "mj>="+mjcut+"&&met>="+metcut+"&&"+cuts_1bmt, chain, Samples, nsig);
98 
99  file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>200, m_T>150, n_{\\rm jets}\\geq 6, "
100  <<"n_b\\geq 2, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
101  file << YieldsCut("MET$ < "+metcut+",m_J< "+mjcut+"$ ", "mj<"+mjcut+"&&met<"+metcut+"&&"+cuts_2bmt, chain, Samples, nsig);
102  file << YieldsCut("MET$ < "+metcut+",m_J\\geq "+mjcut+"$ ", "mj>="+mjcut+"&&met<"+metcut+"&&"+cuts_2bmt, chain, Samples, nsig);
103  file << YieldsCut("MET$\\geq "+metcut+",m_J< "+mjcut+"$ ", "mj<"+mjcut+"&&met>="+metcut+"&&"+cuts_2bmt, chain, Samples, nsig);
104  file << YieldsCut("MET$\\geq "+metcut+",m_J\\geq "+mjcut+"$", "mj>="+mjcut+"&&met>="+metcut+"&&"+cuts_2bmt, chain, Samples, nsig);
106 
107 
108  // //////////////////////////////////// STANDARD //////////////////////////////////
109  // file << " \\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
110  // <<", n_{\\rm jets}\\geq 6, "
111  // <<"n_b=1, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
112  // file << YieldsCut("$m_T < 150,m_J< 600$ ", "mj<600&&mt<150&&"+cuts_1b, chain, Samples, nsig);
113  // file << YieldsCut("$m_T < 150,m_J\\geq 600$ ", "mj>=600&&mt<150&&"+cuts_1b, chain, Samples, nsig);
114  // file << YieldsCut("$m_T\\geq 150,m_J< 600$ ", "mj<600&&mt>=150&&"+cuts_1b, chain, Samples, nsig);
115  // file << YieldsCut("$m_T\\geq 150,m_J\\geq 600$", "mj>=600&&mt>=150&&"+cuts_1b, chain, Samples, nsig);
116 
117  // file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
118  // <<", n_{\\rm jets}\\geq 6, "
119  // <<"n_b= 2, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
120  // file << YieldsCut("$m_T < 150,m_J< 600$ ", "mj<600&&mt<150&&"+cuts_2b, chain, Samples, nsig);
121  // file << YieldsCut("$m_T < 150,m_J\\geq 600$ ", "mj>=600&&mt<150&&"+cuts_2b, chain, Samples, nsig);
122  // file << YieldsCut("$m_T\\geq 150,m_J< 600$ ", "mj<600&&mt>=150&&"+cuts_2b, chain, Samples, nsig);
123  // file << YieldsCut("$m_T\\geq 150,m_J\\geq 600$", "mj>=600&&mt>=150&&"+cuts_2b, chain, Samples, nsig);
124 
125  // file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
126  // <<", n_{\\rm jets}\\geq 4, "
127  // <<"n_b=1, n_{\\rm lep}=2$"<<"} \\\\ \\hline\n";
128  // file << YieldsCut("$m_J< 600$", "mj<600&&"+cuts_2l, chain, Samples, nsig);
129  // file << YieldsCut("$m_J\\geq 600$", "mj>=600&&"+cuts_2l, chain, Samples, nsig);
130 
131  // file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
132  // <<", n_{\\rm jets}\\geq 4, "
133  // <<"n_b= 2, n_{\\rm lep}=2$"<<"} \\\\ \\hline\n";
134  // file << YieldsCut("$m_J< 600$", "mj<600&&"+cuts_2lp, chain, Samples, nsig);
135  // file << YieldsCut("$m_J\\geq 600$", "mj>=600&&"+cuts_2lp, chain, Samples, nsig);
136  // //////////////////////////////////// STANDARD //////////////////////////////////
137 
138 
140  // metcut = "200";
141  // cuts_3b.ReplaceAll("met>250","met>200");
142  // cuts_2l_3b.ReplaceAll("met>250","met>200");
143  // file << " \\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
144  // <<", n_{\\rm jets}\\geq 6, "
145  // <<"n_b\\geq 3, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
146  // file << YieldsCut("$m_T < 150,m_J< 600$ ", "mj<600&&mt<150&&"+cuts_3b, chain, Samples, nsig);
147  // file << YieldsCut("$m_T < 150,m_J\\geq 600$ ", "mj>=600&&mt<150&&"+cuts_3b, chain, Samples, nsig);
148  // file << YieldsCut("$m_T\\geq 150,m_J< 600$ ", "mj<600&&mt>=150&&"+cuts_3b, chain, Samples, nsig);
149  // file << YieldsCut("$m_T\\geq 150,m_J\\geq 600$", "mj>=600&&mt>=150&&"+cuts_3b, chain, Samples, nsig);
150 
151  // file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
152  // <<", n_{\\rm jets}\\geq 4, "
153  // <<"n_b\\geq 3, n_{\\rm lep}=2$"<<"} \\\\ \\hline\n";
154  // file << YieldsCut("$m_J< 600$", "mj<600&&"+cuts_2l_3b, chain, Samples, nsig);
155  // file << YieldsCut("$m_J\\geq 600$", "mj>=600&&"+cuts_2l_3b, chain, Samples, nsig);
156 
157  // metcut = "250";
158  // cuts_3b.ReplaceAll("met>200","met>250");
159  // cuts_2l_3b.ReplaceAll("met>200","met>250");
160  // file << " \\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
161  // <<", n_{\\rm jets}\\geq 6, "
162  // <<"n_b\\geq 3, n_{\\rm lep}=1$"<<"} \\\\ \\hline\n";
163  // file << YieldsCut("$m_T < 150,m_J< 600$ ", "mj<600&&mt<150&&"+cuts_3b, chain, Samples, nsig);
164  // file << YieldsCut("$m_T < 150,m_J\\geq 600$ ", "mj>=600&&mt<150&&"+cuts_3b, chain, Samples, nsig);
165  // file << YieldsCut("$m_T\\geq 150,m_J< 600$ ", "mj<600&&mt>=150&&"+cuts_3b, chain, Samples, nsig);
166  // file << YieldsCut("$m_T\\geq 150,m_J\\geq 600$", "mj>=600&&mt>=150&&"+cuts_3b, chain, Samples, nsig);
167 
168  // file << " \\hline\\multicolumn{"<< Samples.size()+nsig*2<<"}{c}{"<< "$H_T>500, \\mathrm{MET}>"+metcut
169  // <<", n_{\\rm jets}\\geq 4, "
170  // <<"n_b\\geq 3, n_{\\rm lep}=2$"<<"} \\\\ \\hline\n";
171  // file << YieldsCut("$m_J< 600$", "mj<600&&"+cuts_2l_3b, chain, Samples, nsig);
172  // file << YieldsCut("$m_J\\geq 600$", "mj>=600&&"+cuts_2l_3b, chain, Samples, nsig);
174 
175 
176 
177 
178 
179  file << " \\hline\\multicolumn{1}{c|}{Cuts} ";
180  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
181  file << " & "<<Samples[sam].label;
182  file<< " & {\\bf SM bkg.} ";
183  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
184  file << " & "<<Samples[sam].label<< " & {\\bf S/B} ";
185  file << "\\\\ \n ";
186 
187  file<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
188  file.close();
189  cout<<"Written "<<name<<endl;
190 }
191 
192 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig){
193  TString totCut, luminosity="4", Hname = "histo", out;
194  vector<float> yield;
195  float bkg(0);
196  int nsam(chain.size());
197  TH1D histo(Hname, "",100, 0, 10000);
198  for(int sam(0); sam < nsam; sam++){
199  totCut = luminosity+"*weight*("+cuts+"&&"+Samples[sam].cut+")";
200  chain[sam]->Project(Hname, "met", totCut);
201  yield.push_back(histo.Integral(0,101));
202  if(sam<nsam-nsig) bkg += yield[sam];
203  //cout<<sam<<": yield "<<Samples[sam].label<<" "<<yield[sam]<<" \t "<<totCut<<endl;
204  }
205 
206  out = title;
207  for(int sam(0); sam < nsam-nsig; sam++) out += (" \t & " + RoundNumber(yield[sam],1));
208  out += (" \t & {\\bf "+RoundNumber(bkg,1))+"}";
209  for(int sam(nsam-nsig); sam < nsam; sam++)
210  out += (" \t& " + RoundNumber(yield[sam],1) + " \t& {\\bf " +
211  RoundNumber(yield[sam],2,bkg)) + "}";
212  //RoundNumber(RooStats::NumberCountingUtils::BinomialExpZ(yield[sam], bkg, 0.3),2));
213  out += " \\\\ \n";
214  //cout<<out;
215  return out;
216 }
int main()
TString YieldsCut(TString title, TString cuts, vector< TChain * > chain, vector< sfeats > Samples, int nsig)
STL namespace.
TString luminosity
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
tuple file
Definition: parse_card.py:238
TString metcut("met_nohf>175")