1 from officialStyle
import officialStyle
2 from array
import array
3 from ROOT
import gROOT, gStyle, TH1F, TH1D, TF1, TFile, TCanvas, TH2F, TLegend, TGraphAsymmErrors, Double, TLatex
18 print 'Please specify the runtype : python tauPOGplot.py <ZTT, ZEE, ZMM, QCD>' 22 print 'You selected', runtype
25 tlabel =
'Z #rightarrow #tau#tau' 26 xlabel =
'gen. tau p_{T}^{vis} (GeV)' 30 xlabel =
'jet p_{T} (GeV)' 31 elif runtype ==
'ZEE':
32 tlabel =
'Z #rightarrow ee' 33 xlabel =
'electron p_{T} (GeV)' 34 elif runtype ==
'ZMM':
35 tlabel =
'Z #rightarrow #mu#mu' 36 xlabel =
'muon p_{T} (GeV)' 42 if not os.path.exists(directory):
43 os.makedirs(directory)
47 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.pdf')
48 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.gif')
52 leg.SetNColumns(ncolumn)
62 def makeCompareVars(tree, var, sel, leglist, nbin, xmin, xmax, xtitle, ytitle, scale, name):
72 for ii, isel
in enumerate(sel):
73 hist = TH1F(
'h_' +
str(ii),
'h_' +
str(ii), nbin, xmin, xmax)
74 hist.GetXaxis().SetTitle(xtitle)
75 hist.GetYaxis().SetTitle(ytitle)
76 hist.GetYaxis().SetNdivisions(507)
77 hist.SetLineColor(col[ii])
78 hist.SetLineWidth(len(sel)+1-ii)
85 tree.Project(hist.GetName(), var, isel)
86 hist.Scale(1./hist.GetEntries())
88 if ymax < hist.GetMaximum():
89 ymax = hist.GetMaximum()
94 leg = TLegend(0.6,0.65,0.91,0.9)
97 for ii, ihist
in enumerate(hists):
98 ihist.SetMaximum(ymax*1.2)
106 if leglist[ii] !=
'None':
107 leg.AddEntry(ihist, leglist[ii],
"l")
110 if leglist[0]!=
'None':
122 print 'number of histograms = ', len(hists)
125 leg = TLegend(0.2,0.7,0.5,0.9)
128 col = [1,2,4,6,8,9,12]
133 for ii, hist
in enumerate(hists):
134 hist.GetYaxis().SetTitle(
'efficiency')
135 hist.SetLineColor(col[ii])
136 hist.SetMarkerColor(col[ii])
138 hist.SetMarkerSize(1)
141 for ip
in range(hist.GetN()):
144 hist.GetPoint(ip, x, y)
164 legname = hist.GetName()
166 leg.AddEntry(hist, legname,
'lep')
170 hist.SetMaximum(ymax*2)
175 tex = TLatex( hists[-1].GetXaxis().GetXmin() + 0.01*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, addon.replace(
'tau_',
''))
178 tex.SetTextSize(0.03)
181 tex2 = TLatex( hists[-1].GetXaxis().GetXmin() + 0.87*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, tlabel)
184 tex2.SetTextSize(0.03)
189 save(canvas,
'compare_' + runtype +
'/' + header)
199 if ymax < hist.GetMaximum():
200 ymax = hist.GetMaximum()
203 leg = TLegend(0.6,0.65,0.91,0.9)
206 for ii, ihist
in enumerate(hists):
207 ihist.SetMaximum(ymax*1.2)
209 ihist.SetMarkerSize(0.)
210 ihist.GetXaxis().SetTitle(xtitle)
211 ihist.GetYaxis().SetTitle(ytitle)
218 leg.AddEntry(ihist, ihist.GetName(),
"l")
224 save(c,
'compare_' + runtype +
'/hist_' + name)
229 def makeEffPlotsVars(tree, varx, vary, sel, nbinx, xmin, xmax, nbiny, ymin, ymax, xtitle, ytitle, leglabel = None, header='', addon='', option='pt', marker=20):
231 binning = [20,30,40,50,60,70,80,100,150,200]
236 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(binning)-1,
array(
'd',binning))
237 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(binning)-1,
array(
'd',binning))
239 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, nbinx, xmin, xmax)
240 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, nbinx, xmin, xmax)
242 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
243 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
246 tree.Draw(varx +
' >> ' + _hist_.GetName(), sel)
247 tree.Draw(varx +
' >> ' + _ahist_.GetName(), sel +
' && ' + vary)
249 g_efficiency = TGraphAsymmErrors()
250 g_efficiency.BayesDivide(_ahist_, _hist_)
251 g_efficiency.GetXaxis().SetTitle(xtitle)
252 g_efficiency.GetYaxis().SetTitle(
'efficiency')
253 g_efficiency.GetYaxis().SetNdivisions(507)
254 g_efficiency.SetLineWidth(3)
255 g_efficiency.SetName(header)
256 g_efficiency.SetMinimum(0.)
257 g_efficiency.GetYaxis().SetTitleOffset(1.3)
258 g_efficiency.SetMarkerStyle(marker)
259 g_efficiency.SetMarkerSize(1)
260 g_efficiency.Draw(
'ap')
264 return copy.deepcopy(g_efficiency)
270 if __name__ ==
'__main__':
274 'againstMuonLoose3':{
'var':
'tau_againstMuonLoose3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonLoose3'},
275 'againstMuonTight3':{
'var':
'tau_againstMuonTight3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonTight3'},
277 'againstElectronVLooseMVA5':{
'var':
'tau_againstElectronVLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA5'},
278 'againstElectronLooseMVA5':{
'var':
'tau_againstElectronLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA5'},
279 'againstElectronMediumMVA5':{
'var':
'tau_againstElectronMediumMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA5'},
281 'againstElectronVLooseMVA6':{
'var':
'tau_againstElectronVLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA6'},
282 'againstElectronLooseMVA6':{
'var':
'tau_againstElectronLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA6'},
283 'againstElectronMediumMVA6':{
'var':
'tau_againstElectronMediumMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA6'},
285 'byLoosePileupWeightedIsolation3Hits':{
'var':
'tau_byLoosePileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLoosePileupWeightedIsolation3Hits'},
286 'byMediumPileupWeightedIsolation3Hits':{
'var':
'tau_byMediumPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumPileupWeightedIsolation3Hits'},
287 'byTightPileupWeightedIsolation3Hits':{
'var':
'tau_byTightPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightPileupWeightedIsolation3Hits'},
289 'byLooseCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseCombinedIsolationDeltaBetaCorr3Hits'},
290 'byMediumCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byMediumCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumCombinedIsolationDeltaBetaCorr3Hits'},
291 'byTightCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byTightCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightCombinedIsolationDeltaBetaCorr3Hits'},
293 'byLooseIsolationMVA3oldDMwLT':{
'var':
'tau_byLooseIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVA3oldDMwLT'},
294 'byMediumIsolationMVA3oldDMwLT':{
'var':
'tau_byMediumIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVA3oldDMwLT'},
295 'byTightIsolationMVA3oldDMwLT':{
'var':
'tau_byTightIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVA3oldDMwLT'},
297 'byLooseIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byLooseIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVArun2v1DBoldDMwLT'},
298 'byMediumIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byMediumIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVArun2v1DBoldDMwLT'},
299 'byTightIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byTightIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVArun2v1DBoldDMwLT'},
304 reco_cut =
'tau_pt > 20 && abs(tau_eta) < 2.3' 305 loose_id =
'tau_decayModeFindingOldDMs > 0.5 && tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5' 311 '7_6_1_v3':{
'file':
'Myroot_7_6_1_v3_' + runtype +
'.root',
'col':3,
'marker':23,
'width':1},
314 for hname, hdict
in sorted(six.iteritems(vardict)):
318 for rel, rdict
in sorted(six.iteritems(sampledict)):
320 if rel.find(
'7_6_1')==-1
and (hname.find(
'MVA6')!=-1
or hname.find(
'MVArun2')!=-1):
continue 322 tfile = TFile(rdict[
'file'])
323 tree = tfile.Get(
'per_tau')
328 if hname.find(
'against')!=-1:
330 den_sel = reco_cut +
' && ' + loose_id
332 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']))
343 overlay(hists, hname, hname, hdict[
'title'])
349 'tau_dm':{
'var':
'tau_dm',
'nbin':12,
'min':0.,
'max':12,
'title':
'decay Mode',
'sel':
'1'},
350 'tau_mass_1prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong',
'sel':
'tau_dm==0'},
351 'tau_mass_1prongp0':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong+#pi^{0}',
'sel':
'tau_dm==1'},
352 'tau_mass_2prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 2prong',
'sel':
'(tau_dm==5 || tau_dm==6)'},
353 '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)'},
354 'pt_resolution_1prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 1prong',
'sel':
'tau_dm==0'},
355 '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'},
356 '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)'},
357 '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)'},
361 for hname, hdict
in sorted(six.iteritems(hvardict)):
365 if runtype !=
'ZTT' and hname.find(
'pt_resolution')!=-1:
continue 368 for rel, rdict
in sorted(six.iteritems(sampledict)):
370 tfile = TFile(rdict[
'file'])
371 tree = tfile.Get(
'per_tau')
373 hist = TH1F(
'h_' + hname +
'_' + rel,
'h_' + hname +
'_' + rel, hdict[
'nbin'], hdict[
'min'], hdict[
'max'])
374 hist.GetYaxis().SetNdivisions(507)
375 hist.SetLineColor(rdict[
'col'])
376 hist.SetLineWidth(rdict[
'width'])
381 tree.Project(hist.GetName(), hdict[
'var'], hdict[
'sel'])
382 hist.Scale(1./hist.GetEntries())
384 hists.append(copy.deepcopy(hist))
386 hoverlay(hists, hdict[
'title'],
'a.u.', hname)
def replace(string, replacements)
def LegendSettings(leg, ncolumn)
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)