19 #include "TPaveText.h" 22 #include "TGraphAsymmErrors.h" 23 #include "TEfficiency.h" 38 Double_t
errorFun(Double_t *x, Double_t *par) {
39 double value(0.5*par[0]*(1. + TMath::Erf( (x[0] - par[1]) / (sqrt(2.)*par[2]) )));
43 void PlotTurnOn(TChain *
data, TString var,
int nbins,
double minx,
double maxx, TString xtitle,
44 TString den, TString
num, TString title=
"", TString ytitle=
"",
float minfit=-1.,
bool isData=
true);
45 TString
Efficiency(TChain *
data, TString den, TString
num,
float &effic,
float &errup,
float &errdown);
50 gStyle->SetPadTickY(0);
52 TString folder(
"/cms2r0/babymaker/babies/2015_09_28/skim_json/");
54 TChain c_htmht(
"tree"); c_htmht.Add(folder+
"*HTMHT*root");
55 TChain c_jetht(
"tree"); c_jetht.Add(folder+
"*JetHT*root");
56 TChain c_met(
"tree"); c_met.Add(folder+
"*MET*root");
57 TChain c_mu(
"tree"); c_mu.Add(folder+
"*SingleMuon*");
58 TChain c_el(
"tree"); c_el.Add(folder+
"*SingleElectron*");
59 TChain c_lep(
"tree"); c_lep.Add(folder+
"singlelep/*Single*");
60 TChain c_all(
"tree"); c_all.Add(folder+
"alldata/*root");
61 TChain c_had(
"tree"); c_had.Add(folder+
"hadronic/*root");
62 TChain c_jetht_rpv(
"tree");
63 c_jetht_rpv.Add(
"/homes/cawest/links/JetHT_Run2015C_25ns-05Oct2015-v1/*root");
64 c_jetht_rpv.Add(
"/homes/cawest/links/JetHT_Run2015D-05Oct2015-v1/*root");
65 c_jetht_rpv.Add(
"/homes/cawest/links/JetHT_Run2015D-PromptReco-v4/*root");
66 TChain c_mu_rpv(
"tree");
67 c_mu_rpv.Add(
"/homes/cawest/links/SingleMuon_Run2015C-23Sep2015-v1/*root");
68 c_mu_rpv.Add(
"/homes/cawest/links/SingleMuon_Run2015D-05Oct2015-v1/*root");
69 c_mu_rpv.Add(
"/homes/cawest/links/SingleMuon_Run2015D-PromptReco-v4/*root");
72 float lmin(500), lmax(2000);
73 int lbins(static_cast<int>((lmax-lmin)/25));
74 PlotTurnOn(&c_mu_rpv,
"ht", lbins,lmin,lmax,
"H_{T}",
75 "(trig[20]&&nmus==1&&mus_pt[0]>35)",
"trig[12]",
"HLT_IsoMu27 && p_{T,#mu}>35 GeV",
"PFHT800",700);
76 PlotTurnOn(&c_jetht_rpv,
"ht", lbins,lmin,lmax,
"H_{T}",
77 "(trig[11])",
"trig[12]",
"PFHT450",
"PFHT800",800);
81 float lmin(25), lmax(300);
82 int lbins(static_cast<int>((lmax-lmin)/12.5));
84 lmin = 10; lmax = 80; lbins =
static_cast<int>((lmax-lmin)/2.5);
85 PlotTurnOn(&c_htmht,
"Max$(mus_pt*(mus_sigid&&mus_miniso<0.2))-0.1", lbins,lmin,lmax,
"#mu_{medium} p_{T}",
86 "(trig[0])&&met>150",
"trig[4]",
"HT350_MET100, MET > 150",
"Mu15_HT350");
87 PlotTurnOn(&c_htmht,
"Max$(mus_pt*(mus_sigid&&mus_miniso<0.2))-0.1", lbins,lmin,lmax,
"#mu_{medium} p_{T}",
88 "(trig[0])&&met>150",
"trig[17]",
"HT350_MET100, MET > 150",
"IsoMu18");
90 PlotTurnOn(&c_htmht,
"Max$(els_pt*(els_sigid&&els_miniso<0.1))-0.1", lbins,lmin,lmax,
"e_{medium} p_{T}",
91 "(trig[0])&&met>150",
"trig[8]",
"HT350_MET100, MET > 150",
"Ele15_HT350");
92 PlotTurnOn(&c_htmht,
"Max$(els_pt*(els_sigid&&els_miniso<0.1))-0.1", lbins,lmin,lmax,
"e_{medium} p_{T}",
93 "(trig[0])&&met>150",
"trig[23]",
"HT350_MET100, MET > 150",
"Ele23_WPLoose");
95 float htmin(175), htmax(850);
96 int htbins(static_cast<int>((htmax-htmin)/12.5));
97 htmin = 175; htmax = 850; htbins =
static_cast<int>((htmax-htmin)/12.5);
98 PlotTurnOn(&c_met,
"ht", htbins,htmin,htmax,
"H_{T}",
99 "trig[14]&&nvleps>=1",
"trig[0]",
"MET170, n_{l} #geq 1",
"HT350_MET100", 300);
100 htmin = 100; htmax = 850; htbins =
static_cast<int>((htmax-htmin)/25);
101 PlotTurnOn(&c_met,
"ht", htbins,htmin,htmax,
"H_{T}",
102 "(trig[13])&&(nmus)>=1&&onmaxmu>15",
"trig[1]",
"MET120_Mu5, n_{#mu} #geq 1",
103 "Mu15_HT350_MET50", 200);
105 float metmin(0), metmax(460);
106 int metbins(static_cast<int>((metmax-metmin)/20));
107 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
108 "(trig[8])&&njets_ra2>=4&&ht_ra2>450&&ht_ra2<750",
"trig[5]",
109 "Ele15_HT350, n_{j} #geq 4, 450 < H_{T} < 750",
"Ele15_HT350_MET50");
110 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
111 "(trig[8])&&njets_ra2>=4&&ht_ra2>750",
"trig[5]",
112 "Ele15_HT350, n_{j} #geq 4, H_{T} > 750",
"Ele15_HT350_MET50");
113 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
114 "(trig[8])&&njets_ra2>=4&&ht_ra2>450",
"trig[5]",
115 "Ele15_HT350, n_{j} #geq 4, H_{T} > 450",
"Ele15_HT350_MET50");
120 float htmin(175), htmax(850);
121 int htbins(static_cast<int>((htmax-htmin)/12.5));
122 htmin = 175; htmax = 850; htbins =
static_cast<int>((htmax-htmin)/12.5);
123 PlotTurnOn(&c_met,
"ht", htbins,htmin,htmax,
"H_{T}",
124 "trig[14]&&nvleps==0",
"trig[0]",
"MET170, no leptons",
"HT350_MET100", 300);
125 htmin = 100; htmax = 850; htbins =
static_cast<int>((htmax-htmin)/25);
126 PlotTurnOn(&c_met,
"ht", htbins,htmin,htmax,
"H_{T}",
127 "(trig[13])&&(nmus)>=1&&onmaxmu>15",
"trig[1]",
"MET120_Mu5, n_{#mu} #geq 1",
128 "Mu15_HT350_MET50", 200);
130 htmin = 575; htmax = 1450; htbins =
static_cast<int>((htmax-htmin)/25);
131 PlotTurnOn(&c_jetht,
"ht", htbins,htmin,htmax,
"H_{T}",
132 "trig[11]&&nvleps==0",
"trig[12]",
"HT475, no leptons",
"HT800");
133 htmin = 375; htmax = 1250; htbins =
static_cast<int>((htmax-htmin)/25);
134 PlotTurnOn(&c_el,
"ht", htbins,htmin,htmax,
"H_{T}",
135 "(trig[5])",
"trig[6]",
"Ele15_HT350_MET50",
"Ele15_HT600", 550);
136 PlotTurnOn(&c_el,
"ht", htbins,htmin,htmax,
"H_{T}",
137 "(trig[23])&&nels>=1&&onmaxel>15",
"trig[6]",
"Ele23",
"Ele15_HT600", 550);
139 htmin = 175; htmax = 850; htbins =
static_cast<int>((htmax-htmin)/12.5);
140 PlotTurnOn(&c_met,
"ht_hlt", htbins,htmin,htmax,
"H_{T}",
141 "trig[14]&&nvleps==0",
"trig[0]",
"MET170, no leptons",
"HT350_MET100", 300);
142 PlotTurnOn(&c_met,
"ht_hlt", htbins,htmin,htmax,
"H_{T}",
143 "(trig[13])&&(nmus)>=1&&onmaxmu>15",
"trig[1]",
"MET120_Mu5, n_{#mu} #geq 1",
144 "Mu15_HT350_MET50", 300);
146 htmin = 575; htmax = 1450; htbins =
static_cast<int>((htmax-htmin)/25);
147 PlotTurnOn(&c_jetht,
"ht_hlt", htbins,htmin,htmax,
"H_{T}",
148 "trig[11]&&nvleps==0",
"trig[12]",
"HT475, no leptons",
"HT800");
149 htmin = 375; htmax = 1250; htbins =
static_cast<int>((htmax-htmin)/25);
150 PlotTurnOn(&c_el,
"ht_hlt", htbins,htmin,htmax,
"H_{T}",
151 "(trig[5])",
"trig[6]",
"Ele15_HT350_MET50",
"Ele15_HT600", 550);
152 PlotTurnOn(&c_el,
"ht_hlt", htbins,htmin,htmax,
"H_{T}",
153 "(trig[23])&&nels>=1&&onmaxel>15",
"trig[6]",
"Ele23",
"Ele15_HT600", 550);
155 float metmin(0), metmax(460);
156 int metbins(static_cast<int>((metmax-metmin)/20));
157 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
158 "(trig[8])&&njets_ra2>=4&&ht_ra2>450&&ht_ra2<750",
"trig[5]",
159 "Ele15_HT350, n_{j} #geq 4, 450 < H_{T} < 750",
"Ele15_HT350_MET50");
160 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
161 "(trig[8])&&njets_ra2>=4&&ht_ra2>750",
"trig[5]",
162 "Ele15_HT350, n_{j} #geq 4, H_{T} > 750",
"Ele15_HT350_MET50");
163 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
164 "(trig[8])&&njets_ra2>=4&&ht_ra2>450",
"trig[5]",
165 "Ele15_HT350, n_{j} #geq 4, H_{T} > 450",
"Ele15_HT350_MET50");
166 PlotTurnOn(&c_el,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
167 "(trig[8])&&njets_ra2>=4&&ht_ra2>450",
"trig[0]",
168 "Ele15_HT350, n_{j} #geq 4, H_{T} > 450",
"HT350_MET100");
169 PlotTurnOn(&c_mu,
"met", metbins,metmin,metmax,
"E_{T}^{miss}",
170 "(trig[4])&&njets_ra2>=4&&ht_ra2>450",
"trig[0]",
171 "Mu15_HT350, n_{j} #geq 4, H_{T} > 450",
"HT350_MET100");
173 PlotTurnOn(&c_el,
"mht_ra2", metbins,metmin,metmax,
"H_{T}^{miss}",
174 "(trig[8])&&njets_ra2>=4&&ht_ra2>450",
"trig[0]",
175 "Ele15_HT350, n_{j} #geq 4, H_{T} > 450",
"HT350_MET100");
176 PlotTurnOn(&c_el,
"mht_ra2", metbins,metmin,metmax,
"H_{T}^{miss}",
177 "(trig[8])&&njets_ra2>=4&&ht_ra2>450&&mht_ra2/met>0.5&&mht_ra2/met<2",
"trig[0]",
178 "Ele15_HT350, n_{j} #geq 4, H_{T} > 450",
"HT350_MET100");
186 TString den, TString
num, TString title, TString ytitle,
float minfit,
bool isData){
187 styles style(
"HLTStyle"); gStyle->SetPadTickY(0);
188 bool dofit(minfit>=-1);
192 TString hname, totCut, pname;
194 hname =
"den"; totCut = den;
195 histo[0] =
new TH1D(hname,
"", nbins, minx, maxx);
196 data->Project(hname, var, totCut);
198 hname =
"num"; totCut =
"("+den+
")&&("+num+
")";
199 histo[1] =
new TH1D(hname,
"", nbins, minx, maxx);
200 data->Project(hname, var, totCut);
203 for(
unsigned his(0); his<2; his++)
204 histo[his]->SetBinContent(nbins, histo[his]->GetBinContent(nbins)+histo[his]->GetBinContent(nbins+1));
206 TGraphAsymmErrors heff(histo[1], histo[0],
"cp");
208 heff.SetMarkerStyle(20); heff.SetMarkerSize(0.9);
209 heff.SetMarkerColor(1); heff.SetLineColor(1);
211 TString epsi(
"#scale[1.3]{#font[122]{e}}");
214 float hscaled(0.3), maxeff(1.42);
215 float hfactor(hscaled/histo[1]->GetMaximum()), hmax(histo[1]->GetMaximum());
216 float axismax(hmax*maxeff/hscaled);
217 histo[1]->Scale(hfactor);
219 histo[1]->SetFillColor(kBlue-9);
220 histo[1]->SetLineStyle(0);
222 histo[1]->GetXaxis()->SetTitle(
"Offline "+xtitle+
" [GeV]");
223 histo[1]->GetYaxis()->SetTitle(epsi+
" ["+ytitle+
"]");
224 histo[1]->GetYaxis()->SetTitle(
"Efficiency ["+ytitle+
"]");
225 histo[1]->GetYaxis()->SetRangeUser(0,maxeff);
226 histo[1]->GetYaxis()->CenterTitle(
true);
229 TLine line; line.SetLineStyle(3);
230 line.DrawLine(minx, 1, maxx, 1);
232 histo[0]->Scale(hfactor);
233 histo[0]->SetLineColor(kBlue+2);
234 histo[0]->SetLineStyle(2);
235 histo[0]->SetLineWidth(2);
236 histo[0]->Draw(
"same");
240 if(minfit>0) {pname +=
"_min"; pname += minfit; }
241 if(isData) pname +=
"_data";
244 pname.ReplaceAll(
"_json_pass",
"");
248 if(minfit<0 && dofit) minfit = minx;
249 TF1 *fitCurve =
new TF1(
"fitCurve",
errorFun,minx,maxx,3);
250 Double_t params[] = {0.99,minx+(maxx-minx)/4.,50., 50.};
252 fitCurve->SetParameters(params);
253 fitCurve->SetParNames(
"#epsilon",
"#mu",
"#sigma");
254 fitCurve->SetLineColor(2);
255 fitCurve->SetLineWidth(2);
256 if(dofit) heff.Fit(
"fitCurve",
"QEM+",
"",minfit, maxx);
259 histo[1]->Draw(
"axis same");
261 float binw((maxx-minx)/static_cast<float>(nbins));
262 int digits((binw-floor(binw))>0?1:0);
264 TString ntitle(
"Events/("+
RoundNumber(maxx-minx,digits,nbins)+
" GeV)");
265 TGaxis *axis =
new TGaxis(maxx,0, maxx, maxeff,0,axismax,508,
"+L");
266 axis->SetLineColor(kBlue+2);
267 axis->SetTextColor(kBlue+2); axis->SetLabelColor(kBlue+2);
268 axis->SetTextFont(style.
nFont); axis->SetLabelFont(style.
nFont);
270 if(axismax>=1000) axis->SetTitleOffset(style.
yTitleOffset+0.34);
272 axis->SetTitle(ntitle); axis->CenterTitle(
true);
276 float effic, errup, errdown;
277 float mu(fitCurve->GetParameter(1)), sigma(fitCurve->GetParameter(2));
278 float rgev(mu>200?10:5);
279 float var_plateau_f(floor((mu+3*sigma+5)/rgev)*rgev);
280 if(!dofit) var_plateau_f = fabs(minfit);
281 TString den_plateau(den), var_plateau(
RoundNumber(var_plateau_f, 0));
282 den_plateau += (
"&&"+var+
">"+var_plateau);
283 Efficiency(data, den_plateau, num, effic, errup, errdown);
286 float p98(fitCurve->GetParameter(1)+2.05*fitCurve->GetParameter(2));
287 float eplateau(fitCurve->GetParError(0)*100);
288 if(eplateau<0.1 && dofit) cout<<
"Error on plateau "<<eplateau<<
"%"<<endl;
294 TString fitpar(epsi+
"("+xtitle+
" > "+var_plateau+
" GeV) = "+
RoundNumber(effic*100,1)+
"^{+"+
RoundNumber(errup*100,1)+
296 TLatex label; label.SetTextSize(0.042);
297 label.SetTextAlign(33);
298 float range(maxx-minx);
299 float x2(maxx-0.04*range), y2(maxeff-0.07), ysingle(0.1);
300 label.DrawLatex(x2, y2,
"Denom: #font[52]{"+title+
"}");
301 label.DrawLatex(x2, y2-ysingle,fitpar);
302 fitpar =
"98% of plateau at "+
RoundNumber(p98,0)+
" GeV";
303 if(dofit) label.DrawLatex(x2, y2-2.3*ysingle,fitpar);
306 label.SetNDC(); label.SetTextAlign(11); label.SetTextSize(0.045);
307 if(isData) label.DrawLatex(0.13, 0.93,
"#font[61]{CMS} #scale[0.8]{#font[52]{Preliminary}}");
308 else label.DrawLatex(0.13, 0.93,
"#font[61]{CMS} #scale[0.8]{#font[52]{Simulation}}");
310 label.SetTextAlign(31);
312 if(
do_rpv) label.DrawLatex(0.85, 0.93,
"2.69 fb^{-1} (13 TeV)");
313 else label.DrawLatex(0.85, 0.93,
"116 pb^{-1} (13 TeV)");
315 else label.DrawLatex(0.85, 0.93,
"Spring15 t#bar{t}");
319 for(
unsigned his(0); his<2; his++)
320 histo[his]->Delete();
324 TString
Efficiency(TChain *
data, TString den, TString
num,
float &effic,
float &errup,
float &errdown){
326 TString hname, totCut, pname;
328 hname =
"eden"; totCut = den;
329 histo[0] =
new TH1D(hname,
"", 1, 0, 1);
330 float denom(data->GetEntries(totCut));
331 histo[0]->SetBinContent(1,denom);
333 hname =
"enum"; totCut =
"("+den+
")&&("+num+
")";
334 histo[1] =
new TH1D(hname,
"", 1, 0, 1);
335 float numer(data->GetEntries(totCut));
336 histo[1]->SetBinContent(1,numer);
338 TGraphAsymmErrors heff(histo[1], histo[0],
"cp");
342 errup = heff.GetErrorYhigh(0); errdown = heff.GetErrorYlow(0);
345 den.ReplaceAll(
"&&json",
"");
347 <<
"-"<<
RoundNumber(errdown*100,1)<<
" for num "<<num<<
" and "<<den<<
" with "<<denom<<
" entries"<<endl;
348 else cout<<
"Denominator is zero"<<endl;
353 for(
unsigned his(0); his<2; his++)
354 histo[his]->Delete();
Double_t errorFun(Double_t *x, Double_t *par)
TString format_tag(TString tag)
TString RoundNumber(double num, int decimals, double denom=1.)
TString Efficiency(TChain *data, TString den, TString num, float &effic, float &errup, float &errdown)
void PlotTurnOn(TChain *data, TString var, int nbins, double minx, double maxx, TString xtitle, TString den, TString num, TString title="", TString ytitle="", float minfit=-1., bool isData=true)