13 #include "TGraphAsymmErrors.h" 14 #include "RooStats/NumberCountingUtils.h" 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);
36 TString folder=
"/cms7r0/heller/code/susy_cfa/out/skim/";
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*");
58 vector<TChain *> chain;
59 vector<sfeats> Samples;
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"));
69 Samples.push_back(
sfeats(s_t1t,
"T1tttt NC", 2));
72 Samples.push_back(
sfeats(s_t1tc,
"T1tttt C", 2,2));
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]);
83 TString cuts(
"(nmus+nels)==1&&ht>500&&met>200&&nbm>=1&&njets>=7&&mt>140&&mj>300");
88 TString os(
"((tks_id*lep_charge)>0)");
89 TString os_had(
"((tks_id*lep_charge)<0)");
92 TString notp(
"&&(!tks_is_primary)");
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)");
105 TString mtc[3] = {
"&&tks_mt<80",
"&&tks_mt<90",
"&&tks_mt<100"};
107 vector<TString> isotypes;
108 vector<TString> isonames;
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)");
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)");
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)");
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)");
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");
133 vector<int> eliso,muiso,hadiso;
134 vector<TString> elcut,mucut,hadcut;
135 vector< vector<int> > alliso;
136 vector< vector<TString> > allcut;
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");
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");
148 hadcut.push_back(
"1==1");
166 allcut.push_back(elcut); allcut.push_back(mucut); allcut.push_back(hadcut); allcut.push_back(hadcut);
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");
174 vector<TString> tracknames;
175 tracknames.push_back(
"els");
176 tracknames.push_back(
"mus");
177 tracknames.push_back(
"had");
178 tracknames.push_back(
"had2");
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");
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";
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";
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 ";
209 sumfile <<
"\\\\ \\hline \n ";
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";
218 sumfile <<
YieldsCut(
"$MJ>300$", cuts,
"",
219 chain, Samples, nsig);
220 sumfile <<
"\\hline \n ";
222 TString eveto =
"Sum$("+trackdefs.at(0)+mtc[2]+
")>0";
224 sumfile <<
YieldsCut(
"has "+tracknames2[0], cuts,
"&&"+eveto,
225 chain, Samples, nsig);
227 TString muveto =
"Sum$("+trackdefs.at(1)+mtc[2]+
")>0";
229 sumfile <<
YieldsCut(
"has "+tracknames2[1], cuts,
"&&"+muveto,
230 chain, Samples, nsig);
232 TString hadveto =
"Sum$("+trackdefs.at(3)+mtc[2]+
")>0";
234 sumfile <<
YieldsCut(
"has "+tracknames2[3], cuts,
"&&"+hadveto,
235 chain, Samples, nsig);
237 sumfile <<
"\\hline \n ";
240 sumfile <<
YieldsCut(
"removed by e, mu or had track veto ", cuts,
"&&("+eveto+
"||"+muveto+
"||"+hadveto+
")",
241 chain, Samples, nsig);
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 ";
251 sumfile <<
"\\\\ \n ";
253 sumfile<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
254 sumfile <<
"\\\\ \n ";
255 sumfile<<
"\\hfill \\break \n";
256 sumfile<<
"\\hfill \\break \n";
258 sumfile <<
"\n\\begin{tabular}{ l | ";
259 for(
unsigned sam(0); sam < Samples.size()-nsig; sam++) 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 ";
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";
275 sumfile <<
YieldsCut(
"$MJ>300, MET>400$", cuts+
"&&met>400",
"",
276 chain, Samples, nsig);
277 sumfile <<
"\\hline \n ";
281 sumfile <<
YieldsCut(
"has "+tracknames2[0], cuts+
"&&met>400",
"&&"+eveto,
282 chain, Samples, nsig);
286 sumfile <<
YieldsCut(
"has "+tracknames2[1], cuts+
"&&met>400",
"&&"+muveto,
287 chain, Samples, nsig);
291 sumfile <<
YieldsCut(
"has "+tracknames2[3], cuts+
"&&met>400",
"&&"+hadveto,
292 chain, Samples, nsig);
294 sumfile <<
"\\hline \n ";
297 sumfile <<
YieldsCut(
"removed by e, mu or had track veto ", cuts+
"&&met>400",
"&&("+eveto+
"||"+muveto+
"||"+hadveto+
")",
298 chain, Samples, nsig);
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 ";
306 sumfile <<
"\\\\ \n ";
308 sumfile<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
309 sumfile <<
"\\\\ \n ";
311 sumfile<<
"\\hfill \\break \n";
312 sumfile<<
"\\hfill \\break \n";
318 sumfile<<sumfooter.rdbuf();
320 cout<<
"Written "<<sumname<<endl;
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");
327 file<<header.rdbuf();
328 file <<
"\n\\begin{tabular}{ l | ";
329 for(
unsigned sam(0); sam < Samples.size()-nsig; sam++) 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 ";
339 file <<
"\\\\ \\hline \n ";
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";
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";
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 ";
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 ";
370 file<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
372 file<<
"\\hfill \\break \n";
373 file<<
"\\hfill \\break \n";
375 file <<
"\n\\begin{tabular}{ l | ";
376 for(
unsigned sam(0); sam < Samples.size()-nsig; sam++) 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 ";
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";
392 file <<
YieldsCut(
"$MJ>300, MET>400$", cuts+
"&&met>400",
"",
393 chain, Samples, nsig);
394 file <<
"\\hline \n ";
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";
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 ";
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 ";
415 file<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
418 file<<
"\\hfill \\break \n";
419 file<<
"\\hfill \\break \n";
425 file<<footer.rdbuf();
427 cout<<
"Written "<<name<<endl;
431 void EffErr(
float pass,
float total,
float weight, Double_t &eff, Double_t &ehigh, Double_t &elow)
435 h_pass =
new TH1F(
"hist_pass",
"",1,0,2);
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);
441 TGraphAsymmErrors g1;
442 g1.Divide(h_pass,h_tot);
445 g1.GetPoint(bin,x,eff);
446 ehigh=g1.GetErrorYhigh(bin);
447 elow=g1.GetErrorYlow(bin);
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);
462 TH1D histo2(Hname2,
"",100, 0, 10000);
465 for(
int sam(0); sam < nsam; sam++){
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());
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);
481 bkg_err = sqrt(pow(bkg_err,2)+pow(err,2));
489 for(
int sam(0); sam < nsam-nsig; sam++){
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]){
503 for(
int sam(nsam-nsig); sam < nsam; sam++) {
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]){
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.)
void EffErr(float pass, float total, float weight, float &eff, float &ehigh, float &elow)