1 from __future__
import print_function
2 from officialStyle
import officialStyle
3 from array
import array
4 from ROOT
import gROOT, gStyle, TH1F, TH1D, TF1, TFile, TCanvas, TH2F, TLegend, TGraphAsymmErrors, Double, TLatex
19 print(
'Please specify the runtype : python tauPOGplot.py <ZTT, ZEE, ZMM, QCD>')
23 print(
'You selected', runtype)
26 tlabel =
'Z #rightarrow #tau#tau' 27 xlabel =
'gen. tau p_{T}^{vis} (GeV)' 31 xlabel =
'jet p_{T} (GeV)' 32 elif runtype ==
'ZEE':
33 tlabel =
'Z #rightarrow ee' 34 xlabel =
'electron p_{T} (GeV)' 35 elif runtype ==
'ZMM':
36 tlabel =
'Z #rightarrow #mu#mu' 37 xlabel =
'muon p_{T} (GeV)' 43 if not os.path.exists(directory):
44 os.makedirs(directory)
48 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.pdf')
49 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.gif')
53 leg.SetNColumns(ncolumn)
63 def makeCompareVars(tree, var, sel, leglist, nbin, xmin, xmax, xtitle, ytitle, scale, name):
73 for ii, isel
in enumerate(sel):
74 hist = TH1F(
'h_' +
str(ii),
'h_' +
str(ii), nbin, xmin, xmax)
75 hist.GetXaxis().SetTitle(xtitle)
76 hist.GetYaxis().SetTitle(ytitle)
77 hist.GetYaxis().SetNdivisions(507)
78 hist.SetLineColor(col[ii])
79 hist.SetLineWidth(len(sel)+1-ii)
86 tree.Project(hist.GetName(), var, isel)
87 hist.Scale(1./hist.GetEntries())
89 if ymax < hist.GetMaximum():
90 ymax = hist.GetMaximum()
95 leg = TLegend(0.6,0.65,0.91,0.9)
98 for ii, ihist
in enumerate(hists):
99 ihist.SetMaximum(ymax*1.2)
107 if leglist[ii] !=
'None':
108 leg.AddEntry(ihist, leglist[ii],
"l")
111 if leglist[0]!=
'None':
123 print(
'number of histograms = ', len(hists))
126 leg = TLegend(0.2,0.7,0.5,0.9)
129 col = [1,2,4,6,8,9,12]
134 for ii, hist
in enumerate(hists):
135 hist.GetYaxis().SetTitle(
'efficiency')
136 hist.SetLineColor(col[ii])
137 hist.SetMarkerColor(col[ii])
139 hist.SetMarkerSize(1)
142 for ip
in range(hist.GetN()):
145 hist.GetPoint(ip, x, y)
165 legname = hist.GetName()
167 leg.AddEntry(hist, legname,
'lep')
171 hist.SetMaximum(ymax*2)
176 tex = TLatex( hists[-1].GetXaxis().GetXmin() + 0.01*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, addon.replace(
'tau_',
''))
179 tex.SetTextSize(0.03)
182 tex2 = TLatex( hists[-1].GetXaxis().GetXmin() + 0.87*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, tlabel)
185 tex2.SetTextSize(0.03)
190 save(canvas,
'compare_' + runtype +
'/' + header)
200 if ymax < hist.GetMaximum():
201 ymax = hist.GetMaximum()
204 leg = TLegend(0.6,0.65,0.91,0.9)
207 for ii, ihist
in enumerate(hists):
208 ihist.SetMaximum(ymax*1.2)
210 ihist.SetMarkerSize(0.)
211 ihist.GetXaxis().SetTitle(xtitle)
212 ihist.GetYaxis().SetTitle(ytitle)
219 leg.AddEntry(ihist, ihist.GetName(),
"l")
225 save(c,
'compare_' + runtype +
'/hist_' + name)
230 def makeEffPlotsVars(tree, varx, vary, sel, nbinx, xmin, xmax, nbiny, ymin, ymax, xtitle, ytitle, leglabel = None, header='', addon='', option='pt', marker=20):
232 binning = [20,30,40,50,60,70,80,100,150,200]
237 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(binning)-1,
array(
'd',binning))
238 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(binning)-1,
array(
'd',binning))
240 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, nbinx, xmin, xmax)
241 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, nbinx, xmin, xmax)
243 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
244 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
247 tree.Draw(varx +
' >> ' + _hist_.GetName(), sel)
248 tree.Draw(varx +
' >> ' + _ahist_.GetName(), sel +
' && ' + vary)
250 g_efficiency = TGraphAsymmErrors()
251 g_efficiency.BayesDivide(_ahist_, _hist_)
252 g_efficiency.GetXaxis().SetTitle(xtitle)
253 g_efficiency.GetYaxis().SetTitle(
'efficiency')
254 g_efficiency.GetYaxis().SetNdivisions(507)
255 g_efficiency.SetLineWidth(3)
256 g_efficiency.SetName(header)
257 g_efficiency.SetMinimum(0.)
258 g_efficiency.GetYaxis().SetTitleOffset(1.3)
259 g_efficiency.SetMarkerStyle(marker)
260 g_efficiency.SetMarkerSize(1)
261 g_efficiency.Draw(
'ap')
265 return copy.deepcopy(g_efficiency)
271 if __name__ ==
'__main__':
275 'againstMuonLoose3':{
'var':
'tau_againstMuonLoose3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonLoose3'},
276 'againstMuonTight3':{
'var':
'tau_againstMuonTight3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonTight3'},
278 'againstElectronVLooseMVA5':{
'var':
'tau_againstElectronVLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA5'},
279 'againstElectronLooseMVA5':{
'var':
'tau_againstElectronLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA5'},
280 'againstElectronMediumMVA5':{
'var':
'tau_againstElectronMediumMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA5'},
282 'againstElectronVLooseMVA6':{
'var':
'tau_againstElectronVLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA6'},
283 'againstElectronLooseMVA6':{
'var':
'tau_againstElectronLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA6'},
284 'againstElectronMediumMVA6':{
'var':
'tau_againstElectronMediumMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA6'},
286 'byLoosePileupWeightedIsolation3Hits':{
'var':
'tau_byLoosePileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLoosePileupWeightedIsolation3Hits'},
287 'byMediumPileupWeightedIsolation3Hits':{
'var':
'tau_byMediumPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumPileupWeightedIsolation3Hits'},
288 'byTightPileupWeightedIsolation3Hits':{
'var':
'tau_byTightPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightPileupWeightedIsolation3Hits'},
290 'byLooseCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseCombinedIsolationDeltaBetaCorr3Hits'},
291 'byMediumCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byMediumCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumCombinedIsolationDeltaBetaCorr3Hits'},
292 'byTightCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byTightCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightCombinedIsolationDeltaBetaCorr3Hits'},
294 'byLooseIsolationMVA3oldDMwLT':{
'var':
'tau_byLooseIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVA3oldDMwLT'},
295 'byMediumIsolationMVA3oldDMwLT':{
'var':
'tau_byMediumIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVA3oldDMwLT'},
296 'byTightIsolationMVA3oldDMwLT':{
'var':
'tau_byTightIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVA3oldDMwLT'},
298 'byLooseIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byLooseIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVArun2v1DBoldDMwLT'},
299 'byMediumIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byMediumIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVArun2v1DBoldDMwLT'},
300 'byTightIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byTightIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVArun2v1DBoldDMwLT'},
305 reco_cut =
'tau_pt > 20 && abs(tau_eta) < 2.3' 306 loose_id =
'tau_decayModeFindingOldDMs > 0.5 && tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5' 312 '7_6_1_v3':{
'file':
'Myroot_7_6_1_v3_' + runtype +
'.root',
'col':3,
'marker':23,
'width':1},
315 for hname, hdict
in sorted(six.iteritems(vardict)):
319 for rel, rdict
in sorted(six.iteritems(sampledict)):
321 if rel.find(
'7_6_1')==-1
and (hname.find(
'MVA6')!=-1
or hname.find(
'MVArun2')!=-1):
continue 323 tfile = TFile(rdict[
'file'])
324 tree = tfile.Get(
'per_tau')
329 if hname.find(
'against')!=-1:
331 den_sel = reco_cut +
' && ' + loose_id
333 hists.append(
makeEffPlotsVars(tree,
'tau_genpt', num_sel +
'&&' + hdict[
'var'], den_sel, 30, 0, 300, hdict[
'nbin'], hdict[
'min'], hdict[
'max'], xlabel, hdict[
'title'],
'', rel, rel,
'pt', rdict[
'marker']))
344 overlay(hists, hname, hname, hdict[
'title'])
350 'tau_dm':{
'var':
'tau_dm',
'nbin':12,
'min':0.,
'max':12,
'title':
'decay Mode',
'sel':
'1'},
351 'tau_mass_1prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong',
'sel':
'tau_dm==0'},
352 'tau_mass_1prongp0':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong+#pi^{0}',
'sel':
'tau_dm==1'},
353 'tau_mass_2prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 2prong',
'sel':
'(tau_dm==5 || tau_dm==6)'},
354 'tau_mass_3prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 3prong (+#pi^{0})',
'sel':
'(tau_dm==10 || tau_dm==11)'},
355 'pt_resolution_1prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 1prong',
'sel':
'tau_dm==0'},
356 'pt_resolution_1prongp0':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 1prong+#pi^{0}',
'sel':
'tau_dm==1'},
357 'pt_resolution_2prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 2prong',
'sel':
'(tau_dm==5 || tau_dm==6)'},
358 'pt_resolution_3prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 3prong (+#pi^{0})',
'sel':
'(tau_dm==10 || tau_dm==11)'},
362 for hname, hdict
in sorted(six.iteritems(hvardict)):
366 if runtype !=
'ZTT' and hname.find(
'pt_resolution')!=-1:
continue 369 for rel, rdict
in sorted(six.iteritems(sampledict)):
371 tfile = TFile(rdict[
'file'])
372 tree = tfile.Get(
'per_tau')
374 hist = TH1F(
'h_' + hname +
'_' + rel,
'h_' + hname +
'_' + rel, hdict[
'nbin'], hdict[
'min'], hdict[
'max'])
375 hist.GetYaxis().SetNdivisions(507)
376 hist.SetLineColor(rdict[
'col'])
377 hist.SetLineWidth(rdict[
'width'])
382 tree.Project(hist.GetName(), hdict[
'var'], hdict[
'sel'])
383 hist.Scale(1./hist.GetEntries())
385 hists.append(copy.deepcopy(hist))
387 hoverlay(hists, hdict[
'title'],
'a.u.', hname)
def replace(string, replacements)
def LegendSettings(leg, ncolumn)
S & print(S &os, JobReport::InputFile const &f)
def overlay(hists, ytitle, header, addon)
def hoverlay(hists, xtitle, ytitle, name)
def makeEffPlotsVars(tree, varx, vary, sel, nbinx, xmin, xmax, nbiny, ymin, ymax, xtitle, ytitle, leglabel=None, header='', addon='', option='pt', marker=20)
def makeCompareVars(tree, var, sel, leglist, nbin, xmin, xmax, xtitle, ytitle, scale, name)