ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
table_Rfactors.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 namespace ra4 {
20  TString luminosity="10";
21  TString MJcut = "500";
22  bool doRmj = false;
23  bool doRmt = true;
24  bool do_6j = true;
25  bool do_8j = false;
26  bool do_2b = false;
27  bool do_3b = true;
28 }
29 
30 using namespace ra4;
31 
32 using namespace std;
33 using std::cout;
34 using std::endl;
35 
36 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples);
37 TString GetRatio(TString baseline,TString region_cut,TString ratio_cut, sfeats Sample);
38 void GetRatio(double &ratio,double &error, TString baseline,TString region_cut, TString ratio_cut, sfeats Sample);
39 TString GetKappa(TString baseline,TString region_cut1,TString region_cut2, TString ratio_cut, sfeats Sample);
40 
41 int main(){
42 
43  // Reading ntuples
44  TString folder="/cms5r0/ald77/archive/2015_05_21/skim/";
45  vector<TString> s_tt;
46  s_tt.push_back(folder+"*_TTJet*");
47 
48  vector<TChain *> chain;
49  vector<sfeats> Samples;
50  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ (1$\\ell$)", 1000,1,"ntruleps<=1"));
51  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ ($2\\ell$)", 1006,1,"ntruleps>=2"));
52 
53  for(unsigned sam(0); sam < Samples.size(); sam++){
54  chain.push_back(new TChain("tree"));
55  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
56  chain[sam]->Add(Samples[sam].file[insam]);
57  }
58 
59  TString name = "txt/ra4_Rfactors_MJ"+MJcut+"_lumi"+luminosity+".tex";
60  if(doRmj) name.ReplaceAll("Rfactors","Rfactors_Rmj");
61  if(doRmt) name.ReplaceAll("Rfactors","Rfactors_Rmt");
62 
63  // CUTS
64  TString cuts_1l("(nmus+nels)==1&&ht>500&&met>200&&nbm>=2&&njets>=6");
65  TString cuts_1l1b("(nmus+nels)==1&&ht>500&&met>200&&nbm==1&&njets>=6");
66  TString cuts_1l2b("(nmus+nels)==1&&ht>500&&met>200&&nbm==2&&njets>=6");
67  TString cuts_1l3b("(nmus+nels)==1&&ht>500&&met>200&&nbm>=3&&njets>=6");
68 
69  TString cuts_2l("(nmus+nels)==2&&ht>500&&met>200&&nbm==1&&njets>=5");
70  TString cuts_2lbb("(nmus+nels)==2&&ht>500&&met>200&&nbm==2&&njets>=5");
71 
72  TString cuts_1ltex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b\\geq 2, n_{\\rm lep}=1$");
73  TString cuts_1l1btex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b=1, n_{\\rm lep}=1$");
74  TString cuts_1l2btex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b=2, n_{\\rm lep}=1$");
75  TString cuts_1l3btex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b\\geq 3, n_{\\rm lep}=1$");
76 
77  TString cuts_2ltex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 5, n_b=1, n_{\\rm lep}=2$");
78  TString cuts_2lbbtex("$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 5, n_b=2, n_{\\rm lep}=2$");
79 
80  TString cuts_R1("mj<="+MJcut+"&&mt<=140&&");
81  TString cuts_R2("mj>"+MJcut+"&&mt<=140&&");
82  TString cuts_R3("mj<="+MJcut+"&&mt>140&&");
83  TString cuts_R4("mj>"+MJcut+"&&mt>140&&");
84  TString cuts_highMJ("mj>"+MJcut+"&&");
85  TString cuts_lowMJ("mj<="+MJcut+"&&");
86 
87  TString cuts_R1tex("R1: $m_T \\leq 140,M_J \\leq "+MJcut+"$");
88  TString cuts_R2tex("R2: $m_T \\leq 140,M_J > "+MJcut+"$");
89  TString cuts_R3tex("R3: $m_T > 140,M_J \\leq "+MJcut+"$");
90  TString cuts_R4tex("R4: $m_T > 140,M_J > "+MJcut+"$");
91  TString cuts_highMJtex("$M_J > "+MJcut+"$");
92  TString cuts_lowMJtex("$M_J \\leq "+MJcut+"$");
93  //
94 
95  if(do_6j){
96  name.ReplaceAll("Rfactors","Rfactors_6j");
97  cuts_1l.ReplaceAll("njets>=6","njets>=6&&njets<=7");
98  cuts_1l1b.ReplaceAll("njets>=6","njets>=6&&njets<=7");
99  cuts_1l2b.ReplaceAll("njets>=6","njets>=6&&njets<=7");
100  cuts_1l3b.ReplaceAll("njets>=6","njets>=6&&njets<=7");
101  cuts_1ltex.ReplaceAll("n_{\\rm jets}\\geq 6,","6 \\leq n_{\\rm jets}\\leq 7 ,");
102  cuts_1l1btex.ReplaceAll("n_{\\rm jets}\\geq 6,","6 \\leq n_{\\rm jets}\\leq 7 ,");
103  cuts_1l2btex.ReplaceAll("n_{\\rm jets}\\geq 6,","6 \\leq n_{\\rm jets}\\leq 7 ,");
104  cuts_1l3btex.ReplaceAll("n_{\\rm jets}\\geq 6,","6 \\leq n_{\\rm jets}\\leq 7 ,");
105  }
106  if(do_8j){
107  name.ReplaceAll("Rfactors","Rfactors_8j");
108  cuts_1l.ReplaceAll(">=6",">=8");
109  cuts_1l1b.ReplaceAll(">=6",">=8");
110  cuts_1l2b.ReplaceAll(">=6",">=8");
111  cuts_1l3b.ReplaceAll(">=6",">=8");
112  cuts_1ltex.ReplaceAll("n_{\\rm jets}\\geq 6,","n_{\\rm jets}\\geq 8,");
113  }
114  if(do_2b){
115  name.ReplaceAll("Rfactors","Rfactors_2b");
116  cuts_1l.ReplaceAll("nbm>=2","nbm==2");
117  cuts_1ltex.ReplaceAll("n_b\\geq 2","n_b=2");
118  }
119  if(do_3b){
120  name.ReplaceAll("Rfactors","Rfactors_3b");
121  cuts_1l.ReplaceAll("nbm>=2","nbm>=3");
122  cuts_1ltex.ReplaceAll("n_b\\geq 2","n_b\\geq 3");
123  }
124 
125  ifstream header("txt/header.tex");
126  ifstream footer("txt/footer.tex");
127  ofstream file(name);
128  file<<header.rdbuf();
129  file<<"\\vspace{80 mm}\n";
130  file << "\n\\begin{tabular}[!htb]{ l | ";
131  for(unsigned sam(0); sam < Samples.size(); sam++)
132  file << "r";
133  file << "| r r | r r"; //For R and K factors
134  file<<"}\\hline\\hline\n";
135  file << " \\multicolumn{1}{c|}{${\\cal L} = "<<luminosity<<"$ fb$^{-1}$} ";
136  for(unsigned sam(0); sam < Samples.size(); sam++)
137  file << " & "<<Samples[sam].label;
138  if(doRmj) file << "& $R_{MJ}^{1\\ell}$ & $\\kappa_{MJ}^{1\\ell}$ & $R_{MJ}^{2\\ell}$ & $\\kappa_{MJ}^{2\\ell}$";
139  if(doRmt) file << "& $R_{m_T}^{1\\ell}$ & $\\kappa_{m_T}^{1\\ell}$ & $R_{m_T}^{2\\ell}$ & $\\kappa_{m_T}^{2\\ell}$";
140  file << "\\\\ \\hline \n ";
141 
143  file << " \\multicolumn{"<< Samples.size()+5<<"}{c}{" << cuts_1ltex <<"} \\\\ \\hline \\hline\n";
144 
145  // Do Rmj
146  if(doRmj){
147  file << YieldsCut(cuts_R1tex, cuts_R1+cuts_1l, chain, Samples)+"&&&&"+" \\\\ \n";
148  file << YieldsCut(cuts_R2tex, cuts_R2+cuts_1l, chain, Samples)+"& \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mt<=140","mj>"+MJcut,Samples[0])+"} && \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mt<=140","mj>"+MJcut,Samples[1])+"} &"+" \\\\ \n";
149  file << YieldsCut(cuts_R3tex, cuts_R3+cuts_1l, chain, Samples)+"&&&&"+" \\\\ \n";
150  file << YieldsCut(cuts_R4tex, cuts_R4+cuts_1l, chain, Samples)+ " & \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mt>140","mj>"+MJcut,Samples[0])+"} & \\multirow{-4}{*}{"+GetKappa(cuts_1l,"mt<=140","mt>140","mj>"+MJcut,Samples[0])+"} & \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mt>140","mj>"+MJcut,Samples[1])+"} & \\multirow{-4}{*}{"+GetKappa(cuts_1l,"mt<=140","mt>140","mj>"+MJcut,Samples[1])+"}"+" \\\\ \n";
151  }
152 
153  // Do Rmt
154  if(doRmt){
155  file << YieldsCut(cuts_R1tex, cuts_R1+cuts_1l, chain, Samples)+"&&&&"+" \\\\ \n";
156  file << YieldsCut(cuts_R3tex, cuts_R3+cuts_1l, chain, Samples)+"& \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mj<="+MJcut,"mt>140",Samples[0])+"} && \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mj<="+MJcut,"mt>140",Samples[1])+"} &"+" \\\\ \n";
157  file << YieldsCut(cuts_R2tex, cuts_R2+cuts_1l, chain, Samples)+"&&&&"+" \\\\ \n";
158  file << YieldsCut(cuts_R4tex, cuts_R4+cuts_1l, chain, Samples)+ " & \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mj>"+MJcut,"mt>140",Samples[0])+"} & \\multirow{-4}{*}{"+GetKappa(cuts_1l,"mj<="+MJcut,"mj>"+MJcut,"mt>140",Samples[0])+"} & \\multirow{-2}{*}{"+GetRatio(cuts_1l,"mj>"+MJcut,"mt>140",Samples[1])+"} & \\multirow{-4}{*}{"+GetKappa(cuts_1l,"mj<="+MJcut,"mj>"+MJcut,"mt>140",Samples[1])+"}"+" \\\\ \n";
159  }
160 
161  file << "\\hline\\multicolumn{1}{c|}{} ";
162  for(unsigned sam(0); sam < Samples.size(); sam++)
163  file << " & ";
164  file << "\\\\ \n ";
165 
166  file<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
167  file<<footer.rdbuf();
168  file.close();
169  cout<<"Written "<<name<<endl;
170 }
171 
172 TString YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples){
173  TString totCut, Hname = "histo", out;
174  vector<double> yield, error;
175  double err;
176  int nsam(chain.size());
177  TH1D histo(Hname, "",100, 0, 10000);
178  histo.Sumw2();
179  for(int sam(0); sam < nsam; sam++){
180  totCut = luminosity+"*weight*("+cuts+"&&"+Samples[sam].cut+")";
181  chain[sam]->Project(Hname, "met", totCut);
182  yield.push_back(histo.IntegralAndError(0,101,err));
183  error.push_back(err);
184  }
185 
186  cout<<title;
187  out = title;
188  for(int sam(0); sam < nsam; sam++)
189  out += (" \t & $"+RoundNumber(yield[sam],1))+" \\pm "+RoundNumber(error[sam],1)+"$";
190  // out += " \\\\ \n";
191  cout<<endl;
192  return out;
193 }
194 
195 TString GetRatio(TString baseline,TString region_cut,TString ratio_cut, sfeats Sample){
196 
197  TChain * chain = new TChain("tree");
198  for(unsigned insam(0); insam < Sample.file.size(); insam++)
199  chain->Add(Sample.file[insam]);
200 
201  TH1D h_numerator("num", "",100, 0, 10000);
202  h_numerator.Sumw2();
203  TH1D h_denominator("den", "",100, 0, 10000);
204  h_denominator.Sumw2();
205 
206  TString numCut = luminosity+"*weight*("+baseline+"&&"+region_cut+"&&"+ratio_cut+"&&"+Sample.cut+")";
207  TString denCut = luminosity+"*weight*("+baseline+"&&"+region_cut+"&&!("+ratio_cut+")&&"+Sample.cut+")";
208 
209  chain->Project("num", "met", numCut);
210  chain->Project("den", "met", denCut);
211 
212  double numerator, denominator,numerator_err, denominator_err, ratio, error;
213  numerator = h_numerator.IntegralAndError(0,101,numerator_err);
214  denominator = h_denominator.IntegralAndError(0,101,denominator_err);
215 
216  ratio = numerator/denominator;
217  error = ratio*sqrt(pow(numerator_err/numerator,2)+pow(denominator_err/denominator,2));
218 
219  TString out;
220  out = "$"+RoundNumber(ratio,3)+" \\pm "+RoundNumber(error,3)+"$";
221 
222  return out;
223 }
224 
225 void GetRatio(double &ratio,double &error, TString baseline,TString region_cut, TString ratio_cut, sfeats Sample){
226 
227  TChain * chain = new TChain("tree");
228  for(unsigned insam(0); insam < Sample.file.size(); insam++) chain->Add(Sample.file[insam]);
229 
230  TH1D h_numerator("num", "",100, 0, 10000);
231  h_numerator.Sumw2();
232  TH1D h_denominator("den", "",100, 0, 10000);
233  h_denominator.Sumw2();
234 
235  TString numCut = luminosity+"*weight*("+baseline+"&&"+region_cut+"&&"+ratio_cut+"&&"+Sample.cut+")";
236  TString denCut = luminosity+"*weight*("+baseline+"&&"+region_cut+"&&!("+ratio_cut+")&&"+Sample.cut+")";
237 
238  chain->Project("num", "met", numCut);
239  chain->Project("den", "met", denCut);
240 
241  double numerator, denominator,numerator_err, denominator_err;
242  numerator = h_numerator.IntegralAndError(0,101,numerator_err);
243  denominator = h_denominator.IntegralAndError(0,101,denominator_err);
244 
245  ratio = numerator/denominator;
246  error = ratio*sqrt(pow(numerator_err/numerator,2)+pow(denominator_err/denominator,2));
247 }
248 
249 TString GetKappa(TString baseline,TString region_cut1,TString region_cut2, TString ratio_cut, sfeats Sample){
250 
251  double ratio1, ratio2, error1, error2, kappa, kappaerr;
252  GetRatio(ratio1,error1,baseline,region_cut1,ratio_cut, Sample);
253  GetRatio(ratio2,error2,baseline,region_cut2,ratio_cut, Sample);
254 
255  kappa = ratio2/ratio1;
256  kappaerr = kappa*sqrt(pow(error2/ratio2,2)+pow(error1/ratio1,2));
257 
258  TString out;
259  out = "$"+RoundNumber(kappa,3)+" \\pm "+RoundNumber(kappaerr,3)+"$";
260 
261  return out;
262 }
bool doRmj
bool do_3b
TString YieldsCut(TString title, TString cuts, vector< TChain * > chain, vector< sfeats > Samples)
TString luminosity
bool do_8j
STL namespace.
int main()
TString GetRatio(TString baseline, TString region_cut, TString ratio_cut, sfeats Sample)
bool do_2b
std::vector< TString > file
tuple kappa
Definition: parse_card.py:264
TString MJcut
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
TString GetKappa(TString baseline, TString region_cut1, TString region_cut2, TString ratio_cut, sfeats Sample)
TString cut
tuple file
Definition: parse_card.py:238
bool do_6j
bool doRmt