ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
table_track_veto2.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 "TGraphAsymmErrors.h"
14 #include "RooStats/NumberCountingUtils.h"
15 
16 #include "styles.hpp"
17 #include "utilities.hpp"
18 #include "utilities_macros.hpp"
19 
20 namespace localnames {
21  TString luminosity="10";
22 }
23 
24 using namespace localnames;
25 
26 using namespace std;
27 using std::cout;
28 using std::endl;
29 
30 void EffErr(float pass, float total, float weight, float &eff, float &ehigh, float &elow);
31 TString YieldsCut(TString title, TString event_cuts, TString track_cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig);
32 
33 int main(){
34 
35  // Reading ntuples
36  TString folder="/cms7r0/heller/code/susy_cfa/out/skim/";
37  // TString folder="/cms5r0/ald77/archive/2015_06_05/skim/skim_tight/";
38 
39  vector<TString> s_tt;
40  s_tt.push_back(folder+"*_TTJet*");
41  vector<TString> s_wjets;
42  s_wjets.push_back(folder+"*_WJets*");
43  vector<TString> s_single;
44  s_single.push_back(folder+"*_T*channel*");
45  vector<TString> s_ttv;
46  s_ttv.push_back(folder+"*TTW*");
47  s_ttv.push_back(folder+"*TTZ*");
48  vector<TString> s_other;
49  s_other.push_back(folder+"*QCD_HT*");
50  s_other.push_back(folder+"*_ZJet*");
51  s_other.push_back(folder+"*DY*");
52  s_other.push_back(folder+"*WH_HToBB*");
53  vector<TString> s_t1t;
54  s_t1t.push_back(folder+"*T1tttt*1500_*PU20*");
55  vector<TString> s_t1tc;
56  s_t1tc.push_back(folder+"*T1tttt*1200_*PU20*");
57 
58  vector<TChain *> chain;
59  vector<sfeats> Samples;
60  //Samples.push_back(sfeats(s_other, "Other", 1001));
61  //Samples.push_back(sfeats(s_ttv, "$t\\bar{t}V$", 1002));
62  //Samples.push_back(sfeats(s_single, "Single $t$", 1005));
63  // Samples.push_back(sfeats(s_wjets, "W+jets", 1004));
64  //Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ (1$\\ell$)", 1000,1,
65  // "((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)<=1"));
66  Samples.push_back(sfeats(s_tt, "$t\\bar{t}$ ($2\\ell$) efficiency", 1006,1,
67  "((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)>=2"));
68  int nsig(2);
69  Samples.push_back(sfeats(s_t1t, "T1tttt NC", 2));
70  // Samples.push_back(sfeats(s_t1t, "T1tttt NC, $1\\ell$", 2, 1,
71  // "((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)<=1"));
72  Samples.push_back(sfeats(s_t1tc, "T1tttt C", 2,2));
73 
74  for(unsigned sam(0); sam < Samples.size(); sam++){
75  chain.push_back(new TChain("tree"));
76  for(unsigned insam(0); insam < Samples[sam].file.size(); insam++)
77  chain[sam]->Add(Samples[sam].file[insam]);
78  }
79 
80 
81 
82 
83  TString cuts("(nmus+nels)==1&&ht>500&&met>200&&nbm>=1&&njets>=7&&mt>140&&mj>300");
84 
85 
86 
87  //only use opposite sign tracks from primary lepton
88  TString os("((tks_id*lep_charge)>0)"); //tks_id and tks_charge are opposite sign for leptons (way to go, Benjamin Franklin)
89  TString os_had("((tks_id*lep_charge)<0)"); //tks_id and tks_charge are same sign for pions
90 
91  //exclude primary lepton
92  TString notp("&&(!tks_is_primary)");
93 
94  //classify flavor
95  TString elec("&&tks_id*tks_id==121");
96  TString muon("&&tks_id*tks_id==169");
97  TString had("&&!(tks_id*tks_id==121||tks_id*tks_id==169)");
98 
99 
100  //abs iso for e (2 options), abs iso for mu (2 options), then charge iso for hadrons (2 options)
101  //TString iso[6] = {"&&(tks_pt*(tks_mini_ne+tks_mini_ch))<10","&&(tks_pt*(tks_mini_ne+tks_mini_ch))<20","&&(tks_pt*(tks_mini_ne+tks_mini_ch))<30","&&(tks_pt*(tks_mini_ne+tks_mini_ch))<50","&&(tks_pt*(tks_mini_ch))<2.5","&&tks_mini_ch<0.05"};
102  // absolute iso = pt*(rel iso)
103 
104 
105  TString mtc[3] = {"&&tks_mt<80","&&tks_mt<90","&&tks_mt<100"};
106  // TString dphi[3] = {"&&abs(abs(abs(tks_phi-met_phi)-3.14159)-3.14159)<0.5","&&abs(abs(abs(tks_phi-met_phi)-3.14159)-3.14159)<0.75","&&abs(abs(abs(tks_phi-met_phi)-3.14159)-3.14159)<1.0"};
107  vector<TString> isotypes;
108  vector<TString> isonames;
109 
110  isonames.push_back("abs chg+neu mini isolation"); isotypes.push_back("(tks_pt)*min((tks_mini_ne+tks_mini_ch),(tks_r02_ne+tks_r02_ch))");
111  isonames.push_back("abs chg+neu R=0.5 mini isolation"); isotypes.push_back("(tks_pt)*min((tks_mini_ne+tks_mini_ch),(tks_r05_ne+tks_r05_ch))");
112  isonames.push_back("abs chg+neu untruncated mini isolation"); isotypes.push_back("(tks_pt)*(tks_mini_ne+tks_mini_ch)");
113 
114  isonames.push_back("abs chg mini isolation"); isotypes.push_back("(tks_pt)*min((tks_mini_ch),(tks_r02_ch))");
115  isonames.push_back("abs chg R=0.5 mini isolation"); isotypes.push_back("(tks_pt)*min((tks_mini_ch),(tks_r05_ch))");
116  isonames.push_back("abs chg untruncated mini isolation"); isotypes.push_back("(tks_pt)*(tks_mini_ch)");
117 
118  isonames.push_back("rel chg+neu mini isolation"); isotypes.push_back("min((tks_mini_ne+tks_mini_ch),(tks_r02_ne+tks_r02_ch))");
119  isonames.push_back("rel chg+neu R=0.5 mini isolation"); isotypes.push_back("min((tks_mini_ne+tks_mini_ch),(tks_r05_ne+tks_r05_ch))");
120  isonames.push_back("rel chg+neu untruncated mini isolation"); isotypes.push_back("(tks_mini_ne+tks_mini_ch)");
121 
122  isonames.push_back("rel chg mini isolation"); isotypes.push_back("min((tks_mini_ch),(tks_r02_ch))");
123  isonames.push_back("rel chg R=0.5 mini isolation"); isotypes.push_back("min((tks_mini_ch),(tks_r05_ch))");
124  isonames.push_back("rel chg untruncated mini isolation"); isotypes.push_back("(tks_mini_ch)");
125 
126  vector<TString> trackdefs;
127  trackdefs.push_back(os+notp+elec+"&&"+isotypes[6]+"<0.1&&tks_dz<0.01");
128  trackdefs.push_back(os+notp+muon+"&&"+isotypes[6]+"<0.2&&tks_dz<0.01");
129  trackdefs.push_back(os_had+notp+had+"&&"+isotypes[9]+"<0.05");
130  trackdefs.push_back(os_had+notp+"&&tks_pt>15"+had+"&&"+isotypes[9]+"<0.05");
131 
132 
133  vector<int> eliso,muiso,hadiso;
134  vector<TString> elcut,mucut,hadcut;
135  vector< vector<int> > alliso;
136  vector< vector<TString> > allcut;
137 
138  elcut.push_back("tks_dz<0.008");
139  elcut.push_back("tks_dz<0.01");
140  elcut.push_back("tks_dz<0.015");
141  elcut.push_back("tks_dz<0.02");
142 
143  mucut.push_back("tks_dz<0.008");
144  mucut.push_back("tks_dz<0.01");
145  mucut.push_back("tks_dz<0.015");
146  mucut.push_back("tks_dz<0.02");
147 
148  hadcut.push_back("1==1");
149 
150  /* eliso.push_back(0); elcut.push_back("1.0");
151  eliso.push_back(0); elcut.push_back("2.5");
152  eliso.push_back(6); elcut.push_back("0.1");
153 
154  muiso.push_back(0); mucut.push_back("2.5");
155  muiso.push_back(0); mucut.push_back("5.0");
156  muiso.push_back(6); mucut.push_back("0.15");
157  muiso.push_back(6); mucut.push_back("0.2");
158 
159  hadiso.push_back(3); hadcut.push_back("1.0");
160  hadiso.push_back(3); hadcut.push_back("2.5");
161  hadiso.push_back(3); hadcut.push_back("5.0");
162  hadiso.push_back(9); hadcut.push_back("0.05");
163  hadiso.push_back(9); hadcut.push_back("0.1");*/
164 
165  //alliso.push_back(eliso); alliso.push_back(muiso); alliso.push_back(hadiso); alliso.push_back(hadiso);
166  allcut.push_back(elcut); allcut.push_back(mucut); allcut.push_back(hadcut); allcut.push_back(hadcut);
167 
168  vector<int> finaliso;
169  vector<TString> finalcut;
170  finaliso.push_back(6); finalcut.push_back("0.1");
171  finaliso.push_back(6); finalcut.push_back("0.2");
172  finaliso.push_back(9); finalcut.push_back("0.05");
173 
174  vector<TString> tracknames;
175  tracknames.push_back("els");
176  tracknames.push_back("mus");
177  tracknames.push_back("had");
178  tracknames.push_back("had2");
179 
180  vector<TString> tracknames2;
181  tracknames2.push_back("el, rel chg+neu mini iso < 0.1");
182  tracknames2.push_back("mu, rel chg+neu mini iso < 0.2");
183  tracknames2.push_back("had, rel chg mini iso < 0.05");
184  tracknames2.push_back("had, p$_{T} > 15$, rel chg mini iso < 0.05");
185 
186 
187 
188 
189  TString fastveto_prompt = "&&Sum$("+os+elec+notp+"&&tks_from_w&&(tks_pt)*min((tks_mini_ne+tks_mini_ch),(tks_r02_ne+tks_r02_ch))<2.5"+mtc[1]+")>0";
190  TString fastveto_nonprompt = "&&Sum$("+os+elec+notp+"&&!tks_from_w&&(tks_pt)*min((tks_mini_ne+tks_mini_ch),(tks_r02_ne+tks_r02_ch))<2.5"+mtc[1]+")>0";
191 
193  TString sumname = "txt/summary2_veto_lumi_"+luminosity+".tex";
194  ifstream sumheader("txt/header.tex");
195  ifstream sumfooter("txt/footer.tex");
196  ofstream sumfile(sumname);
197  sumfile<<sumheader.rdbuf();
198  sumfile << "\n\\begin{tabular}{ l | ";
199  for(unsigned sam(0); sam < Samples.size()-nsig; sam++) sumfile << "r";
200  sumfile<<" | r ";
201  for(int sam(0); sam < nsig; sam++) sumfile<<"| r | r ";
202  sumfile<<"}\\hline\\hline\n";
203  sumfile << " \\multicolumn{1}{c|}{${\\cal L} = 10$ fb$^{-1}$} ";
204  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
205  sumfile << " & "<<Samples[sam].label;
206  sumfile<< " & $t\\bar{t}$ ($2\\ell$) counts ";
207  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
208  sumfile << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
209  sumfile << "\\\\ \\hline \n ";
210 
211 
212  sumfile << " \\multicolumn{"<< Samples.size()+1+nsig<<"}{c}{"
213  << "$H_T>500, M_J>300, \\mathrm{MET}>200, m_T>140, n_{\\rm jets}\\geq 7, n_b\\geq 1, n_{\\rm lep}=1$"
214  <<"} \\\\ \\hline\n";
215 
216 
217 
218 sumfile << YieldsCut("$MJ>300$", cuts, "",
219  chain, Samples, nsig);
220  sumfile << "\\hline \n ";
221 
222 TString eveto ="Sum$("+trackdefs.at(0)+mtc[2]+")>0";
223 
224  sumfile << YieldsCut("has "+tracknames2[0], cuts,"&&"+eveto,
225  chain, Samples, nsig);
226 
227 TString muveto ="Sum$("+trackdefs.at(1)+mtc[2]+")>0";
228 
229  sumfile << YieldsCut("has "+tracknames2[1], cuts,"&&"+muveto,
230  chain, Samples, nsig);
231 
232 TString hadveto ="Sum$("+trackdefs.at(3)+mtc[2]+")>0";
233 
234  sumfile << YieldsCut("has "+tracknames2[3], cuts,"&&"+hadveto,
235  chain, Samples, nsig);
236 
237  sumfile << "\\hline \n ";
238 
239 
240  sumfile << YieldsCut("removed by e, mu or had track veto ", cuts,"&&("+eveto+"||"+muveto+"||"+hadveto+")",
241  chain, Samples, nsig);
242 
243 
244 
245  sumfile << " \\hline\\multicolumn{1}{c|}{} ";
246  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
247  sumfile << " & "<<Samples[sam].label;
248  sumfile<< " & $t\\bar{t}$ ($2\\ell$) counts ";
249  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
250  sumfile << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
251  sumfile << "\\\\ \n ";
252 
253  sumfile<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
254 sumfile << "\\\\ \n ";
255  sumfile<< "\\hfill \\break \n";
256 sumfile<< "\\hfill \\break \n";
257 
258  sumfile << "\n\\begin{tabular}{ l | ";
259  for(unsigned sam(0); sam < Samples.size()-nsig; sam++) sumfile << "r";
260  sumfile<<" | r ";
261  for(int sam(0); sam < nsig; sam++) sumfile<<"| r | r ";
262  sumfile<<"}\\hline\\hline\n";
263  sumfile << " \\multicolumn{1}{c|}{${\\cal L} = 10$ fb$^{-1}$} ";
264  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
265  sumfile << " & "<<Samples[sam].label;
266  sumfile<< " & $t\\bar{t}$ ($2\\ell$) counts ";
267  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
268  sumfile << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
269  sumfile << "\\\\ \\hline \n ";
270  sumfile << " \\multicolumn{"<< Samples.size()+1+nsig<<"}{c}{"
271  << "$H_T>500, M_J>300, \\mathrm{MET}>200, m_T>140, n_{\\rm jets}\\geq 7, n_b\\geq 1, n_{\\rm lep}=1$"
272  <<"} \\\\ \\hline\n";
273 
274 
275  sumfile << YieldsCut("$MJ>300, MET>400$", cuts+"&&met>400", "",
276  chain, Samples, nsig);
277  sumfile << "\\hline \n ";
278 
279  //TString eveto ="Sum$("+trackdefs.at(0)+isotypes.at(finaliso.at(0))+"<"+finalcut.at(0)+mtc[2]+")>0";
280 
281  sumfile << YieldsCut("has "+tracknames2[0], cuts+"&&met>400","&&"+eveto,
282  chain, Samples, nsig);
283 
284  //TString muveto ="Sum$("+trackdefs.at(1)+isotypes.at(finaliso.at(1))+"<"+finalcut.at(1)+mtc[2]+")>0";
285 
286  sumfile << YieldsCut("has "+tracknames2[1], cuts+"&&met>400","&&"+muveto,
287  chain, Samples, nsig);
288 
289  //TString hadveto ="Sum$("+trackdefs.at(3)+isotypes.at(finaliso.at(3))+"<"+finalcut.at(3)+mtc[2]+")>0";
290 
291  sumfile << YieldsCut("has "+tracknames2[3], cuts+"&&met>400","&&"+hadveto,
292  chain, Samples, nsig);
293 
294  sumfile << "\\hline \n ";
295 
296 
297  sumfile << YieldsCut("removed by e, mu or had track veto ", cuts+"&&met>400","&&("+eveto+"||"+muveto+"||"+hadveto+")",
298  chain, Samples, nsig);
299 
300  sumfile << " \\hline\\multicolumn{1}{c|}{} ";
301  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
302  sumfile << " & "<<Samples[sam].label;
303  sumfile<< " & $t\\bar{t}$ ($2\\ell$) counts ";
304  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
305  sumfile << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
306  sumfile << "\\\\ \n ";
307 
308  sumfile<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
309 sumfile << "\\\\ \n ";
310 
311 sumfile<< "\\hfill \\break \n";
312 sumfile<< "\\hfill \\break \n";
313 
314 
315 
316 
317 
318  sumfile<<sumfooter.rdbuf();
319  sumfile.close();
320  cout<<"Written "<<sumname<<endl;
321 
322  for(int itrack=0;itrack<4;itrack++){
323  TString name = "txt/"+tracknames.at(itrack)+"_veto_lumi_"+luminosity+".tex";
324  ifstream header("txt/header.tex");
325  ifstream footer("txt/footer.tex");
326  ofstream file(name);
327  file<<header.rdbuf();
328  file << "\n\\begin{tabular}{ l | ";
329  for(unsigned sam(0); sam < Samples.size()-nsig; sam++) file << "r";
330  file<<" | r ";
331  for(int sam(0); sam < nsig; sam++) file<<"| r | r ";
332  file<<"}\\hline\\hline\n";
333  file << " \\multicolumn{1}{c|}{${\\cal L} = 10$ fb$^{-1}$} ";
334  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
335  file << " & "<<Samples[sam].label;
336  file<< " & $t\\bar{t}$ ($2\\ell$) counts ";
337  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
338  file << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
339  file << "\\\\ \\hline \n ";
340 
341 
342  file << " \\multicolumn{"<< Samples.size()+1+nsig<<"}{c}{"
343  << "$H_T>500, M_J>300, \\mathrm{MET}>200, m_T>140, n_{\\rm jets}\\geq 7, n_b\\geq 1, n_{\\rm lep}=1$"
344  <<"} \\\\ \\hline\n";
345 
346 
347 
348 file << YieldsCut("$MJ>300$", cuts, "",
349  chain, Samples, nsig);
350  file << "\\hline \n ";
351  for(unsigned int icut=0;icut<allcut.at(itrack).size(); icut++){
352  TString veto_prompt ="&&Sum$("+trackdefs.at(itrack)+"&&tks_from_w&&"+allcut.at(itrack).at(icut)+mtc[2]+")>0";
353  TString veto_nonprompt ="&&Sum$("+trackdefs.at(itrack)+"&&!tks_from_w&&"+allcut.at(itrack).at(icut)+mtc[2]+")>0";
354 
355  file << YieldsCut("have prompt "+tracknames2.at(itrack)+" "+ allcut.at(itrack).at(icut) + " ", cuts,veto_prompt,
356  chain, Samples, nsig);
357  file << YieldsCut("have fake "+tracknames2.at(itrack)+" "+ allcut.at(itrack).at(icut) + " ", cuts,veto_nonprompt,
358  chain, Samples, nsig);
359  file << "\\hline \n ";
360  }
361 
362  file << " \\hline\\multicolumn{1}{c|}{} ";
363  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
364  file << " & "<<Samples[sam].label;
365  file<< " & $t\\bar{t}$ ($2\\ell$) counts ";
366  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
367  file << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
368  file << "\\\\ \n ";
369 
370  file<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
371 file << "\\\\ \n ";
372  file<< "\\hfill \\break \n";
373 file<< "\\hfill \\break \n";
374 
375  file << "\n\\begin{tabular}{ l | ";
376  for(unsigned sam(0); sam < Samples.size()-nsig; sam++) file << "r";
377  file<<" | r ";
378  for(int sam(0); sam < nsig; sam++) file<<"| r | r ";
379  file<<"}\\hline\\hline\n";
380  file << " \\multicolumn{1}{c|}{${\\cal L} = 10$ fb$^{-1}$} ";
381  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
382  file << " & "<<Samples[sam].label;
383  file<< " & $t\\bar{t}$ ($2\\ell$) counts ";
384  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
385  file << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
386  file << "\\\\ \\hline \n ";
387  file << " \\multicolumn{"<< Samples.size()+1+nsig<<"}{c}{"
388  << "$H_T>500, M_J>300, \\mathrm{MET}>200, m_T>140, n_{\\rm jets}\\geq 7, n_b\\geq 1, n_{\\rm lep}=1$"
389  <<"} \\\\ \\hline\n";
390 
391 
392  file << YieldsCut("$MJ>300, MET>400$", cuts+"&&met>400", "",
393  chain, Samples, nsig);
394  file << "\\hline \n ";
395 
396  for(unsigned int icut=0;icut<allcut.at(itrack).size(); icut++){
397  TString veto_prompt ="&&Sum$("+trackdefs.at(itrack)+"&&tks_from_w&&"+allcut.at(itrack).at(icut)+mtc[2]+")>0";
398  TString veto_nonprompt ="&&Sum$("+trackdefs.at(itrack)+"&&!tks_from_w&&"+allcut.at(itrack).at(icut)+mtc[2]+")>0";
399 
400  file << YieldsCut("have prompt "+tracknames2.at(itrack)+" "+ allcut.at(itrack).at(icut) + " ", cuts+"&&met>400",veto_prompt,
401  chain, Samples, nsig);
402  file << YieldsCut("have fake "+tracknames2.at(itrack)+" "+ allcut.at(itrack).at(icut) + " ", cuts+"&&met>400",veto_nonprompt,
403  chain, Samples, nsig);
404  file << "\\hline \n ";
405  }
406 
407  file << " \\hline\\multicolumn{1}{c|}{} ";
408  for(unsigned sam(0); sam < Samples.size()-nsig; sam++)
409  file << " & "<<Samples[sam].label;
410  file<< " & $t\\bar{t}$ ($2\\ell$) counts ";
411  for(unsigned sam(Samples.size()-nsig); sam < Samples.size(); sam++)
412  file << " & "<<Samples[sam].label<<" effic &"<<Samples[sam].label<<" counts ";//<< " & $Z_{\\rm bi}$ ";
413  file << "\\\\ \n ";
414 
415  file<< "\\hline\\hline\n\\end{tabular}"<<endl<<endl;
416 file << "\\\\ \n ";
417 
418 file<< "\\hfill \\break \n";
419 file<< "\\hfill \\break \n";
420 
421 
422 
423 
424 
425  file<<footer.rdbuf();
426  file.close();
427  cout<<"Written "<<name<<endl;
428  }
429 }
430 
431 void EffErr(float pass, float total, float weight, Double_t &eff, Double_t &ehigh, Double_t &elow)
432 {
433 
434  TH1F * h_pass;
435  h_pass = new TH1F("hist_pass","",1,0,2);
436  TH1F * h_tot;
437  h_tot = new TH1F("hist_tot","",1,0,2);
438  h_pass->SetBinContent(h_pass->FindBin(1.0),pass/weight);
439  h_tot->SetBinContent(h_tot->FindBin(1.0),total/weight);
440 
441  TGraphAsymmErrors g1;
442  g1.Divide(h_pass,h_tot);
443  Int_t bin = 0;
444  Double_t x;
445  g1.GetPoint(bin,x,eff);
446  ehigh=g1.GetErrorYhigh(bin);
447  elow=g1.GetErrorYlow(bin);
448 
449  h_pass->Delete();
450  h_tot->Delete();
451 
452 }
453 
454 
455 TString YieldsCut(TString title, TString event_cuts, TString track_cuts, vector<TChain*> chain, vector<sfeats> Samples, int nsig){
456  TString totCut, Hname = "histo", out, Hname2="histo2";
457  vector<double> yield, error,reg_yield, reg_error, weight;
458  double bkg(0), bkg_err(0), err,err2;
459  int nsam(chain.size());
460  TH1D histo(Hname, "",100, 0, 10000);
461  histo.Sumw2();
462  TH1D histo2(Hname2, "",100, 0, 10000);
463  histo2.Sumw2();
464 
465  for(int sam(0); sam < nsam; sam++){
466 
467  totCut = luminosity+"*weight*("+event_cuts+"&&"+Samples[sam].cut+")";
468  chain[sam]->Project(Hname2, "met", totCut);
469  reg_yield.push_back(histo2.IntegralAndError(0,101,err2));
470  reg_error.push_back(err2);
471  weight.push_back(histo2.Integral()/histo2.GetEntries());
472 
473 
474  totCut = luminosity+"*weight*("+event_cuts+track_cuts+"&&"+Samples[sam].cut+")";
475  chain[sam]->Project(Hname, "met", totCut);
476  yield.push_back(histo.IntegralAndError(0,101,err));
477  error.push_back(err);
478 
479  if(sam<nsam-nsig) {
480  bkg += yield[sam];
481  bkg_err = sqrt(pow(bkg_err,2)+pow(err,2));
482  }
483  //cout<<sam<<": yield "<<Samples[sam].label<<" "<<yield[sam]<<" \t "<<totCut<<endl;
484  }
485 
486  cout<<title<<": B = "<<(RoundNumber(bkg,1)+" +- "+RoundNumber(bkg_err,1));
487  out = title;
488 
489  for(int sam(0); sam < nsam-nsig; sam++){
490  // if(sam%2 == 1 )
491  Double_t ehigh, elow,eff;
492  EffErr(yield[sam],reg_yield[sam],weight[sam],eff,ehigh,elow);
493  if(yield[sam]!=reg_yield[sam]){
494  out += (" \t & $" + RoundNumber(eff,2)+"^{+"+RoundNumber(ehigh,2) + "}_{-"+RoundNumber(elow,2)+"}$") ;
495  }
496  else out+= "\t &";
497  // out += (" \t & " + RoundNumber(yield[sam]/reg_yield[sam],2)+" \\pm "+RoundNumber((yield[sam]/reg_yield[sam])*sqrt(pow(reg_error[sam]/reg_yield[sam],2)+pow(error[sam]/yield[sam],2)),2));
498  // else out+=" \t &";
499  }
500 
501  out += (" \t & $"+RoundNumber(bkg,1))+" \\pm "+RoundNumber(bkg_err,1)+"$";
502 
503  for(int sam(nsam-nsig); sam < nsam; sam++) {
504  // float fracerr(sqrt(pow(bkg_err/bkg,2)+0.3*0.3+0.24*0.24));
505  Double_t ehigh, elow,eff;
506  EffErr(yield[sam],reg_yield[sam],weight[sam],eff,ehigh,elow);
507  if(yield[sam]!=reg_yield[sam]){
508  out += (" \t& $"+ RoundNumber(eff,2)+"^{+"+RoundNumber(ehigh,2) + "}_{-"+RoundNumber(elow,2) +"}$ & \t $"+ RoundNumber(yield[sam],1)+" \\pm "+RoundNumber(error[sam],1)+"$ ");// + "$ \t& " +
509  }
510  else out+= ("\t& & \t $"+ RoundNumber(yield[sam],1)+" \\pm "+RoundNumber(error[sam],1)+"$ ");
511  //RoundNumber(yield[sam],2,bkg));
512  // RoundNumber(RooStats::NumberCountingUtils::BinomialExpZ(yield[sam], bkg, fracerr),2));
513  cout<<", S = "<<RoundNumber(yield[sam],1)+" +- "+RoundNumber(error[sam],1);//<<" with Zbi = ";
514  //cout<<RoundNumber(RooStats::NumberCountingUtils::BinomialExpZ(yield[sam], bkg, fracerr),2);
515  }
516  out += " \\\\ \n";
517  cout<<endl;
518  return out;
519 }
int main()
STL namespace.
TString YieldsCut(TString title, TString event_cuts, TString track_cuts, vector< TChain * > chain, vector< sfeats > Samples, int nsig)
TString RoundNumber(double num, int decimals, double denom=1.)
Definition: utilities.cpp:191
tuple file
Definition: parse_card.py:238
void EffErr(float pass, float total, float weight, float &eff, float &ehigh, float &elow)
TString luminosity