ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
table_hmol.cxx
Go to the documentation of this file.
1 //table_hmol.cxx: Creates tables that investigate high mT, single (true) lepton tt events
2 
3 #include <iostream>
4 #include <fstream>
5 #include <vector>
6 
7 #include "TChain.h"
8 #include "TString.h"
9 
10 #include "utilities.hpp"
11 #include "utilities_macros.hpp"
12 
13 namespace {
14  TString ntuple_date("2015_10_19");
15  TString lumi("3");
16 }
17 
18 using namespace std;
19 
20 
21 void maketable(const vector<double> &tot_entries, const vector<vector<vector<double> > > &entries);
22 
23 int main(){
24 
25  TChain* tt = new TChain("tree");
26  tt->Add("/afs/cern.ch/user/m/manuelf/work/babies/"+ntuple_date+"/mc/skim_1lht500met200/*TTJets*HT*");
27  tt->Add("/afs/cern.ch/user/m/manuelf/work/babies/"+ntuple_date+"/mc/skim_1lht500met200/*TTJets*Lept*");
28 
29  // tt->Add("/afs/cern.ch/user/m/manuelf/work/babies/2015_10_28/151028_044540/*TTJets*HT*");
30  // tt->Add("/afs/cern.ch/user/m/manuelf/work/babies/2015_10_28/151028_044540/*TTJets*Lept*");
31 
32  //TString cuts
33  TString Baseline = "ht>500&&met>200&&njets>=6&&nbm>=1&&nleps==1&&mj>250";
34 
35  TString And = "&&";
36  TString Or = "||";
37 
38  TString OneTruLep = "ntruleps==1";
39  TString hmt = "mt>140";
40 
41  TString OneRecoEl = "nels==1";
42  TString OneRecoMu = "nmus==1";
43 
44  TString ZeroGoodLeps = "(nleps_tm==0)";
45 
46  TString LostFakeEl = "("+OneRecoEl+And+ZeroGoodLeps+")";
47  TString LostFakeMu = "("+OneRecoMu+And+ZeroGoodLeps+")";
48 
49  TString LostFake = "("+LostFakeEl+Or+LostFakeMu+")";
50  TString NotLostFake = "!"+LostFake;
51 
52  TString LowGenMt = "(mt_tru<=140)";
53  TString LowGenMtFromW = "(mt_tru_nuw<=140)";
54 
55  TString BadRecoMtEl = "("+OneRecoEl+And+LowGenMt+")";
56  TString BadRecoMtMu = "("+OneRecoMu+And+LowGenMt+")";
57 
58  //CUTS
59  vector<TString> nbcuts;
60  nbcuts.push_back("nbm>=1");
61  nbcuts.push_back("nbm>=2");
62  nbcuts.push_back("nbm>=3");
63 
64  vector<vector<TString> > syscuts;
65  syscuts.push_back(vector<TString>());
66  syscuts.push_back(vector<TString>());
67  syscuts[0].push_back(LostFakeEl);
68  syscuts[0].push_back(NotLostFake+And+BadRecoMtEl);
69  syscuts[0].push_back(NotLostFake+And+OneRecoEl+And+"!"+LowGenMt);
70  syscuts[1].push_back(LostFakeMu);
71  syscuts[1].push_back(NotLostFake+And+BadRecoMtMu);
72  syscuts[1].push_back(NotLostFake+And+OneRecoMu+And+"!"+LowGenMt);
73 
74  // 3D vector. 1st argument: 0/1/2 = Nb=1/2/>=3. 2nd argument: 0/1/2 = Lost-Fake/RecoEffects/Other. 3rd argument: 0/1 = e/mu.
75  vector<int> tot_entries; vector<double> tot_yield, tot_err;
76  vector<vector<vector<int> > > Nentries;
77  vector<vector<vector<double> > > yield, err;
78  for(unsigned int iNb=0; iNb<nbcuts.size(); iNb++){
79  Nentries.push_back(vector<vector<int> >()); yield.push_back(vector<vector<double> >()); err.push_back(vector<vector<double> >());
80  TString totcut_hmt = lumi+"*weight*("+Baseline+And+hmt+And+nbcuts[iNb]+")";
81 
82  double tot_baseline, tot_baseline_err;
83  getYieldErr(*tt, totcut_hmt, tot_baseline, tot_baseline_err);
84 
85  TString totcut = lumi+"*weight*("+Baseline+And+OneTruLep+And+hmt+And+nbcuts[iNb]+")";
86 
87  int tot_tempentry(-1); double tot_tempyield, tot_temperr;
88  tot_tempentry = getYieldErr(*tt, totcut, tot_tempyield, tot_temperr);
89 
90  tot_entries.push_back(tot_tempentry); tot_yield.push_back(tot_tempyield); tot_err.push_back(tot_temperr);
91 
92  cout<<"Totals for Nb="<<iNb+1<<" high mT, 1l events: Entries = "<<tot_entries[iNb]<<", Yield = "<<RoundNumber(tot_yield[iNb],2)<<" out of "<<RoundNumber(tot_baseline,2)<<" high mT tt events ("<<RoundNumber(tot_yield[iNb]/tot_baseline*100,2)<<"%)"<<endl;
93 
94  for(unsigned int iSys=0; iSys<(syscuts[0].size()); iSys++){
95  Nentries[iNb].push_back(vector<int>()); yield[iNb].push_back(vector<double>()); err[iNb].push_back(vector<double>());
96  for(unsigned int iLep=0; iLep<syscuts.size(); iLep++){
97 
98  totcut = lumi+"*weight*("+Baseline+And+OneTruLep+And+hmt+And+nbcuts[iNb]+And+syscuts[iLep][iSys]+")";
99 
100  //cout<<"totcut="<<totcut<<endl;
101 
102  int temp_entries(0);
103  double temp_yield(0.), temp_err(0.);
104  temp_entries = getYieldErr(*tt, totcut, temp_yield, temp_err);
105 
106  Nentries[iNb][iSys].push_back(temp_entries); yield[iNb][iSys].push_back(temp_yield); err[iNb][iSys].push_back(temp_err);
107 
108  cout<<"Nentries = "<<Nentries[iNb][iSys][iLep]<<", yield = "<<yield[iNb][iSys][iLep]<<", err = "<<err[iNb][iSys][iLep]<<endl;
109  }
110  }
111  cout<<"\n"<<endl;
112  }
113 
114  maketable(tot_yield, yield);
115 
116 }
117 
118 void maketable(const vector<double> &tot_entries, const vector<vector<vector<double> > > &entries){
119 
120  for(int iNb=0; iNb<3; iNb++){
121 
122  TString tname("txt/table_hmol_Nb");
123  tname += (iNb+1);
124  tname += "_"+ntuple_date+".tex";
125 
126  ifstream header("txt/header.tex");
127  ifstream footer("txt/footer.tex");
128  ofstream file(tname);
129  file<<header.rdbuf();
130 
131  //
132  file<< "\\begin{tabular}[tbp!]{l|c|c|c} \\hline \\hline"<<endl;
133 
134  file << "Baseline (${\\cal L} = "<<lumi<<"$ fb$^{-1}$) & Reco Lepton & MC Predicted Events & \\% (for both flavors) \\\\"<<endl;
135  file << "\\hline \\hline"<<endl;
136  file << "Lost-Fake Lepton & e & "<<RoundNumber(entries[iNb][0][0],1)<<" & \\multirow{2}{*}{"<<RoundNumber((entries[iNb][0][0]+entries[iNb][0][1])/tot_entries[iNb]*100.,0)<<"\\%} \\\\"<<endl;
137  file << "& $\\mu$ & "<<RoundNumber(entries[iNb][0][1],1)<<" & \\\\"<<endl;
138  file << "\\hline"<<endl;
139  file << "Jet Mismeasurement & e & "<<RoundNumber(entries[iNb][1][0],1)<<" & \\multirow{2}{*}{"<<RoundNumber((entries[iNb][1][0]+entries[iNb][1][1])/tot_entries[iNb]*100.,0)<<"\\%} \\\\"<<endl;
140  file << "& $\\mu$ & "<<RoundNumber(entries[iNb][1][1],1)<<" & \\\\"<<endl;
141  file << "\\hline"<<endl;
142  file << "Non-Prompt Neutrinos & e & "<<RoundNumber(entries[iNb][2][0],1)<<" & \\multirow{2}{*}{"<<RoundNumber((entries[iNb][2][0]+entries[iNb][2][1])/tot_entries[iNb]*100.,0)<<"\\%} \\\\"<<endl;
143  file << "& $\\mu$ & "<<RoundNumber(entries[iNb][2][1],1)<<" & \\\\"<<endl;
144  file << "\\hline \\hline"<<endl;
145 
146  file << "\\end{tabular}"<<endl;
147 
148  file<<footer.rdbuf();
149  file.close();
150  cout<<"Written "<<tname<<endl;
151 
152  }
153 }
long getYieldErr(TChain &tree, TString cut, double &yield, double &uncertainty)
void maketable(const vector< double > &tot_entries, const vector< vector< vector< double > > > &entries)
Definition: table_hmol.cxx:118
STL namespace.
int main()
Definition: table_hmol.cxx:23
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
tuple file
Definition: parse_card.py:238
TString ntuple_date("2015_10_19")