1 from __future__
import print_function
2 from __future__
import absolute_import
3 from builtins
import range
4 from .officialStyle
import officialStyle
5 from array
import array
6 from ROOT
import gROOT, gStyle, TH1F, TH1D, TF1, TFile, TCanvas, TH2F, TLegend, TGraphAsymmErrors, Double, TLatex
20 print(
'Please specify the runtype : python3 tauPOGplot.py <ZTT, ZEE, ZMM, QCD>')
24 print(
'You selected', runtype)
27 tlabel =
'Z #rightarrow #tau#tau'
28 xlabel =
'gen. tau p_{T}^{vis} (GeV)'
32 xlabel =
'jet p_{T} (GeV)'
33 elif runtype ==
'ZEE':
34 tlabel =
'Z #rightarrow ee'
35 xlabel =
'electron p_{T} (GeV)'
36 elif runtype ==
'ZMM':
37 tlabel =
'Z #rightarrow #mu#mu'
38 xlabel =
'muon p_{T} (GeV)'
44 if not os.path.exists(directory):
45 os.makedirs(directory)
49 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.pdf')
50 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.gif')
54 leg.SetNColumns(ncolumn)
64 def makeCompareVars(tree, var, sel, leglist, nbin, xmin, xmax, xtitle, ytitle, scale, name):
74 for ii, isel
in enumerate(sel):
75 hist = TH1F(
'h_' +
str(ii),
'h_' +
str(ii), nbin, xmin, xmax)
76 hist.GetXaxis().SetTitle(xtitle)
77 hist.GetYaxis().SetTitle(ytitle)
78 hist.GetYaxis().SetNdivisions(507)
79 hist.SetLineColor(col[ii])
80 hist.SetLineWidth(len(sel)+1-ii)
87 tree.Project(hist.GetName(), var, isel)
88 hist.Scale(1./hist.GetEntries())
90 if ymax < hist.GetMaximum():
91 ymax = hist.GetMaximum()
96 leg = TLegend(0.6,0.65,0.91,0.9)
99 for ii, ihist
in enumerate(hists):
100 ihist.SetMaximum(ymax*1.2)
108 if leglist[ii] !=
'None':
109 leg.AddEntry(ihist, leglist[ii],
"l")
112 if leglist[0]!=
'None':
124 print(
'number of histograms = ', len(hists))
127 leg = TLegend(0.2,0.7,0.5,0.9)
130 col = [1,2,4,6,8,9,12]
135 for ii, hist
in enumerate(hists):
136 hist.GetYaxis().SetTitle(
'efficiency')
137 hist.SetLineColor(col[ii])
138 hist.SetMarkerColor(col[ii])
140 hist.SetMarkerSize(1)
143 for ip
in range(hist.GetN()):
146 hist.GetPoint(ip, x, y)
166 legname = hist.GetName()
168 leg.AddEntry(hist, legname,
'lep')
172 hist.SetMaximum(ymax*2)
177 tex = TLatex( hists[-1].GetXaxis().GetXmin() + 0.01*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, addon.replace(
'tau_',
''))
180 tex.SetTextSize(0.03)
183 tex2 = TLatex( hists[-1].GetXaxis().GetXmin() + 0.87*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, tlabel)
186 tex2.SetTextSize(0.03)
191 save(canvas,
'compare_' + runtype +
'/' + header)
201 if ymax < hist.GetMaximum():
202 ymax = hist.GetMaximum()
205 leg = TLegend(0.6,0.65,0.91,0.9)
208 for ii, ihist
in enumerate(hists):
209 ihist.SetMaximum(ymax*1.2)
211 ihist.SetMarkerSize(0.)
212 ihist.GetXaxis().SetTitle(xtitle)
213 ihist.GetYaxis().SetTitle(ytitle)
220 leg.AddEntry(ihist, ihist.GetName(),
"l")
226 save(c,
'compare_' + runtype +
'/hist_' + name)
231 def makeEffPlotsVars(tree, varx, vary, sel, nbinx, xmin, xmax, nbiny, ymin, ymax, xtitle, ytitle, leglabel = None, header='', addon='', option='pt', marker=20):
233 binning = [20,30,40,50,60,70,80,100,150,200]
238 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(binning)-1,
array(
'd',binning))
239 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(binning)-1,
array(
'd',binning))
241 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, nbinx, xmin, xmax)
242 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, nbinx, xmin, xmax)
244 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
245 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
248 tree.Draw(varx +
' >> ' + _hist_.GetName(), sel)
249 tree.Draw(varx +
' >> ' + _ahist_.GetName(), sel +
' && ' + vary)
251 g_efficiency = TGraphAsymmErrors()
252 g_efficiency.BayesDivide(_ahist_, _hist_)
253 g_efficiency.GetXaxis().SetTitle(xtitle)
254 g_efficiency.GetYaxis().SetTitle(
'efficiency')
255 g_efficiency.GetYaxis().SetNdivisions(507)
256 g_efficiency.SetLineWidth(3)
257 g_efficiency.SetName(header)
258 g_efficiency.SetMinimum(0.)
259 g_efficiency.GetYaxis().SetTitleOffset(1.3)
260 g_efficiency.SetMarkerStyle(marker)
261 g_efficiency.SetMarkerSize(1)
262 g_efficiency.Draw(
'ap')
266 return copy.deepcopy(g_efficiency)
272 if __name__ ==
'__main__':
276 'againstMuonLoose3':{
'var':
'tau_againstMuonLoose3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonLoose3'},
277 'againstMuonTight3':{
'var':
'tau_againstMuonTight3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonTight3'},
279 'againstElectronVLooseMVA5':{
'var':
'tau_againstElectronVLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA5'},
280 'againstElectronLooseMVA5':{
'var':
'tau_againstElectronLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA5'},
281 'againstElectronMediumMVA5':{
'var':
'tau_againstElectronMediumMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA5'},
283 'againstElectronVLooseMVA6':{
'var':
'tau_againstElectronVLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA6'},
284 'againstElectronLooseMVA6':{
'var':
'tau_againstElectronLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA6'},
285 'againstElectronMediumMVA6':{
'var':
'tau_againstElectronMediumMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA6'},
287 'byLoosePileupWeightedIsolation3Hits':{
'var':
'tau_byLoosePileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLoosePileupWeightedIsolation3Hits'},
288 'byMediumPileupWeightedIsolation3Hits':{
'var':
'tau_byMediumPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumPileupWeightedIsolation3Hits'},
289 'byTightPileupWeightedIsolation3Hits':{
'var':
'tau_byTightPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightPileupWeightedIsolation3Hits'},
291 'byLooseCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseCombinedIsolationDeltaBetaCorr3Hits'},
292 'byMediumCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byMediumCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumCombinedIsolationDeltaBetaCorr3Hits'},
293 'byTightCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byTightCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightCombinedIsolationDeltaBetaCorr3Hits'},
295 'byLooseIsolationMVA3oldDMwLT':{
'var':
'tau_byLooseIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVA3oldDMwLT'},
296 'byMediumIsolationMVA3oldDMwLT':{
'var':
'tau_byMediumIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVA3oldDMwLT'},
297 'byTightIsolationMVA3oldDMwLT':{
'var':
'tau_byTightIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVA3oldDMwLT'},
299 'byLooseIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byLooseIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVArun2v1DBoldDMwLT'},
300 'byMediumIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byMediumIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVArun2v1DBoldDMwLT'},
301 'byTightIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byTightIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVArun2v1DBoldDMwLT'},
306 reco_cut =
'tau_pt > 20 && abs(tau_eta) < 2.3'
307 loose_id =
'tau_decayModeFindingOldDMs > 0.5 && tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5'
313 '7_6_1_v3':{
'file':
'Myroot_7_6_1_v3_' + runtype +
'.root',
'col':3,
'marker':23,
'width':1},
316 for hname, hdict
in sorted(vardict.items()):
320 for rel, rdict
in sorted(sampledict.items()):
322 if rel.find(
'7_6_1')==-1
and (hname.find(
'MVA6')!=-1
or hname.find(
'MVArun2')!=-1):
continue
324 tfile = TFile(rdict[
'file'])
325 tree = tfile.Get(
'per_tau')
330 if hname.find(
'against')!=-1:
332 den_sel = reco_cut +
' && ' + loose_id
334 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']))
345 overlay(hists, hname, hname, hdict[
'title'])
351 'tau_dm':{
'var':
'tau_dm',
'nbin':12,
'min':0.,
'max':12,
'title':
'decay Mode',
'sel':
'1'},
352 'tau_mass_1prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong',
'sel':
'tau_dm==0'},
353 'tau_mass_1prongp0':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong+#pi^{0}',
'sel':
'tau_dm==1'},
354 'tau_mass_2prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 2prong',
'sel':
'(tau_dm==5 || tau_dm==6)'},
355 '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)'},
356 'pt_resolution_1prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 1prong',
'sel':
'tau_dm==0'},
357 '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'},
358 '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)'},
359 '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)'},
363 for hname, hdict
in sorted(hvardict.items()):
367 if runtype !=
'ZTT' and hname.find(
'pt_resolution')!=-1:
continue
370 for rel, rdict
in sorted(sampledict.items()):
372 tfile = TFile(rdict[
'file'])
373 tree = tfile.Get(
'per_tau')
375 hist = TH1F(
'h_' + hname +
'_' + rel,
'h_' + hname +
'_' + rel, hdict[
'nbin'], hdict[
'min'], hdict[
'max'])
376 hist.GetYaxis().SetNdivisions(507)
377 hist.SetLineColor(rdict[
'col'])
378 hist.SetLineWidth(rdict[
'width'])
383 tree.Project(hist.GetName(), hdict[
'var'], hdict[
'sel'])
384 hist.Scale(1./hist.GetEntries())
386 hists.append(copy.deepcopy(hist))
388 hoverlay(hists, hdict[
'title'],
'a.u.', hname)
const uint16_t range(const Frame &aFrame)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)