def main(infile,outdir,mvas=""): ## initialize ROOT style and set-up the html helper setStyle() hth = HtmlHelper(outdir) hth.header().addobj( HtmlTag("link") ).set("rel","stylesheet").set("type","text/css").set("href","../res/style.css") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../../res/jquery.js").txt(" ") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../res/style.js").txt(" ") hth.navbar().cell( HtmlTag("a") ).firstChild().txt("..").set("href","../?C=M;O=D") hth.navbar().cell( HtmlTag("a") ).firstChild().txt("kinematics").set("href","./") kh = plot_kin(infile,hth) ih,rh = plot_jet_id(infile,hth,variables_to_plot=[ ("jetPt","jetEta","nvtx"), ("dR2Mean","dRMean","beta","betaStar","dZ"), ## "dR2Mean", tuple(v for v in mvas.split(',') if v != ""), ] ) ## done: create images and html hth.dump() save_rocs(rh,outdir) ### reweightX = [ kh.reweight.GetBinLowEdge(i) for i in range(1,kh.reweight.GetNbinsX())] ### reweightY = [ kh.reweight.GetBinContent(i) for i in range(1,kh.reweight.GetNbinsX())] ### print reweightX ### print reweightY print kh.reweight_f.GetExpFormula("p")
def main(infile, outdir, mvas=""): ## initialize ROOT style and set-up the html helper setStyle() hth = HtmlHelper(outdir) hth.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../../res/jquery.js").txt(" ") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../res/style.js").txt(" ") hth.navbar().cell(HtmlTag("a")).firstChild().txt("..").set( "href", "../?C=M;O=D") hth.navbar().cell(HtmlTag("a")).firstChild().txt("kinematics").set( "href", "./") kh = plot_kin(infile, hth) ih, rh = plot_jet_id( infile, hth, variables_to_plot=[ ("jetPt", "jetEta", "nvtx"), ("dR2Mean", "dRMean", "beta", "betaStar", "dZ"), ## "dR2Mean", tuple(v for v in mvas.split(',') if v != ""), ]) ## done: create images and html hth.dump() save_rocs(rh, outdir) ### reweightX = [ kh.reweight.GetBinLowEdge(i) for i in range(1,kh.reweight.GetNbinsX())] ### reweightY = [ kh.reweight.GetBinContent(i) for i in range(1,kh.reweight.GetNbinsX())] ### print reweightX ### print reweightY print kh.reweight_f.GetExpFormula("p")
def main(options, args): from ROOT import gROOT gROOT.SetBatch(options.batch) from lip.Tools.rootutils import loadToolsLib, getQuantilesGraphs, apply_modifs, xtitle, ytitle loadToolsLib() from ROOT import TCut, TCanvas, gDirectory, gPad, kRed, kBlue, kWhite, setStyle, gStyle, TLegend, HtmlHelper, HtmlTag, HtmlTable, HtmlPlot, TPaveText, kOpenCircle, TF1, TLine setStyle() gStyle.SetOptStat(0) gStyle.SetOptFit(0) print "Getting list of files" files = getListOfFiles(options.indir, options.filePattern) chain = mkChain(files, options.treename) ## chain = mkChain(files[0:100],options.treename) ## chain = mkChain(files[0:1],options.treename) hth = HtmlHelper(options.outdir) hth.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../../res/jquery.js").txt(" ") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../res/style.js").txt(" ") hth.navbar().cell(HtmlTag("a")).firstChild().txt("..").set( "href", "../?C=M;O=D") wptag = hth.body().addobj(HtmlTag("pre")) tab = hth.body().add(HtmlTable()) quants = {} objs = [] var, binning = options.variable.split(":") limits = [float(i) for i in binning.split(",")[1:]] delta = 0.1 * max(abs(limits[0]), abs(limits[1])) limits[0] -= delta limits[1] += delta xlab = "p_{T} (GeV)" if options.vsnvtx: xlab = "N_{PV}" sig_style = [("SetLineColor", kBlue), ("SetMarkerColor", kBlue), (xtitle, xlab), (ytitle, "%s cut" % var), ("SetFillStyle", 0), ("SetMarkerColor", kOpenCircle)] bkg_style = [("SetLineColor", kRed), ("SetMarkerColor", kRed), (xtitle, xlab), (ytitle, "%s cut" % var), ("SetFillStyle", 0)] lab_style = [("SetFillColor", kWhite), ("SetShadowColor", kWhite), ("SetLineColor", kWhite), ("SetFillStyle", 0)] fitl = TF1("fitl", "pol1", 12, 19) fitr = TF1("fitl", "pol1", 20, 35) fita = TF1("fita", "pol1", 15, 25) ## wps = { "loose":[0,0.05,0.1,0.1,0.1], "medium":[0,0.10,0.2,0.2,0.2], "tight":[1,0.95,0.9,0.9,0.9] } wps = { "loose": [0, 0.05, 0.05, 0.05, 0.05], "medium": [0, 0.1, 0.1, 0.1, 0.1], "tight": [0, 0.2, 0.2, 0.2, 0.2] } if options.chs: wps = { "loose": [0, 0.02, 0.1, 0.1, 0.1], "medium": [0, 0.05, 0.2, 0.2, 0.2], "tight": [1, 0.95, 0.9, 0.9, 0.9] } wpf = {} for a in wps.keys(): wpf[a] = {} wpref = 20. icat = 0 for cut, name, vars in options.categories: print "Making TH2 ", name icat += 1 vtxbins = [(10, 20), (20, 999), (1, 999)] if options.integrateall: vtxbins = [(1, 999)] ivtx = 0 for vtx in vtxbins: print(name, ) + vtx hname = "%s_%d_%d" % ((name, ) + vtx) vtxcut = TCut("nvtx > %d && nvtx < %d" % vtx) if options.vsnvtx: chain.Draw( "%s:nvtx>>h_sig_%s(50,0.5,50.5,%s)" % (var, hname, binning), TCut("jetPt>20") * vtxcut * TCut(cut) * TCut(options.sigcut), "colz goff") chain.Draw( "%s:nvtx>>h_bkg_%s(50,0.5,50.5,%s)" % (var, hname, binning), TCut("jetPt>20") * vtxcut * TCut(cut) * TCut(options.bkgcut), "colz goff") else: chain.Draw( "%s:jetPt>>h_sig_%s(25,10,60,%s)" % (var, hname, binning), vtxcut * TCut(cut) * TCut(options.sigcut), "colz goff") chain.Draw( "%s:jetPt>>h_bkg_%s(25,10,60,%s)" % (var, hname, binning), vtxcut * TCut(cut) * TCut(options.bkgcut), "colz goff") gDirectory.ls() h_sig = gDirectory.Get("h_sig_%s" % hname) h_bkg = gDirectory.Get("h_bkg_%s" % hname) print "Getting quantiles ", hname sig_qvals = [0.1, 0.2, 0.3, 0.5, 0.02, 0.05, 0.15] bkg_qvals = [0.4, 0.7, 0.6, 0.8, 0.9, 0.95, 0.9] quants[hname] = getQuantilesGraphs(h_sig, sig_qvals), getQuantilesGraphs( h_bkg, bkg_qvals) for i in range(len(sig_qvals)): if options.integrateall: quants[hname][0][i].SetTitle( "%1.0f%% efficiency" % (((1. - sig_qvals[i]) * 100.))) if options.vsnvtx: quants[hname][0][i].Fit(fita.Clone(), "R+") else: quants[hname][0][i].Fit(fitl.Clone(), "R+") quants[hname][0][i].Fit(fitr.Clone(), "R+") for wpn, wp in wps.iteritems(): if wp[0] == 0 and wp[icat] == sig_qvals[i]: wpf[wpn]["%d_%s" % (icat, name)] = quants[hname][ 0][i].GetListOfFunctions( ), quants[hname][0][i].GetTitle() else: quants[hname][0][i].SetTitle( "%1.0f%% efficiency %d<N_{PV}<%d" % (((1. - sig_qvals[i]) * 100., ) + vtx)) style = sig_style + [("SetLineColor", kBlue - 2 * ivtx), ("SetMarkerColor", kBlue - 2 * ivtx)] apply_modifs(quants[hname][0][i], style) for f in quants[hname][0][i].GetListOfFunctions(): apply_modifs(f, style) for i in range(len(bkg_qvals)): if options.integrateall: quants[hname][1][i].SetTitle("%1.0f%% rejection" % ((bkg_qvals[i] * 100.))) if options.vsnvtx: quants[hname][1][i].Fit(fita.Clone(), "R+") else: quants[hname][1][i].Fit(fitl.Clone(), "R+") quants[hname][1][i].Fit(fitr.Clone(), "R+") for wpn, wp in wps.iteritems(): if wp[0] == 1 and wp[icat] == bkg_qvals[i]: wpf[wpn]["%d_%s" % (icat, name)] = quants[hname][ 1][i].GetListOfFunctions( ), quants[hname][1][i].GetTitle() else: quants[hname][1][i].SetTitle( "%1.0f%% rejection %d<N_{PV}<%d" % ((bkg_qvals[i] * 100., ) + vtx)) style = bkg_style + [("SetLineColor", kRed - 2 * ivtx), ("SetMarkerColor", kRed - 2 * ivtx)] apply_modifs(quants[hname][1][i], style) for f in quants[hname][1][i].GetListOfFunctions(): apply_modifs(f, style) ivtx += 1 chain.Draw("nvtx>>h_nvtx_%s(50,0.5,50.5)" % (hname), TCut(cut) * TCut(options.sigcut), "goff") canv = TCanvas("%s_nvtx" % (name), ("%s" % (name)), 800, 1000) canv.cd() h_nvtx = gDirectory.Get("h_nvtx_%s" % hname) line = TLine(h_nvtx.GetMean(), 0., h_nvtx.GetMean(), h_nvtx.GetMaximum()) h_nvtx.Draw("hist") line.Draw("same") objs.append(line) objs.append(canv) tab.row().cell(HtmlPlot(canv, False, "", True, True, True)) nvals = len(sig_qvals) plotsperline = 4 for i in range(nvals): if i % plotsperline == 0: row = tab.row() canv = TCanvas("%s_%d" % (name, i), ("%s_%d" % (name, i)), 800, 1000) canv.SetGridx(), canv.SetGridy() first = True for vtx in vtxbins: kname = "%s_%d_%d" % ((name, ) + vtx) if first: quants[kname][0][i].Draw("ap") else: quants[kname][0][i].Draw("p") quants[kname][1][i].Draw("p") quants[kname][0][i].GetYaxis().SetLimits(limits[0], limits[1]) quants[kname][0][i].GetYaxis().SetRangeUser( limits[0], limits[1]) if first: leg1 = TLegend(0.2, 0.95, 0.5, 1.0) apply_modifs(leg1, lab_style) leg2 = TLegend(0.5, 0.95, 0.8, 1.0) apply_modifs(leg2, lab_style) first = False leg1.AddEntry(quants[kname][0][i], "", "lp") leg2.AddEntry(quants[kname][1][i], "", "lp") leg1.Draw("SAME") leg2.Draw("SAME") lab = TPaveText(0.1, 0.95, 0.2, 1.0, "brNDC") apply_modifs(lab, lab_style) lab.AddText(name) lab.Draw("SAME") row.cell(HtmlPlot(canv, False, "", True, True, True)) objs.append(lab) objs.append(leg1) objs.append(leg2) objs.append(canv) wpstr = "Working points\n" wpstr += "--------------\n" for wpn, wpfs in wpf.iteritems(): wpstr += "\n%s\n" % wpn wpstr += "-------\n" keys = wpfs.keys() keys.sort() ## for cat,val in wpfs.iteritems(): ## funcs,tit = val for cat in keys: funcs, tit = wpfs[cat] wpstr += ("%s (%s) " % (cat.ljust(8), tit.ljust(14))) for f in funcs: if options.vsnvtx: wpstr += "%1.0f-%1.0f: %1.3f " % (f.GetXmin(), f.GetXmax(), f.GetParameter(1)) else: wpstr += "%1.0f-%1.0f: %1.2f " % (f.GetXmin(), f.GetXmax(), f.Eval(wpref)) wpstr += "\n" wptag.txt(str(wpstr)) if not os.path.isdir(options.outdir): os.mkdir(options.outdir) hth.dump() return quants, objs
file = TFile(output + ".root") runPileup = None ipoint = 0 for key in file.GetListOfKeys(): kname = key.GetName() if (kname.find('pileup_') < 0): continue runnb = int(kname.split('_')[1]) h = file.Get(kname) avgpileup = h.GetMean() rmspileup = h.GetRMS() evol.SetPoint(ipoint, runnb, avgpileup) evol.SetPointError(ipoint, 0, 0, rmspileup, rmspileup) ipoint = ipoint + 1 if (runPileup is None): runPileup = h.Clone('runPileup') formatPlot(runPileup, 1, 1, 1, 20, 0, True, True, 1, 1, 1) file.Close() setStyle() c = getNewCanvas("evolc", "evolc", False) c.SetWindowSize(1200, 600) c.Divide(2, 1) c.cd(1) evol.Draw('ap') c.cd(2) runPileup.DrawNormalized('hist') c.SaveAs(output + "_summary.C") c.SaveAs(output + "_summary.root") print "Average pileup: " + str(runPileup.GetMean()) + ' +/- ' + str( runPileup.GetMeanError())
def main(options, args): from ROOT import gROOT gROOT.SetBatch(options.batch) from lip.Tools.rootutils import loadToolsLib, getQuantilesGraphs, apply_modifs, xtitle, ytitle loadToolsLib() from ROOT import TCut, TCanvas, gDirectory, gPad, kRed, kBlue, kWhite, setStyle, gStyle, TLegend, HtmlHelper, HtmlTag, HtmlTable, HtmlPlot, TPaveText, kOpenCircle, TF1, TLine setStyle() gStyle.SetOptStat(0) gStyle.SetOptFit(0) print "Getting list of files" files = getListOfFiles(options.indir,options.filePattern) chain = mkChain(files,options.treename) ## chain = mkChain(files[0:100],options.treename) ## chain = mkChain(files[0:1],options.treename) hth = HtmlHelper(options.outdir) hth.header().addobj( HtmlTag("link") ).set("rel","stylesheet").set("type","text/css").set("href","../res/style.css") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../../res/jquery.js").txt(" ") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../res/style.js").txt(" ") hth.navbar().cell( HtmlTag("a") ).firstChild().txt("..").set("href","../?C=M;O=D") wptag = hth.body().addobj( HtmlTag("pre") ) tab = hth.body().add( HtmlTable() ) quants = { } objs = [] var,binning = options.variable.split(":") limits = [ float(i) for i in binning.split(",")[1:] ] delta = 0.1*max( abs(limits[0]), abs(limits[1])) limits[0] -= delta limits[1] += delta xlab = "p_{T} (GeV)" if options.vsnvtx: xlab = "N_{PV}" sig_style = [ ("SetLineColor",kBlue), ("SetMarkerColor",kBlue), (xtitle,xlab), (ytitle,"%s cut" % var), ("SetFillStyle",0), ("SetMarkerColor",kOpenCircle) ] bkg_style = [ ("SetLineColor",kRed), ("SetMarkerColor",kRed), (xtitle,xlab), (ytitle,"%s cut" % var), ("SetFillStyle",0) ] lab_style = [ ("SetFillColor",kWhite), ("SetShadowColor",kWhite), ("SetLineColor",kWhite), ("SetFillStyle",0) ] fitl = TF1("fitl","pol1",12,19) fitr = TF1("fitl","pol1",20,35) fita = TF1("fita","pol1",15,25) ## wps = { "loose":[0,0.05,0.1,0.1,0.1], "medium":[0,0.10,0.2,0.2,0.2], "tight":[1,0.95,0.9,0.9,0.9] } wps = { "loose":[0,0.05,0.05,0.05,0.05], "medium":[0,0.1,0.1,0.1,0.1], "tight":[0,0.2,0.2,0.2,0.2] } if options.chs: wps = { "loose":[0,0.02,0.1,0.1,0.1], "medium":[0,0.05,0.2,0.2,0.2], "tight":[1,0.95,0.9,0.9,0.9] } wpf = { } for a in wps.keys(): wpf[a] = {} wpref = 20. icat = 0 for cut,name,vars in options.categories: print "Making TH2 ", name icat += 1 vtxbins = [ (10,20), (20,999), (1,999) ] if options.integrateall: vtxbins = [ (1,999) ] ivtx = 0 for vtx in vtxbins: print ( name, )+vtx hname = "%s_%d_%d" % ( ( name, )+vtx ) vtxcut = TCut("nvtx > %d && nvtx < %d" % vtx) if options.vsnvtx: chain.Draw("%s:nvtx>>h_sig_%s(50,0.5,50.5,%s)" % (var, hname, binning), TCut("jetPt>20")*vtxcut*TCut(cut)*TCut(options.sigcut), "colz goff") chain.Draw("%s:nvtx>>h_bkg_%s(50,0.5,50.5,%s)" % (var, hname, binning), TCut("jetPt>20")*vtxcut*TCut(cut)*TCut(options.bkgcut), "colz goff") else: chain.Draw("%s:jetPt>>h_sig_%s(25,10,60,%s)" % (var, hname, binning), vtxcut*TCut(cut)*TCut(options.sigcut), "colz goff") chain.Draw("%s:jetPt>>h_bkg_%s(25,10,60,%s)" % (var, hname, binning), vtxcut*TCut(cut)*TCut(options.bkgcut), "colz goff") gDirectory.ls() h_sig = gDirectory.Get("h_sig_%s" % hname) h_bkg = gDirectory.Get("h_bkg_%s" % hname) print "Getting quantiles ", hname sig_qvals = [0.1,0.2,0.3,0.5,0.02 ,0.05, 0.15] bkg_qvals = [0.4,0.7,0.6,0.8,0.9 , 0.95, 0.9 ] quants[hname] = getQuantilesGraphs(h_sig,sig_qvals), getQuantilesGraphs(h_bkg,bkg_qvals) for i in range(len(sig_qvals)): if options.integrateall: quants[hname][0][i].SetTitle("%1.0f%% efficiency" % (((1.-sig_qvals[i])*100.) )) if options.vsnvtx: quants[hname][0][i].Fit(fita.Clone(),"R+") else: quants[hname][0][i].Fit(fitl.Clone(),"R+") quants[hname][0][i].Fit(fitr.Clone(),"R+") for wpn,wp in wps.iteritems(): if wp[0] == 0 and wp[icat] == sig_qvals[i]: wpf[wpn]["%d_%s" % (icat,name)] = quants[hname][0][i].GetListOfFunctions(),quants[hname][0][i].GetTitle() else: quants[hname][0][i].SetTitle("%1.0f%% efficiency %d<N_{PV}<%d" % (((1.-sig_qvals[i])*100.,)+vtx) ) style = sig_style+[("SetLineColor",kBlue-2*ivtx), ("SetMarkerColor",kBlue-2*ivtx)] apply_modifs(quants[hname][0][i], style) for f in quants[hname][0][i].GetListOfFunctions(): apply_modifs(f,style) for i in range(len(bkg_qvals)): if options.integrateall: quants[hname][1][i].SetTitle("%1.0f%% rejection" % ((bkg_qvals[i]*100.) )) if options.vsnvtx: quants[hname][1][i].Fit(fita.Clone(),"R+") else: quants[hname][1][i].Fit(fitl.Clone(),"R+") quants[hname][1][i].Fit(fitr.Clone(),"R+") for wpn,wp in wps.iteritems(): if wp[0] == 1 and wp[icat] == bkg_qvals[i]: wpf[wpn]["%d_%s" % (icat,name)] = quants[hname][1][i].GetListOfFunctions(),quants[hname][1][i].GetTitle() else: quants[hname][1][i].SetTitle("%1.0f%% rejection %d<N_{PV}<%d" % ((bkg_qvals[i]*100.,)+vtx) ); style = bkg_style+[("SetLineColor",kRed-2*ivtx), ("SetMarkerColor",kRed-2*ivtx)] apply_modifs(quants[hname][1][i],style) for f in quants[hname][1][i].GetListOfFunctions(): apply_modifs(f,style) ivtx += 1 chain.Draw("nvtx>>h_nvtx_%s(50,0.5,50.5)"% (hname), TCut(cut)*TCut(options.sigcut), "goff") canv = TCanvas("%s_nvtx"%(name),("%s"%(name)),800,1000) canv.cd() h_nvtx = gDirectory.Get("h_nvtx_%s"%hname) line = TLine(h_nvtx.GetMean(),0.,h_nvtx.GetMean(),h_nvtx.GetMaximum()) h_nvtx.Draw("hist") line.Draw("same") objs.append(line) objs.append(canv) tab.row().cell( HtmlPlot(canv,False,"",True,True,True) ) nvals = len(sig_qvals) plotsperline = 4 for i in range(nvals): if i % plotsperline == 0: row = tab.row() canv = TCanvas("%s_%d"%(name,i),("%s_%d"%(name,i)),800,1000) canv.SetGridx(), canv.SetGridy() first = True for vtx in vtxbins: kname = "%s_%d_%d" % ( ( name, )+vtx ) if first: quants[kname][0][i].Draw("ap") else: quants[kname][0][i].Draw("p") quants[kname][1][i].Draw("p") quants[kname][0][i].GetYaxis().SetLimits(limits[0],limits[1]) quants[kname][0][i].GetYaxis().SetRangeUser(limits[0],limits[1]) if first: leg1 = TLegend(0.2,0.95,0.5,1.0) apply_modifs(leg1,lab_style) leg2 = TLegend(0.5,0.95,0.8,1.0) apply_modifs(leg2,lab_style) first = False leg1.AddEntry(quants[kname][0][i],"","lp") leg2.AddEntry(quants[kname][1][i],"","lp") leg1.Draw("SAME") leg2.Draw("SAME") lab = TPaveText(0.1,0.95,0.2,1.0,"brNDC") apply_modifs(lab,lab_style) lab.AddText(name) lab.Draw("SAME") row.cell( HtmlPlot(canv,False,"",True,True,True) ) objs.append(lab) objs.append(leg1) objs.append(leg2) objs.append(canv) wpstr = "Working points\n" wpstr += "--------------\n" for wpn,wpfs in wpf.iteritems(): wpstr += "\n%s\n" % wpn wpstr += "-------\n" keys = wpfs.keys() keys.sort() ## for cat,val in wpfs.iteritems(): ## funcs,tit = val for cat in keys: funcs,tit = wpfs[cat] wpstr += ("%s (%s) " % (cat.ljust(8),tit.ljust(14))) for f in funcs: if options.vsnvtx: wpstr += "%1.0f-%1.0f: %1.3f " % (f.GetXmin(), f.GetXmax(), f.GetParameter(1)) else: wpstr += "%1.0f-%1.0f: %1.2f " % (f.GetXmin(), f.GetXmax(), f.Eval(wpref)) wpstr += "\n" wptag.txt(str(wpstr)) if not os.path.isdir(options.outdir): os.mkdir(options.outdir) hth.dump() return quants, objs
ensembleInfo += '<tr><td></td></tr>' ensembleHandler.getTree().Delete("all") misMeasurement.saveMonitoringHistograms() inF.Close() #save ensemble info to file fout = open('ensemble_info.html', 'w') fout.write(ensembleInfo) fout.close() #display results plotF = ROOT.TFile.Open("MisassignmentMeasurement.root") cats=['all','emu','ll'] setStyle() cnv = getNewCanvas('misc','misc',False) cnv.SetWindowSize(1500,500) cnv.Divide(3,1) cnv2 =getNewCanvas('misresc','misresc',False) cnv2.SetWindowSize(1500,500) cnv2.Divide(3,1) cnv3 =getNewCanvas('fractfitc','fracfitc',False) cnv3.SetWindowSize(1500,500) cnv3.Divide(3,1) fracFitter=[] icnv=0 for c in cats: prefix='' if(c!='all') : prefix=c+'_' icnv = icnv+1
def main(indir, input, outdir): ## initialize ROOT style and set-up the html helper setStyle() if not os.path.isdir(outdir): os.mkdir(outdir) inputs = [i.split(":") for i in input.split(",") if ":" in i] from binning import vtxlabels, ptbins, ptlabels, etalables helpers = [] hth = HtmlHelper(outdir) hth.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../../res/jquery.js").txt(" ") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../res/style.js").txt(" ") hth.navbar().cell(HtmlTag("a")).firstChild().txt("..").set( "href", "../?C=M;O=D") for vtx in vtxlabels: page = hth.addPage(vtx.replace("_vtx", "Nvtx")) page.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") page.header().addobj(HtmlTag("script")).set( "language", "javascript").set("type", "text/javascript").set( "src", "../../res/jquery.js").txt(" ") page.header().addobj(HtmlTag("script")).set( "language", "javascript").set("type", "text/javascript").set( "src", "../res/style.js").txt(" ") helper = PlotHelper([{ "file": "%s/%s" % (indir, file), "dir": var, "id": var, "cat": vtx, "label": "%s" % (lab), "nostack": 1 } for file, var, lab in inputs]) helper.defaultStyles = [ [ (setcolors, ROOT.kRed), ("SetMarkerStyle", ROOT.kFullCircle), ], [ (setcolors, ROOT.kBlack), ("SetMarkerStyle", ROOT.kFullTriangleDown), ], [ (setcolors, ROOT.kMagenta), ("SetMarkerStyle", ROOT.kOpenDiamond), ], [ (setcolors, ROOT.kGreen), ("SetMarkerStyle", ROOT.kFullStar), ], [ (setcolors, ROOT.kBlue), ("SetMarkerStyle", ROOT.kOpenTriangleUp), ], [ (setcolors, ROOT.kOrange), ("SetMarkerStyle", ROOT.kOpenCircle), ], [ (setcolors, ROOT.kOrange - 4), ("SetMarkerStyle", ROOT.kOpenStar), ], [ (setcolors, ROOT.kOrange + 2), ("SetMarkerStyle", ROOT.kOpenStar), ], ] histos_to_read = [("%s%s%s" % (eta, "%(cat)s", pt), [], "%s%s" % (eta, pt)) for eta in etalables for pt in ptlabels] helper.read(histos_to_read) canvstyle = [] lab_style = [("SetFillColor", kWhite), ("SetShadowColor", kWhite), ("SetLineColor", kWhite)] helper.nodisc = TF1("nodisc", "1. - x", 0., 1.) tab = page.body().add(HtmlTable()) page_plots = [] for eta in etalables: for pt in ptlabels: lab = TPaveText(0.1, 0.95, 0.4, 1.0, "brNDC") apply_modifs(lab, lab_style) rng = pt.replace("_pt", "").split("_") lab.AddText("%s %s<p_{T}<%s" % (eta, rng[0], rng[1])) lab.Draw("SAME") page_plots += [(["%s%s" % (eta, pt)], "histo", "pe", canvstyle, (0.2, 0.2, 0.5, 0.5), 0.5, "%s%s%s" % (eta, pt, vtx), [lab])] page_plots += [()] plot_page(page_plots, tab, helper, None, [helper.nodisc], plots_per_row=3) helpers.append(helper) ## done: create images and html hth.dump() print outdir
def main(options, args): from ROOT import gROOT gROOT.SetBatch(options.batch) from lip.Tools.rootutils import loadToolsLib, getEfficiencyGraphs, apply_modifs, xtitle, ytitle loadToolsLib() from ROOT import TCut, TCanvas, gDirectory, gPad, kRed, kBlue, kWhite, setStyle, TLegend, HtmlHelper, HtmlTag, HtmlTable, HtmlPlot, TPaveText setStyle() print "Getting list of files" files = getListOfFiles(options.indir,options.filePattern) chain = mkChain(files,options.treename) ### chain = mkChain(files[0:100],options.treename) ### chain = mkChain(files[0:10],options.treename) ### chain = mkChain(files[0:1],options.treename) hth = HtmlHelper(options.outdir) hth.header().addobj( HtmlTag("link") ).set("rel","stylesheet").set("type","text/css").set("href","../res/style.css") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../../res/jquery.js").txt(" ") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../res/style.js").txt(" ") hth.navbar().cell( HtmlTag("a") ).firstChild().txt("..").set("href","../?C=M;O=D") tab = hth.body().add( HtmlTable() ) quants = { } objs = [] var,binning = options.variable.split(":") limits = [ float(i) for i in binning.split(",")[1:] ] delta = 0.1*max( abs(limits[0]), abs(limits[1])) limits[0] -= delta limits[1] += delta sig_style = [ ("SetLineColor",kBlue), ("SetMarkerColor",kBlue), (xtitle,"p_{T} (GeV)"), (ytitle,"%s eff or rej" % var), ("SetFillStyle",0) ] bkg_style = [ ("SetLineColor",kRed), ("SetMarkerColor",kRed), (xtitle,"p_{T} (GeV)"), (ytitle,"%s eff or rej" % var), ("SetFillStyle",0) ] lab_style = [ ("SetFillColor",kWhite), ("SetShadowColor",kWhite), ("SetLineColor",kWhite) ] for cut,name,vars in options.categories: print "Making TH2 ", name ### chain.Draw("4*(%s & 1) + 2*( (%s & 2) / 2) + (%s & 8)/8:jetPt>>h_sig_%s(25,10,60,%s)" % (var, var, var, name, binning), TCut(cut)*TCut(options.sigcut),"goff") ### chain.Draw("4*(%s & 1) + 2*( (%s & 2) / 2) + (%s & 8)/8:jetPt>>h_bkg_%s(25,10,60,%s)" % (var, var, var, name, binning), TCut(cut)*TCut(options.bkgcut), "goff") chain.Draw("%s:jetPt>>h_sig_%s(20,20,60,%s)" % (var, name, binning),TCut("ijet==1")*TCut(cut)*TCut(options.sigcut),"goff") chain.Draw("%s:jetPt>>h_bkg_%s(20,20,60,%s)" % (var, name, binning),TCut(cut)*TCut(options.bkgcut), "goff") h_sig = gDirectory.Get("h_sig_%s" % name) h_bkg = gDirectory.Get("h_bkg_%s" % name) print "Gatting efficiencies ", name names = { (0.,6.):"tight", (0.,4.):"medium", (0.,2.):"loose" } sig_qvals = [(0.,2.),(0.,4.),(0.,6.)] bkg_qvals = [(0.,2.),(0.,4.),(0.,6.)] quants[name] = getEfficiencyGraphs(h_sig,sig_qvals,True), getEfficiencyGraphs(h_bkg,bkg_qvals) for i in range(len(sig_qvals)): quants[name][0][i].SetTitle("sig eff %s" % names[sig_qvals[i]] ); apply_modifs(quants[name][0][i],sig_style) for i in range(len(bkg_qvals)): quants[name][1][i].SetTitle("bkg rej %s" % names[bkg_qvals[i]] ); apply_modifs(quants[name][1][i],bkg_style) nvals = len(sig_qvals) plotsperline = 4 for i in range(nvals): if i % plotsperline == 0: row = tab.row() canv = TCanvas("%s_%d"%(name,i),("%s_%d"%(name,i)),800,1000) canv.SetGridx(), canv.SetGridy() quants[name][0][i].Draw("ap") quants[name][1][i].Draw("p") quants[name][0][i].GetYaxis().SetLimits(0.,1.2) quants[name][0][i].GetYaxis().SetRangeUser(0.,1.2) leg1 = TLegend(0.2,0.95,0.5,1.0) apply_modifs(leg1,lab_style) leg1.AddEntry(quants[name][0][i],"","lp") leg1.Draw("SAME") leg2 = TLegend(0.5,0.95,0.8,1.0) apply_modifs(leg2,lab_style) leg2.AddEntry(quants[name][1][i],"","lp") leg2.Draw("SAME") lab = TPaveText(0.1,0.95,0.2,1.0,"brNDC") apply_modifs(lab,lab_style) lab.AddText(name) lab.Draw("SAME") row.cell( HtmlPlot(canv,False,"",True,True,True) ) objs.append(lab) objs.append(leg1) objs.append(leg2) objs.append(canv) if not os.path.isdir(options.outdir): os.mkdir(options.outdir) hth.dump() return quants, objs, chain
def showControlPlots(stackplots=None,spimposeplots=None,dataplots=None,plottitles=None,generalLabel='CMS preliminary',outputDir='data/plots', samplehtml='',forceNormalization=True) : if(len(stackplots)==0 and len(spimposeplots)==0 and len(dataplots)==0) : return #convert to lists stackLists=[] for p in stackplots: for i in xrange(0,len(p)): if(len(stackLists)<=i): newlist=ROOT.TList() stackLists.append(newlist) if( p[i].IsA().InheritsFrom("TH1") ): if(p[i].GetEntries()==0) : continue stackLists[i].Add(p[i]) spimposeLists=[] for p in spimposeplots: for i in xrange(0,len(p)): if(len(spimposeLists)<=i): newlist=ROOT.TList() spimposeLists.append(newlist) if( p[i].IsA().InheritsFrom("TH1") ): if(p[i].GetEntries()==0) : continue spimposeLists[i].Add(p[i]) dataLists=[] for p in dataplots: for i in xrange(0,len(p)): if(len(dataLists)<=i): newlist=ROOT.TList() dataLists.append(newlist) if( p[i].IsA().InheritsFrom("TH1") ): #print p[i].GetEntries() if(p[i].GetEntries()==0) : continue dataLists[i].Add(p[i]) #draw result nplots=max([len(stackLists), len(dataLists), len(spimposeLists)]) if(nplots==0) : return #output dir import getpass os.system('mkdir -p ' + outputDir) plotsToDisplay={} setStyle() c = getNewCanvas("recolevelc","recolevelc",False) c.SetWindowSize(800,800) c.SetCanvasSize(800,800) for iplot in xrange(0,nplots): stack=ROOT.TList() if(len(stackLists)>iplot): stack=stackLists[iplot] spimpose=ROOT.TList() if(len(spimposeLists)>iplot): spimpose=spimposeLists[iplot] data=ROOT.TList() if(len(dataLists)>iplot): data=dataLists[iplot] pname='' if(stack.At(0) != None) : pname=stack.At(0).GetName() elif(spimpose.At(0) != None) : pname=spimpose.At(0).GetName() elif(data.At(0) != None) : pname=data.At(0).GetName() if(len(pname)<=0): continue tagname = pname.split('_')[0] #print tagname if(tagname.find('all')==0) : chtag='All events' elif(tagname.find('mumu')==0): chtag='#mu#mu events' elif(tagname.find('emu')==0): chtag='e#mu events' elif(tagname.find('ee')==0): chtag='ee events' elif(tagname.find('etau')==0): chtag='e#tau events' elif(tagname.find('mutau')==0): chtag='#mu#tau events' else : chtag=tagname #add the plot try : plotsToDisplay[chtag].append(pname) except : plotsToDisplay[chtag]=[] plotsToDisplay[chtag].append(pname) isamp=0 for iplot in stack : isamp = isamp+1 for iplot in spimpose : isamp = isamp+1 for iplot in data: isamp = isamp+1 plotLabel = generalLabel c.Clear() leg=showPlotsAndMCtoDataComparison(c,stack,spimpose,data,True,forceNormalization)#,forceNormalization) formatForCmsPublic(c.cd(1),leg,plotLabel,isamp) c.SaveAs(outputDir+'/'+pname+'.png') c.SaveAs(outputDir+'/'+pname+'.C') if(pname.find('cutflow')>=0 or pname.find('eventflow')>=0 or pname.find('evtflow')>=0) : try : savePlotAsTable(stack,spimpose,data,outputDir+'/'+pname+'.tex') except : continue #build a summary for the plot browser categories=[] subcategories=[] finalplots=[] for tag in plotsToDisplay.items() : tagch='' if( tag[0]=='All events') : tagch='all' elif( tag[0]=='ee events') : tagch='ee' elif( tag[0]=='#mu#mu events') : tagch='mumu' elif( tag[0]=='e#mu events') : tagch='emu' elif( tag[0]=='e#tau events') : tagch='etau' elif( tag[0]=='#mu#tau events') : tagch='mutau' #else : tagch=tag[0] categories.append(tagch) for pname in tag[1] : ptokens=pname.split('_') if(len(ptokens)>1): prefix=ptokens[0] subcat='' if(prefix.find('eq0jets')>=0) : subcat='eq0jets' elif(prefix.find('geq1jets')>=0) : subcat='geq1jets' elif(prefix.find('eq1jets')>=0) : subcat='eq1jets' elif(prefix.find('geq2jets')>=0) : subcat='geq2jets' elif(prefix.find('eq2jets')>=0) : subcat='eq2jets' elif(prefix.find('geq3jets')>=0) : subcat='geq3jets' elif(prefix.find('eq3jets')>=0) : subcat='eq3jets' elif(prefix.find('eq0btags')>=0) : subcat='eq0btags' elif(prefix.find('geq1btags')>=0) : subcat='geq1btags' elif(prefix.find('eq1btags')>=0) : subcat='eq1btags' elif(prefix.find('geq2btags')>=0) : subcat='geq2btags' elif(prefix.find('eq2btags')>=0) : subcat='eq2btags' elif(prefix.find('vbf')>=0) : subcat='vbf' else : subcat=prefix subcat=subcat.replace(tagch,'') subcategories.append(subcat) finalplots.append( ptokens[1] ) #remove duplicates categories=list(set(categories)) subcategories=list(set(subcategories)) finalplots=list(set(finalplots)) #write in json format fileObj = open(outputDir+'/plotter.json','w') fileObj.write(json.dumps( { 'categories':categories, 'subcategories':subcategories, 'plots':finalplots, 'ploturl':''}, sort_keys=True, indent=4 ) ) fileObj.close()
def main(options, args): from ROOT import gROOT gROOT.SetBatch(options.batch) from lip.Tools.rootutils import loadToolsLib, getEfficiencyGraphs, apply_modifs, xtitle, ytitle loadToolsLib() from ROOT import TCut, TCanvas, gDirectory, gPad, kRed, kBlue, kWhite, setStyle, TLegend, HtmlHelper, HtmlTag, HtmlTable, HtmlPlot, TPaveText setStyle() print "Getting list of files" files = getListOfFiles(options.indir, options.filePattern) chain = mkChain(files, options.treename) ### chain = mkChain(files[0:100],options.treename) ### chain = mkChain(files[0:10],options.treename) ### chain = mkChain(files[0:1],options.treename) hth = HtmlHelper(options.outdir) hth.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../../res/jquery.js").txt(" ") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../res/style.js").txt(" ") hth.navbar().cell(HtmlTag("a")).firstChild().txt("..").set( "href", "../?C=M;O=D") tab = hth.body().add(HtmlTable()) quants = {} objs = [] var, binning = options.variable.split(":") limits = [float(i) for i in binning.split(",")[1:]] delta = 0.1 * max(abs(limits[0]), abs(limits[1])) limits[0] -= delta limits[1] += delta sig_style = [("SetLineColor", kBlue), ("SetMarkerColor", kBlue), (xtitle, "p_{T} (GeV)"), (ytitle, "%s eff or rej" % var), ("SetFillStyle", 0)] bkg_style = [("SetLineColor", kRed), ("SetMarkerColor", kRed), (xtitle, "p_{T} (GeV)"), (ytitle, "%s eff or rej" % var), ("SetFillStyle", 0)] lab_style = [("SetFillColor", kWhite), ("SetShadowColor", kWhite), ("SetLineColor", kWhite)] for cut, name, vars in options.categories: print "Making TH2 ", name ### chain.Draw("4*(%s & 1) + 2*( (%s & 2) / 2) + (%s & 8)/8:jetPt>>h_sig_%s(25,10,60,%s)" % (var, var, var, name, binning), TCut(cut)*TCut(options.sigcut),"goff") ### chain.Draw("4*(%s & 1) + 2*( (%s & 2) / 2) + (%s & 8)/8:jetPt>>h_bkg_%s(25,10,60,%s)" % (var, var, var, name, binning), TCut(cut)*TCut(options.bkgcut), "goff") chain.Draw("%s:jetPt>>h_sig_%s(20,20,60,%s)" % (var, name, binning), TCut("ijet==1") * TCut(cut) * TCut(options.sigcut), "goff") chain.Draw("%s:jetPt>>h_bkg_%s(20,20,60,%s)" % (var, name, binning), TCut(cut) * TCut(options.bkgcut), "goff") h_sig = gDirectory.Get("h_sig_%s" % name) h_bkg = gDirectory.Get("h_bkg_%s" % name) print "Gatting efficiencies ", name names = {(0., 6.): "tight", (0., 4.): "medium", (0., 2.): "loose"} sig_qvals = [(0., 2.), (0., 4.), (0., 6.)] bkg_qvals = [(0., 2.), (0., 4.), (0., 6.)] quants[name] = getEfficiencyGraphs(h_sig, sig_qvals, True), getEfficiencyGraphs( h_bkg, bkg_qvals) for i in range(len(sig_qvals)): quants[name][0][i].SetTitle("sig eff %s" % names[sig_qvals[i]]) apply_modifs(quants[name][0][i], sig_style) for i in range(len(bkg_qvals)): quants[name][1][i].SetTitle("bkg rej %s" % names[bkg_qvals[i]]) apply_modifs(quants[name][1][i], bkg_style) nvals = len(sig_qvals) plotsperline = 4 for i in range(nvals): if i % plotsperline == 0: row = tab.row() canv = TCanvas("%s_%d" % (name, i), ("%s_%d" % (name, i)), 800, 1000) canv.SetGridx(), canv.SetGridy() quants[name][0][i].Draw("ap") quants[name][1][i].Draw("p") quants[name][0][i].GetYaxis().SetLimits(0., 1.2) quants[name][0][i].GetYaxis().SetRangeUser(0., 1.2) leg1 = TLegend(0.2, 0.95, 0.5, 1.0) apply_modifs(leg1, lab_style) leg1.AddEntry(quants[name][0][i], "", "lp") leg1.Draw("SAME") leg2 = TLegend(0.5, 0.95, 0.8, 1.0) apply_modifs(leg2, lab_style) leg2.AddEntry(quants[name][1][i], "", "lp") leg2.Draw("SAME") lab = TPaveText(0.1, 0.95, 0.2, 1.0, "brNDC") apply_modifs(lab, lab_style) lab.AddText(name) lab.Draw("SAME") row.cell(HtmlPlot(canv, False, "", True, True, True)) objs.append(lab) objs.append(leg1) objs.append(leg2) objs.append(canv) if not os.path.isdir(options.outdir): os.mkdir(options.outdir) hth.dump() return quants, objs, chain
def main(indir,input,outdir): ## initialize ROOT style and set-up the html helper setStyle() if not os.path.isdir(outdir): os.mkdir(outdir) inputs = [ i.split(":") for i in input.split(",") if ":" in i ] from binning import vtxlabels, ptbins, ptlabels, etalables helpers = [] hth = HtmlHelper(outdir) hth.header().addobj( HtmlTag("link") ).set("rel","stylesheet").set("type","text/css").set("href","../res/style.css") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../../res/jquery.js").txt(" ") hth.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../res/style.js").txt(" ") hth.navbar().cell( HtmlTag("a") ).firstChild().txt("..").set("href","../?C=M;O=D") for vtx in vtxlabels: page = hth.addPage(vtx.replace("_vtx","Nvtx")) page.header().addobj( HtmlTag("link") ).set("rel","stylesheet").set("type","text/css").set("href","../res/style.css") page.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../../res/jquery.js").txt(" ") page.header().addobj( HtmlTag("script") ).set("language","javascript").set("type","text/javascript").set("src","../res/style.js").txt(" ") helper = PlotHelper( [ { "file":"%s/%s" % (indir,file), "dir":var, "id":var, "cat":vtx, "label": "%s" % (lab), "nostack" : 1 } for file,var,lab in inputs ] ) helper.defaultStyles = [ [ (setcolors,ROOT.kRed), ("SetMarkerStyle",ROOT.kFullCircle), ], [ (setcolors,ROOT.kBlack), ("SetMarkerStyle",ROOT.kFullTriangleDown), ], [ (setcolors,ROOT.kMagenta), ("SetMarkerStyle",ROOT.kOpenDiamond), ], [ (setcolors,ROOT.kGreen), ("SetMarkerStyle",ROOT.kFullStar), ], [ (setcolors,ROOT.kBlue), ("SetMarkerStyle",ROOT.kOpenTriangleUp), ], [ (setcolors,ROOT.kOrange), ("SetMarkerStyle",ROOT.kOpenCircle), ], [ (setcolors,ROOT.kOrange-4), ("SetMarkerStyle",ROOT.kOpenStar), ], [ (setcolors,ROOT.kOrange+2), ("SetMarkerStyle",ROOT.kOpenStar), ], ] histos_to_read = [ ("%s%s%s" % (eta,"%(cat)s",pt), [], "%s%s" % (eta,pt)) for eta in etalables for pt in ptlabels ] helper.read(histos_to_read) canvstyle = [] lab_style = [ ("SetFillColor",kWhite), ("SetShadowColor",kWhite), ("SetLineColor",kWhite) ] helper.nodisc = TF1("nodisc","1. - x",0.,1.) tab = page.body().add( HtmlTable() ) page_plots = [] for eta in etalables: for pt in ptlabels: lab = TPaveText(0.1,0.95,0.4,1.0,"brNDC") apply_modifs(lab,lab_style) rng = pt.replace("_pt","").split("_") lab.AddText("%s %s<p_{T}<%s" % ( eta, rng[0], rng[1] ) ) lab.Draw("SAME") page_plots += [ (["%s%s" % (eta,pt)], "histo", "pe", canvstyle, (0.2,0.2,0.5,0.5), 0.5, "%s%s%s" % (eta,pt,vtx), [lab]) ] page_plots += [ () ] plot_page(page_plots,tab,helper,None,[helper.nodisc],plots_per_row=3) helpers.append(helper) ## done: create images and html hth.dump() print outdir
def main(infile, outdir, label, variables="", mvas=""): ## initialize ROOT style and set-up the html helper setStyle() hth = HtmlHelper(outdir) hth.header().addobj(HtmlTag("link")).set("rel", "stylesheet").set( "type", "text/css").set("href", "../res/style.css") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../../res/jquery.js").txt(" ") hth.header().addobj(HtmlTag("script")).set("language", "javascript").set( "type", "text/javascript").set("src", "../res/style.js").txt(" ") hth.navbar().cell(HtmlTag("a")).firstChild().txt("..").set( "href", "../?C=M;O=D") hth.navbar().cell(HtmlTag("a")).firstChild().txt("kinematics").set( "href", "./") from binning import vtxlabels, ptbins, ptlabels, etalables helper_inputs = [{ "file": infile, "dir": "background", "id": "background", "cat": vtx, "label": "PU %s < N_{vtx} < %s" % tuple(vtx.replace("_vtx", "").split("_")), "nostack": 1 } for vtx in vtxlabels] + [{ "file": infile, "dir": "signal", "id": "signal", "cat": vtx, "label": "u,d,s %s < N_{vtx} < %s" % tuple(vtx.replace("_vtx", "").split("_")), "nostack": 1 } for vtx in vtxlabels] if mvas == "": mvas = "BDT_%s" % label print mvas.split(',') variables_to_plot = [ ("dRMean", "dR2Mean", "beta", "betaStar", "nvtx"), (v for v in variables.split(':') if v != "" and v != "dRMean" and v != "dR2Mean"), ## ("Fisher_%s" % label,"BDT_%s" % label) tuple(v for v in mvas.split(',') if v != ""), ## ("mva",) ] etalables = ["TK", "HEin", "HEout", "HF"] helper, rochelper = plot_jet_id( infile, hth, variables_to_plot, helper_inputs=helper_inputs, vtxlabels=vtxlabels, ptbins=ptbins, etalables=etalables, ## etalables = ["central","endNOtk","fwd"] ) ## done: create images and html hth.dump() save_rocs(rochelper, outdir)