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
17 print 'Please specify the runtype : python tauPOGplot.py <ZTT, ZEE, ZMM, QCD>' 21 print 'You selected', runtype
24 tlabel =
'Z #rightarrow #tau#tau' 25 xlabel =
'gen. tau p_{T}^{vis} (GeV)' 29 xlabel =
'jet p_{T} (GeV)' 30 elif runtype ==
'ZEE':
31 tlabel =
'Z #rightarrow ee' 32 xlabel =
'electron p_{T} (GeV)' 33 elif runtype ==
'ZMM':
34 tlabel =
'Z #rightarrow #mu#mu' 35 xlabel =
'muon p_{T} (GeV)' 41 if not os.path.exists(directory):
42 os.makedirs(directory)
46 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.pdf')
47 canvas.SaveAs(name.replace(
' ',
'').
replace(
'&&',
'')+
'.gif')
51 leg.SetNColumns(ncolumn)
61 def makeCompareVars(tree, var, sel, leglist, nbin, xmin, xmax, xtitle, ytitle, scale, name):
71 for ii, isel
in enumerate(sel):
72 hist = TH1F(
'h_' +
str(ii),
'h_' +
str(ii), nbin, xmin, xmax)
73 hist.GetXaxis().SetTitle(xtitle)
74 hist.GetYaxis().SetTitle(ytitle)
75 hist.GetYaxis().SetNdivisions(507)
76 hist.SetLineColor(col[ii])
77 hist.SetLineWidth(len(sel)+1-ii)
84 tree.Project(hist.GetName(), var, isel)
85 hist.Scale(1./hist.GetEntries())
87 if ymax < hist.GetMaximum():
88 ymax = hist.GetMaximum()
93 leg = TLegend(0.6,0.65,0.91,0.9)
96 for ii, ihist
in enumerate(hists):
97 ihist.SetMaximum(ymax*1.2)
105 if leglist[ii] !=
'None':
106 leg.AddEntry(ihist, leglist[ii],
"l")
109 if leglist[0]!=
'None':
121 print 'number of histograms = ', len(hists)
124 leg = TLegend(0.2,0.7,0.5,0.9)
127 col = [1,2,4,6,8,9,12]
132 for ii, hist
in enumerate(hists):
133 hist.GetYaxis().SetTitle(
'efficiency')
134 hist.SetLineColor(col[ii])
135 hist.SetMarkerColor(col[ii])
137 hist.SetMarkerSize(1)
140 for ip
in range(hist.GetN()):
143 hist.GetPoint(ip, x, y)
163 legname = hist.GetName()
165 leg.AddEntry(hist, legname,
'lep')
169 hist.SetMaximum(ymax*2)
174 tex = TLatex( hists[-1].GetXaxis().GetXmin() + 0.01*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, addon.replace(
'tau_',
''))
177 tex.SetTextSize(0.03)
180 tex2 = TLatex( hists[-1].GetXaxis().GetXmin() + 0.87*(hists[-1].GetXaxis().GetXmax() - hists[-1].GetXaxis().GetXmin()), ymax*2.1, tlabel)
183 tex2.SetTextSize(0.03)
188 save(canvas,
'compare_' + runtype +
'/' + header)
198 if ymax < hist.GetMaximum():
199 ymax = hist.GetMaximum()
202 leg = TLegend(0.6,0.65,0.91,0.9)
205 for ii, ihist
in enumerate(hists):
206 ihist.SetMaximum(ymax*1.2)
208 ihist.SetMarkerSize(0.)
209 ihist.GetXaxis().SetTitle(xtitle)
210 ihist.GetYaxis().SetTitle(ytitle)
217 leg.AddEntry(ihist, ihist.GetName(),
"l")
223 save(c,
'compare_' + runtype +
'/hist_' + name)
228 def makeEffPlotsVars(tree, varx, vary, sel, nbinx, xmin, xmax, nbiny, ymin, ymax, xtitle, ytitle, leglabel = None, header='', addon='', option='pt', marker=20):
230 binning = [20,30,40,50,60,70,80,100,150,200]
235 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(binning)-1,
array(
'd',binning))
236 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(binning)-1,
array(
'd',binning))
238 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, nbinx, xmin, xmax)
239 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, nbinx, xmin, xmax)
241 _hist_ = TH1F(
'h_effp_' + addon,
'h_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
242 _ahist_ = TH1F(
'ah_effp_' + addon,
'ah_effp' + addon, len(vbinning)-1,
array(
'd',vbinning))
245 tree.Draw(varx +
' >> ' + _hist_.GetName(), sel)
246 tree.Draw(varx +
' >> ' + _ahist_.GetName(), sel +
' && ' + vary)
248 g_efficiency = TGraphAsymmErrors()
249 g_efficiency.BayesDivide(_ahist_, _hist_)
250 g_efficiency.GetXaxis().SetTitle(xtitle)
251 g_efficiency.GetYaxis().SetTitle(
'efficiency')
252 g_efficiency.GetYaxis().SetNdivisions(507)
253 g_efficiency.SetLineWidth(3)
254 g_efficiency.SetName(header)
255 g_efficiency.SetMinimum(0.)
256 g_efficiency.GetYaxis().SetTitleOffset(1.3)
257 g_efficiency.SetMarkerStyle(marker)
258 g_efficiency.SetMarkerSize(1)
259 g_efficiency.Draw(
'ap')
263 return copy.deepcopy(g_efficiency)
269 if __name__ ==
'__main__':
273 'againstMuonLoose3':{
'var':
'tau_againstMuonLoose3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonLoose3'},
274 'againstMuonTight3':{
'var':
'tau_againstMuonTight3 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstMuonTight3'},
276 'againstElectronVLooseMVA5':{
'var':
'tau_againstElectronVLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA5'},
277 'againstElectronLooseMVA5':{
'var':
'tau_againstElectronLooseMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA5'},
278 'againstElectronMediumMVA5':{
'var':
'tau_againstElectronMediumMVA5 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA5'},
280 'againstElectronVLooseMVA6':{
'var':
'tau_againstElectronVLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronVLooseMVA6'},
281 'againstElectronLooseMVA6':{
'var':
'tau_againstElectronLooseMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronLooseMVA6'},
282 'againstElectronMediumMVA6':{
'var':
'tau_againstElectronMediumMVA6 > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'againstElectronMediumMVA6'},
284 'byLoosePileupWeightedIsolation3Hits':{
'var':
'tau_byLoosePileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLoosePileupWeightedIsolation3Hits'},
285 'byMediumPileupWeightedIsolation3Hits':{
'var':
'tau_byMediumPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumPileupWeightedIsolation3Hits'},
286 'byTightPileupWeightedIsolation3Hits':{
'var':
'tau_byTightPileupWeightedIsolation3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightPileupWeightedIsolation3Hits'},
288 'byLooseCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseCombinedIsolationDeltaBetaCorr3Hits'},
289 'byMediumCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byMediumCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumCombinedIsolationDeltaBetaCorr3Hits'},
290 'byTightCombinedIsolationDeltaBetaCorr3Hits':{
'var':
'tau_byTightCombinedIsolationDeltaBetaCorr3Hits > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightCombinedIsolationDeltaBetaCorr3Hits'},
292 'byLooseIsolationMVA3oldDMwLT':{
'var':
'tau_byLooseIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVA3oldDMwLT'},
293 'byMediumIsolationMVA3oldDMwLT':{
'var':
'tau_byMediumIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVA3oldDMwLT'},
294 'byTightIsolationMVA3oldDMwLT':{
'var':
'tau_byTightIsolationMVA3oldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVA3oldDMwLT'},
296 'byLooseIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byLooseIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byLooseIsolationMVArun2v1DBoldDMwLT'},
297 'byMediumIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byMediumIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byMediumIsolationMVArun2v1DBoldDMwLT'},
298 'byTightIsolationMVArun2v1DBoldDMwLT':{
'var':
'tau_byTightIsolationMVArun2v1DBoldDMwLT > 0.5 && tau_decayModeFindingOldDMs > 0.5',
'nbin':2,
'min':-0.5,
'max':1.5,
'title':
'byTightIsolationMVArun2v1DBoldDMwLT'},
303 reco_cut =
'tau_pt > 20 && abs(tau_eta) < 2.3' 304 loose_id =
'tau_decayModeFindingOldDMs > 0.5 && tau_byLooseCombinedIsolationDeltaBetaCorr3Hits > 0.5' 310 '7_6_1_v3':{
'file':
'Myroot_7_6_1_v3_' + runtype +
'.root',
'col':3,
'marker':23,
'width':1},
313 for hname, hdict
in sorted(vardict.iteritems()):
317 for rel, rdict
in sorted(sampledict.iteritems()):
319 if rel.find(
'7_6_1')==-1
and (hname.find(
'MVA6')!=-1
or hname.find(
'MVArun2')!=-1):
continue 321 tfile = TFile(rdict[
'file'])
322 tree = tfile.Get(
'per_tau')
327 if hname.find(
'against')!=-1:
329 den_sel = reco_cut +
' && ' + loose_id
331 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']))
342 overlay(hists, hname, hname, hdict[
'title'])
348 'tau_dm':{
'var':
'tau_dm',
'nbin':12,
'min':0.,
'max':12,
'title':
'decay Mode',
'sel':
'1'},
349 'tau_mass_1prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong',
'sel':
'tau_dm==0'},
350 'tau_mass_1prongp0':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 1prong+#pi^{0}',
'sel':
'tau_dm==1'},
351 'tau_mass_2prong':{
'var':
'tau_mass',
'nbin':30,
'min':0.,
'max':2.5,
'title':
'Tau mass, 2prong',
'sel':
'(tau_dm==5 || tau_dm==6)'},
352 '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)'},
353 'pt_resolution_1prong':{
'var':
'(tau_genpt-tau_pt)/(tau_genpt)',
'nbin':30,
'min':-1.,
'max':1.,
'title':
'pT resolution, 1prong',
'sel':
'tau_dm==0'},
354 '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'},
355 '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)'},
356 '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)'},
360 for hname, hdict
in sorted(hvardict.iteritems()):
364 if runtype !=
'ZTT' and hname.find(
'pt_resolution')!=-1:
continue 367 for rel, rdict
in sorted(sampledict.iteritems()):
369 tfile = TFile(rdict[
'file'])
370 tree = tfile.Get(
'per_tau')
372 hist = TH1F(
'h_' + hname +
'_' + rel,
'h_' + hname +
'_' + rel, hdict[
'nbin'], hdict[
'min'], hdict[
'max'])
373 hist.GetYaxis().SetNdivisions(507)
374 hist.SetLineColor(rdict[
'col'])
375 hist.SetLineWidth(rdict[
'width'])
380 tree.Project(hist.GetName(), hdict[
'var'], hdict[
'sel'])
381 hist.Scale(1./hist.GetEntries())
383 hists.append(copy.deepcopy(hist))
385 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)