24 TH1::SetDefaultSumw2(
true);
30 TColor
ucsb_blue(1000, 1/255.,57/255.,166/255.);
31 TColor
ucsb_gold(1001, 255/255.,200/255.,47/255);
32 TColor
penn_red(1002, 149/255.,0/255.,26/255.);
33 TColor
uf_orange(1003, 255/255.,74/255.,0/255.);
34 TColor
uo_green(1004, 0/255.,79/255.,39/255.);
35 TColor
tcu_purple(1005, 72/255.,42/255.,100/255.);
37 TColor
sig_teal(1007, 96/255.,159/255.,128/255.);
38 TColor
sig_gold(1008, 215/255.,162/255.,50/255.);
39 TColor
seal_brown(1010, 89/255.,38/255.,11/255.);
41 TString folder=
"archive/15-03-17/skims/";
44 s_tt.push_back(folder+
"*_TTJet*");
45 vector<TString> s_wjets;
46 s_wjets.push_back(folder+
"*_WJets*");
47 vector<TString> s_single;
48 s_single.push_back(folder+
"*_T*channel*");
49 vector<TString> s_ttv;
50 s_ttv.push_back(folder+
"*TTW*");
51 s_ttv.push_back(folder+
"*TTZ*");
52 vector<TString> s_other;
53 s_other.push_back(folder+
"*QCD_HT*");
54 s_other.push_back(folder+
"*_ZJet*");
55 s_other.push_back(folder+
"*DY*");
56 s_other.push_back(folder+
"*WH_HToBB*");
57 vector<TString> s_t1t;
58 s_t1t.push_back(folder+
"*T1tttt*1500_*PU20*");
59 vector<TString> s_t1tc;
60 s_t1tc.push_back(folder+
"*T1tttt*1200_*PU20*");
63 vector<TChain *> chain;
64 vector<sfeats> Samples;
65 Samples.push_back(
sfeats(s_other,
"Other", 1001));
66 Samples.push_back(
sfeats(s_ttv,
"ttV", 1002));
67 Samples.push_back(
sfeats(s_single,
"Single top", 1005));
68 Samples.push_back(
sfeats(s_wjets,
"W + jets", 1004));
69 Samples.push_back(
sfeats(s_tt,
"t#bar{t}, 2 l", 1006,1,
"((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)>=2"));
70 Samples.push_back(
sfeats(s_tt,
"t#bar{t}, 1 l", 1000,1,
"((mc_type&0x0F00)/0x100+(mc_type&0x000F)-(mc_type&0x00F0)/0x10)<=1"));
71 Samples.push_back(
sfeats(s_t1t,
"T1tttt(1500,100)", 2));
72 Samples.push_back(
sfeats(s_t1tc,
"T1tttt(1200,800)", 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]);
80 vector<int> mj_sam_lep;
81 mj_sam_lep.push_back(0);
82 mj_sam_lep.push_back(1);
83 mj_sam_lep.push_back(2);
84 mj_sam_lep.push_back(3);
85 mj_sam_lep.push_back(4);
86 mj_sam_lep.push_back(5);
87 mj_sam_lep.push_back(6);
88 mj_sam_lep.push_back(7);
91 float mj_binning[] = {0,200,300,400,500,600,1500};
94 vars.push_back(
hfeats(
"mj",mj_nbins,mj_binning, mj_sam_lep,
"M_{J} (GeV)",
95 "ht>500&&met>250&&nbm>=2&&njets>=6&&mt<150&&(nmus+nels)==1",600));
96 vars.push_back(
hfeats(
"mj",mj_nbins,mj_binning, mj_sam_lep,
"M_{J} (GeV)",
97 "ht>500&&met>250&&nbm>=2&&njets>=6&&mt>=150&&(nmus+nels)==1",600));
98 vars.push_back(
hfeats(
"mj",mj_nbins,mj_binning, mj_sam_lep,
"M_{J} (GeV)",
99 "ht>500&&met>250&&nbm==1&&njets>=6&&mt<150&&(nmus+nels)==1",600));
100 vars.push_back(
hfeats(
"mj",mj_nbins,mj_binning, mj_sam_lep,
"M_{J} (GeV)",
101 "ht>500&&met>250&&nbm==1&&njets>=6&&mt>=150&&(nmus+nels)==1",600));
103 vector<int> bkg_ind(vars.size(), -1);
107 TString cuts(
"ht>750&&met>250&&nbm>=2&&njets>=6&&(nmus+nels)==1");
110 cuts =
"ht>750&&met>250&&nbl>=2&&njets>=4&&mt>150&&(nmus+nels)==1";
119 float minLog = 0.04, maxLog = 10;
120 double legX = 0.6, legY = 0.87, legSingle = 0.055;
121 double legW = 0.12, legH = legSingle*vars[0].samples.size();
122 TLegend
leg(legX, legY-legH, legX+legW, legY);
123 leg.SetTextSize(0.052); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
124 leg.SetTextFont(132);
126 TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
127 vector< vector<TH1D*> > histo[2];
128 vector<TH1D*> varhisto;
129 vector<float> nentries;
130 TString hname, pname, variable, leghisto, totCut, title, ytitle;
131 for(
unsigned var(0); var<vars.size(); var++){
134 title = vars[var].cuts;
if(title==
"1") title =
"";
135 title.ReplaceAll(
"nvmus==1&&nmus==1&&nvels==0",
"1 #mu");
136 title.ReplaceAll(
"(nmus+nels)",
"n_{lep}");
137 title.ReplaceAll(
"nvmus10==0&&nvels10==0",
"0 leptons");
138 title.ReplaceAll(
"(Max$(els_pt*els_sigid*(els_miniso_tr10<0.1))>20||Max$(mus_pt*mus_sigid*(mus_miniso_tr10<0.4))>20)&&(nmus+nels)",
"n_{lep}"); title.ReplaceAll(
"njets30",
"n_{jets}^{30}");
139 title.ReplaceAll(
"els_pt",
"p^{e}_{T}");title.ReplaceAll(
"mus_pt",
"p^{#mu}_{T}");
140 title.ReplaceAll(
"mus_reliso",
"RelIso"); title.ReplaceAll(
"els_reliso",
"RelIso");
141 title.ReplaceAll(
"mus_miniso_tr15",
"MiniIso"); title.ReplaceAll(
"els_miniso_tr15",
"MiniIso");
142 title.ReplaceAll(
"njets",
"n_{jets}");title.ReplaceAll(
"abs(lep_id)==13&&",
"");
143 title.ReplaceAll(
">=",
" #geq "); title.ReplaceAll(
">",
" > "); title.ReplaceAll(
"&&",
", ");
144 title.ReplaceAll(
"<",
" < ");
145 title.ReplaceAll(
"met",
"MET"); title.ReplaceAll(
"ht",
"H_{T}"); title.ReplaceAll(
"mt",
"m_{T}");
146 title.ReplaceAll(
"nleps==1",
"1 lepton"); title.ReplaceAll(
"nbm",
"n_{b}"); title.ReplaceAll(
"==",
" = ");
147 title.ReplaceAll(
"nbl[1]",
"n_{b,l}");
148 for(
unsigned his(0); his < 2; his++){
150 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
151 hname =
"histo"; hname += var; hname += his; hname += sam;
152 varhisto.push_back(
new TH1D(hname, title, vars[var].
nbins, vars[var].binning));
154 histo[his].push_back(varhisto);
160 variable = vars[var].varname;
161 float maxhisto(-999);
162 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
163 int isam = vars[var].samples[sam];
164 bool isSig = Samples[isam].isSig;
165 totCut = Samples[isam].factor+
"*"+luminosity+
"*weight*("+vars[var].cuts+
"&&"+Samples[isam].cut+
")";
167 histo[0][var][sam]->Sumw2();
168 chain[isam]->Project(histo[0][var][sam]->GetName(), variable, totCut);
169 histo[0][var][sam]->SetBinContent(vars[var].
nbins,
170 histo[0][var][sam]->GetBinContent(vars[var].nbins)+
171 histo[0][var][sam]->GetBinContent(vars[var].nbins+1));
172 histo[0][var][sam]->SetBinError(vars[var].nbins,
173 sqrt(pow(histo[0][var][sam]->GetBinError(vars[var].nbins),2)+
174 pow(histo[0][var][sam]->GetBinError(vars[var].nbins+1),2)));
175 nentries.push_back(histo[0][var][sam]->Integral(1,vars[var].nbins));
176 histo[0][var][sam]->SetXTitle(vars[var].title);
177 ytitle =
"Entries for "+luminosity+
" fb^{-1}";
178 if(vars[var].unit!=
"") {
180 float binwidth((vars[var].maxx-vars[var].minx)/static_cast<float>(vars[var].nbins));
182 if(binwidth<1) digits = 1;
183 ytitle += (
"/("+
RoundNumber(binwidth,digits) +
" "+vars[var].unit+
")");
185 histo[0][var][sam]->SetYTitle(ytitle);
187 for(
int bin(0); bin<=histo[0][var][sam]->GetNbinsX()+1; bin++){
188 float val(histo[0][var][sam]->GetBinContent(bin)), errval(histo[0][var][sam]->GetBinError(bin));
189 float thisbinW(histo[0][var][sam]->GetBinWidth(bin));
190 histo[0][var][sam]->SetBinContent(bin, val*binW/thisbinW);
191 histo[0][var][sam]->SetBinError(bin, errval*binW/thisbinW);
192 histo[1][var][sam]->SetBinContent(bin, histo[0][var][sam]->GetBinContent(bin));
196 for(
int bsam(sam-1); bsam >= 0; bsam--){
197 histo[0][var][sam]->Add(histo[0][var][bsam]);
204 histo[0][var][sam]->SetFillColor(Samples[isam].color);
205 histo[0][var][sam]->SetFillStyle(1001);
206 histo[0][var][sam]->SetLineColor(1);
207 histo[0][var][sam]->SetLineWidth(1);
209 histo[0][var][sam]->SetLineColor(Samples[isam].color);
210 histo[0][var][sam]->SetLineStyle(Samples[isam].style);
211 histo[0][var][sam]->SetLineWidth(3);
213 if(maxhisto < histo[0][var][sam]->GetMaximum()) maxhisto = histo[0][var][sam]->GetMaximum();
215 int firstplotted(-1);
216 for(
int sam(vars[var].samples.size()-1); sam >= 0; sam--){
217 int isam = vars[var].samples[sam];
218 leghisto = Samples[isam].label+
" [N = " +
RoundNumber(nentries[sam],0) +
"]";
219 leg.AddEntry(histo[0][var][sam], leghisto);
220 bool isSig = Samples[isam].isSig;
222 if(firstplotted < 0) {
223 histo[0][var][sam]->Draw(
"hist");
225 }
else histo[0][var][sam]->Draw(
"hist same");
228 for(
int sam(vars[var].samples.size()-1); sam >= 0; sam--){
229 int isam = vars[var].samples[sam];
230 bool isSig = Samples[isam].isSig;
231 if(isSig) histo[0][var][sam]->Draw(
"hist same");
233 legH = legSingle*vars[var].samples.size(); leg.SetY1NDC(legY-legH);
235 if(histo[0][var][firstplotted]->GetMinimum() > minLog) histo[0][var][firstplotted]->SetMinimum(minLog);
236 histo[0][var][firstplotted]->SetMinimum(minLog);
237 histo[0][var][firstplotted]->SetMaximum(maxhisto*maxLog);
238 if(variable==
"mt" && var==vars.size()-1) {
239 histo[0][var][firstplotted]->SetMinimum(0.2);
240 histo[0][var][firstplotted]->SetMaximum(maxhisto*2);
242 if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*maxLog);
244 pname =
"plots/1d/log_lumi_"+vars[var].tag+
".eps";
246 histo[0][var][firstplotted]->SetMinimum(0);
247 histo[0][var][firstplotted]->SetMaximum(maxhisto*1.1);
249 pname =
"plots/1d/lumi_"+vars[var].tag+
".eps";
253 leg.Clear(); maxhisto = -999;
254 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
255 int isam = vars[var].samples[sam];
256 histo[1][var][sam]->SetLineColor(Samples[isam].color);
257 histo[1][var][sam]->SetLineStyle(Samples[isam].style);
258 histo[1][var][sam]->SetLineWidth(3);
259 if(nentries[sam]) histo[1][var][sam]->Scale(100./nentries[sam]);
260 if(maxhisto < histo[1][var][sam]->GetMaximum()) maxhisto = histo[1][var][sam]->GetMaximum();
262 histo[1][var][sam]->SetXTitle(vars[var].title);
263 histo[1][var][sam]->SetYTitle(
"Entries (%)");
264 histo[1][var][sam]->Draw();
265 }
else histo[1][var][sam]->Draw(
"same");
266 leghisto = Samples[isam].label+
" [#mu = ";
268 leghisto +=
RoundNumber(histo[1][var][sam]->GetMean(),digits) +
"]";
269 leg.AddEntry(histo[1][var][sam], leghisto);
272 if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, maxhisto*1.1);
273 histo[1][var][0]->SetMaximum(maxhisto*1.1);
275 pname =
"plots/1d/shapes_"+vars[var].tag+
".eps";
277 histo[1][var][0]->SetMaximum(maxhisto*maxLog);
279 pname =
"plots/1d/log_shapes_"+vars[var].tag+
".eps";
285 for(
unsigned var(0); var<vars.size(); var++){
286 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
287 int isam = vars[var].samples[sam];
288 bool isSig = Samples[isam].isSig;
290 histo[0][var][isam]->Divide(histo[0][var][bkg_ind[var]]);
291 histo[0][var][isam]->SetYTitle(
"S/B");
292 histo[0][var][isam]->SetMarkerStyle(20);
293 histo[0][var][isam]->SetMarkerColor(2);
294 histo[0][var][isam]->Draw();
295 histo[0][var][isam]->SetMinimum(0);
296 histo[0][var][isam]->SetMaximum(3.3);
297 line.DrawLine(0,1,mj_binning[mj_nbins],1);
299 pname =
"plots/1d/sbratio_"+Samples[isam].label+vars[var].tag+
".eps";
300 pname.ReplaceAll(
"(",
""); pname.ReplaceAll(
")",
""); pname.ReplaceAll(
",",
"");
312 float chi2, pvalue, average[2];
314 int hden1(3), hnum2(0), hden2(2);
315 if(!do_2b1b) {hden1=0; hnum2=3;}
317 leg.SetY1NDC(legY-legSingle*2);
319 leg.SetX2NDC(0.17+legW);
322 calc_chi2_diff(histo[0][1][bkg_ind[1]], histo[0][hden1][bkg_ind[hden1]], chi2, ndof, pvalue, average);
324 histo[0][1][bkg_ind[1]]->SetLineColor(4);
325 histo[0][1][bkg_ind[1]]->SetMarkerColor(4);
326 histo[0][1][bkg_ind[1]]->SetMarkerStyle(20);
327 histo[0][1][bkg_ind[1]]->SetMaximum(histo[0][1][bkg_ind[1]]->GetMaximum()*1.3);
329 histo[0][1][bkg_ind[1]]->SetMaximum(2.5);
330 histo[0][1][bkg_ind[1]]->SetTitle(
"n_{b} #geq 2 to n_{b} = 1 ratio");
331 leglabel = (
"m_{T} #geq 150 (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
333 histo[0][1][bkg_ind[1]]->SetMaximum(0.25);
334 histo[0][1][bkg_ind[1]]->SetTitle(
"High-m_{T} to low-m_{T} ratio");
335 leglabel = (
"n_{b} #geq 2 (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
337 histo[0][1][bkg_ind[1]]->SetYTitle(
"R");
340 leglabel += (
", p = "+
RoundNumber(pvalue*100,1)+
"%)");
341 leg.AddEntry(histo[0][1][bkg_ind[1]], leglabel,
"lm");
343 histo[0][1][bkg_ind[1]]->Divide(histo[0][hden1][bkg_ind[hden1]]);
344 histo[0][1][bkg_ind[1]]->Draw(
"");
345 line.SetLineColor(4);
346 line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
349 calc_chi2_diff(histo[0][hnum2][bkg_ind[hnum2]], histo[0][hden2][bkg_ind[hden2]], chi2, ndof, pvalue, average);
350 histo[0][hnum2][bkg_ind[hnum2]]->Divide(histo[0][hden2][bkg_ind[hden2]]);
351 histo[0][hnum2][bkg_ind[hnum2]]->SetLineColor(2);
352 histo[0][hnum2][bkg_ind[hnum2]]->SetMarkerColor(2);
353 histo[0][hnum2][bkg_ind[hnum2]]->SetMarkerStyle(20);
354 histo[0][hnum2][bkg_ind[hnum2]]->Draw(
"same");
356 if(do_2b1b) leglabel = (
"m_{T} < 150 (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
357 else leglabel = (
"n_{b} = 1 (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
359 leglabel += (
", p = "+
RoundNumber(pvalue*100,1)+
"%)");
360 leg.AddEntry(histo[0][hnum2][bkg_ind[hnum2]], leglabel,
"lm");
362 line.SetLineColor(2);
363 line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
365 pname =
"plots/1d/ratio_"+vars[1].tag+(do_2b1b?
"_2b1b.eps":
"_mt.eps");
368 calc_chi2_diff(histo[0][1][bkg_ind[1]], histo[0][hnum2][bkg_ind[hnum2]], chi2, ndof, pvalue, average);
369 histo[0][1][bkg_ind[1]]->Divide(histo[0][hnum2][bkg_ind[hnum2]]);
370 histo[0][1][bkg_ind[1]]->Draw(
"");
371 histo[0][1][bkg_ind[1]]->SetMaximum(3);
373 histo[0][1][bkg_ind[1]]->SetTitle(
"Double ratio high-m_{T} to low-m_{T}");
374 histo[0][1][bkg_ind[1]]->SetYTitle(
"R_{high}/R_{low}");
375 leglabel = (
"R_{high}/R_{low} (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
377 histo[0][1][bkg_ind[1]]->SetTitle(
"Double ratio n_{b} #geq 2 to n_{b} = 1");
378 histo[0][1][bkg_ind[1]]->SetYTitle(
"R_{2b}/R_{1b}");
379 leglabel = (
"R_{2b}/R_{1b} (#chi^{2}/n = "+
RoundNumber(chi2,1)+
"/");
382 line.SetLineColor(4);
384 leglabel += (
", p = "+
RoundNumber(pvalue*100,1)+
"%)");
385 leg.AddEntry(histo[0][1][bkg_ind[1]], leglabel,
"lm");
388 line.DrawLine(0,average[0]/average[1],mj_binning[mj_nbins],average[0]/average[1]);
389 pname =
"plots/1d/doubleratio_"+vars[1].tag+(do_2b1b?
"_2b1b.eps":
"_mt.eps");
394 for(
unsigned his(0); his < 2; his++){
395 for(
unsigned var(0); var<vars.size(); var++){
396 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++)
397 if(histo[his][var][sam]) histo[his][var][sam]->Delete();
TColor tcu_purple(2005, 52/255., 42/255., 123/255.)
TColor ucsb_gold(2001, 255/255., 200/255., 47/255)
TColor uf_orange(2003, 255/255., 74/255., 0/255.)
TColor tar_heel_blue(2006, 86/255., 160/255., 211/255.)
TColor ucsb_blue(2000, 1/255., 57/255., 166/255.)
TString RoundNumber(double num, int decimals, double denom=1.)
TColor sig_gold(2008, 215/255., 162/255., 50/255.)
TColor uo_green(2004, 0/255., 79/255., 39/255.)
TColor penn_red(2002, 149/255., 0/255., 26/255.)
void calc_chi2_diff(TH1D *histo1, TH1D *histo2, float &chi2, int &ndof, float &pvalue, float *average)
TColor seal_brown(2010, 89/255., 38/255., 11/255.)
TColor sig_teal(2007, 96/255., 159/255., 128/255.)