def prepare_double_canvas(name, title, factor = 1): c = TCanvas(name, title, 1200, int(900 + 900 / factor)) pad1 = TPad("pad1","pad1",0,0,1,factor / (1. + factor)) pad2 = TPad("pad2","pad2",0,factor / (1. + factor),1,1) print("heights:",factor / (1. + factor) ) pad2.SetBottomMargin(0.01) pad2.SetRightMargin(0.03) pad2.SetLeftMargin(0.15) pad1.SetBorderMode(0) pad1.SetTopMargin(0.01) pad1.SetRightMargin(0.03) pad1.SetLeftMargin(0.15) pad1.SetBottomMargin(0.15) pad2.SetBorderMode(0) pad2.SetGridy() pad1.SetTickx(1) pad2.SetTickx(1) pad1.SetTicky(1) pad2.SetTicky(1) pad1.Draw() pad2.Draw() ROOT.SetOwnership(c,False) ROOT.SetOwnership(pad1,False) ROOT.SetOwnership(pad2,False) pad1.cd() return c, pad1, pad2
def draw_resoLin(histReso, histLin): pad1 = TPad("pad1", "pad1", 0, 0, 1, 0.66) pad2 = TPad("pad2", "pad2", 0, 0.66, 1, 1) pad2.SetBottomMargin(0.01) pad1.SetBorderMode(0) pad1.SetTopMargin(0.01) pad1.SetBottomMargin(0.15) pad2.SetBorderMode(0) pad1.SetTickx(1) pad2.SetTickx(1) pad1.SetTicky(1) pad2.SetTicky(1) pad1.Draw() pad2.Draw() pad1.cd() pad1.SetLogx() histReso.Draw("AP") histReso.GetXaxis().SetTitle("E [GeV]") histReso.GetYaxis().SetTitle("#sigma_{E_{tot}}/#LT E_{tot}#GT") histReso.GetXaxis().SetLimits(10, 11000) histReso.SetMinimum(0.) histReso.SetMaximum(0.15) histReso.Draw("AP") pad2.cd() pad2.SetLogx() pad2.SetGridy() histLin.GetYaxis().SetLabelSize(0.09) histLin.GetYaxis().SetTitleOffset(0.9) histLin.GetYaxis().SetTickLength(0.04) histLin.GetYaxis().SetTitleSize(0.09) histLin.GetXaxis().SetTickLength(0.04) histLin.GetXaxis().SetTitleOffset(1.1) histLin.GetXaxis().SetLabelSize(0.1) histLin.GetXaxis().SetTitleSize(0.09) histLin.GetXaxis().SetLimits(10, 11000) histLin.GetYaxis().SetRangeUser(-0.155, 0.155) histLin.Draw("AP")
def draw_ratio(c_title, h_top=[], h_bottom=[], draw_top=[], draw_bottom=[]): c = TCanvas(c_title) c.cd() pad_bottom = TPad("pad_bottom", "", 0, 0.02105263, 1, 0.4) pad_bottom.SetFrameBorderMode(0) pad_bottom.SetFrameBorderMode(0) pad_bottom.SetBorderMode(0) pad_bottom.SetTopMargin(0) pad_bottom.SetBottomMargin(0.3) pad_bottom.Draw() pad_bottom.cd() h_bottom[0].SetStats(0) pad_bottom.SetGridy() h_bottom[0].Draw(draw_bottom[0]) h_bottom[0].GetYaxis().SetRangeUser(0.91, 1.09) h_bottom[0].GetYaxis().SetNdivisions(5, 0, 5) h_bottom[0].GetYaxis().SetLabelSize(0.10) h_bottom[0].GetYaxis().SetTitleSize(0.13) h_bottom[0].GetYaxis().SetTitleOffset(0.35) h_bottom[0].GetXaxis().SetLabelSize(0.10) h_bottom[0].GetXaxis().SetTitleSize(0.13) h_bottom[0].GetXaxis().SetTitleOffset(0.85) h_bottom[0].GetYaxis().SetTitle("Data/MC") h_bottom[0].GetYaxis().CenterTitle() h_bottom[0].SetMarkerStyle(20) h_bottom[0].SetLineColor(1) for i, h in enumerate(h_bottom[1:]): h.Draw("same" + draw_bottom[i + 1]) c.cd() pad_top = TPad("pad_top", "", 0, 0.4, 1, 1) pad_top.SetBottomMargin(0) pad_top.SetTopMargin(0.15) pad_top.Draw() pad_top.cd() h_top[0].SetStats(0) h_top[0].DrawCopy(draw_top[0]) h_top[0].GetYaxis().SetTitleOffset(0.59) h_top[0].GetYaxis().SetTitleSize(0.07) h_top[0].SetFillStyle(3001) h_top[0].Draw("e2same") for i, h in enumerate(h_top[1:]): h.Draw("same" + draw_top[i + 1]) c.Update() return c
def PlotFakeRatio(ratio): c = TCanvas("c", "canvas", 800, 800) gStyle.SetOptStat(0) gStyle.SetLegendBorderSize(0) pad = TPad("pad", "pad", 0.01, 0.01, 0.99, 0.99) pad.Draw() pad.cd() pad.SetGrid() pad.SetFillColor(0) pad.SetFrameBorderMode(0) pad.SetBorderMode(0) xaxis_title = "Photon P_{T} [GeV]" leg = getLegend(xmin=0.5, ymin=0.7, scale=0.75) fake_style(ratio) ratio.SetTitle("") ratio.GetYaxis().SetTitle("Fake Ratio") # ratio.GetYaxis().SetTitleOffset(0.5) ratio.GetXaxis().SetTitle(xaxis_title) # ratio.GetYaxis().SetRangeUser(0.75,1.2) print SetBounds([ratio], scale=1) ratio.Draw("p same") leg.AddEntry(ratio, "#frac{Data_{ISO}}{Data_{Non-ISO}}", "lp") leg.Draw() lumi_label = '%s' % float('%.3g' % (max(config.lumi.values()) / 1000.)) + " fb^{-1}" texLumi, texCMS = getCMSText(lumi_label, config.version, scale=0.8) SaveAs(c, "fake_ratio_%s" % parser.args.variable, year=config.version, sub="GammaPurity/FakeRatio/")
c.SetTopMargin(T / H) c.SetBottomMargin(B / H) c.SetTickx(0) c.SetTicky(0) c.Draw() c.cd() pad1 = TPad("zxc_p1", "zxc_p1", 0, padRatio - padOverlap, 1, 1) pad2 = TPad("qwe_p2", "qwe_p2", 0, 0, 1, padRatio + padOverlap) pad1.SetLeftMargin(L / W) pad1.SetRightMargin(R / W) pad1.SetTopMargin(T / H / (1 - padRatio + padOverlap)) pad1.SetBottomMargin( (padOverlap + padGap) / (1 - padRatio + padOverlap)) pad1.SetFillColor(0) pad1.SetBorderMode(0) pad1.SetFrameFillStyle(0) pad1.SetFrameBorderMode(0) pad1.SetTickx(0) pad1.SetTicky(0) pad2.SetLeftMargin(L / W) pad2.SetRightMargin(R / W) pad2.SetTopMargin((padOverlap) / (padRatio + padOverlap)) pad2.SetBottomMargin(B / H / (padRatio + padOverlap)) pad2.SetFillColor(0) pad2.SetFillStyle(4000) pad2.SetBorderMode(0) pad2.SetFrameFillStyle(0) pad2.SetFrameBorderMode(0) pad2.SetTickx(0)
def CanvasPartition(C, Nx, Ny, lMargin=0.15, rMargin=0.05, bMargin=0.15, tMargin=0.05): if (not C): return (0) #Setup Pad layout: vSpacing = 0.0 vStep = (1. - bMargin - tMargin - (Ny - 1) * vSpacing) / Ny hSpacing = 0.0 hStep = (1. - lMargin - rMargin - (Nx - 1) * hSpacing) / Nx vposd = 0 vposu = 0 vmard = 0 vmaru = 0 vfactor = 0 hposl = 0 hposr = 0 hmarl = 0 hmarr = 0 hfactor = 0 for i in range(Nx): if (i == 0): hposl = 0.0 hposr = lMargin + hStep hfactor = hposr - hposl hmarl = lMargin / hfactor hmarr = 0.0 elif (i == Nx - 1): hposl = hposr + hSpacing hposr = hposl + hStep + rMargin hfactor = hposr - hposl hmarl = 0.0 hmarr = rMargin / (hposr - hposl) else: hposl = hposr + hSpacing hposr = hposl + hStep hfactor = hposr - hposl hmarl = 0.0 hmarr = 0.0 for j in range(Ny): if (j == 0): vposd = 0.0 vposu = bMargin + vStep vfactor = vposu - vposd vmard = bMargin / vfactor vmaru = 0.0 elif (j == Ny - 1): vposd = vposu + vSpacing vposu = vposd + vStep + tMargin vfactor = vposu - vposd vmard = 0.0 vmaru = tMargin / (vposu - vposd) else: vposd = vposu + vSpacing vposu = vposd + vStep vfactor = vposu - vposd vmard = 0.0 vmaru = 0.0 C.cd(0) name = "pad_" + str(i) + "_" + str(j) #pad = gROOT.FindObject(name) pad = TPad(name, "", hposl, vposd, hposr, vposu) pad.SetLeftMargin(hmarl) pad.SetRightMargin(hmarr) pad.SetBottomMargin(vmard) pad.SetTopMargin(vmaru) pad.SetFrameBorderMode(0) pad.SetBorderMode(0) pad.SetBorderSize(0) pad.Draw()
def PlotRatio(h_reco_unfolded,h_ptcl_or,h_reco_unfolded_roof, h_reco_unfolded_svd, h_reco_unfolded_T,h_reco_unfolded_Ids, svd_par, Ids_par ,outputname="test.png"): gStyle.SetPadLeftMargin(0.12) gStyle.SetPadRightMargin(0.12) c = TCanvas("canvas_"+outputname,"canvas_"+outputname,0,0,800, 800) c.cd() pad1 = TPad("pad1","pad1",0,0.40,1,1) pad1.SetTopMargin(0.15) pad1.SetBottomMargin(0.01) pad1.SetFillStyle(0) pad1.SetTicks(1,1) pad1.SetBorderMode(0) pad1.Draw() c.cd() pad2 = TPad("pad2","pad2",0,0.01,1,0.422) pad2.SetFillStyle(0) pad2.SetTopMargin(0.043) pad2.SetBottomMargin(0.2) pad2.SetBorderMode(0) pad2.SetTicks(1,1) pad2.Draw() pad2.Modified() c.cd() pad1.cd() gStyle.SetOptStat(0) h_ptcl_or.SetTitle("") h_ptcl_or.SetLineColor(2) #h_ptcl_or.GetYaxis().SetRangeUser(0,h_ptcl_or.GetMaximum()*1.5) h_ptcl_or.GetXaxis().SetTitleSize(34) h_ptcl_or.GetXaxis().SetTitleFont(43) h_ptcl_or.GetYaxis().SetTitleSize(27) h_ptcl_or.GetYaxis().SetTitleFont(43) h_ptcl_or.GetYaxis().SetTitleOffset(1.5) h_ptcl_or.GetYaxis().SetTitle("Events") h_ptcl_or.GetYaxis().SetLabelFont(43) h_ptcl_or.GetYaxis().SetLabelSize(25) legend = TLegend(0.55,0.5,0.85,0.8) legend.SetFillStyle(0) legend.AddEntry(h_ptcl_or,"Simulation") legend.AddEntry(h_reco_unfolded,"Fully Bayesian Unfolding","p") legend.AddEntry(h_reco_unfolded_roof,"D'Agostini RooUnfold, par. 4","p") legend.AddEntry(h_reco_unfolded_svd,"SVD RooUnfold, par. " + str(svd_par),"p") legend.AddEntry(h_reco_unfolded_T,"T RooUnfold","p") legend.AddEntry(h_reco_unfolded_Ids,"Ids RooUnfold, par. " + str(Ids_par),"p") legend.SetBorderSize(0) h_reco_unfolded.SetLineColor(1) h_reco_unfolded.SetMarkerColor(1) h_reco_unfolded.SetMarkerStyle(22) h_reco_unfolded_roof.SetMarkerColor(6) h_reco_unfolded_roof.SetLineColor(6) h_reco_unfolded_roof.SetMarkerStyle(20) h_reco_unfolded_svd.SetMarkerColor(4) h_reco_unfolded_svd.SetLineColor(4) h_reco_unfolded_svd.SetMarkerStyle(5) h_reco_unfolded_T.SetMarkerColor(7) h_reco_unfolded_T.SetLineColor(7) h_reco_unfolded_T.SetMarkerStyle(34) h_reco_unfolded_Ids.SetMarkerColor(8) h_reco_unfolded_Ids.SetLineColor(8) h_reco_unfolded_Ids.SetMarkerStyle(3) h_ptcl_or.Draw("hist") h_reco_unfolded.Draw("same p x0") h_reco_unfolded_roof.Draw("same p x0") h_reco_unfolded_svd.Draw("same p x0") h_reco_unfolded_T.Draw("same p x0") h_reco_unfolded_Ids.Draw("same p x0") legend.Draw("same") pad1.RedrawAxis() pad2.cd() h_ptcl_or_clone = h_ptcl_or.Clone(h_ptcl_or.GetName()+"_clone") h_reco_unfolded_clone = h_reco_unfolded.Clone(h_reco_unfolded.GetName()+"_clone") h_reco_unfolded_roof_clone = h_reco_unfolded_roof.Clone(h_reco_unfolded_roof.GetName()+"_clone") h_reco_unfolded_svd_clone = h_reco_unfolded_svd.Clone(h_reco_unfolded_svd.GetName()+"_clone") h_reco_unfolded_T_clone = h_reco_unfolded_T.Clone(h_reco_unfolded_T.GetName()+"_clone") h_reco_unfolded_Ids_clone = h_reco_unfolded_Ids.Clone(h_reco_unfolded_Ids.GetName()+"_clone") h_ptcl_or_clone.Divide(h_ptcl_or) h_reco_unfolded_clone.Divide(h_ptcl_or) h_reco_unfolded_roof_clone.Divide(h_ptcl_or) h_reco_unfolded_svd_clone.Divide(h_ptcl_or) h_reco_unfolded_T_clone.Divide(h_ptcl_or) h_reco_unfolded_Ids_clone.Divide(h_ptcl_or) h_ptcl_or_clone.GetXaxis().SetTitleSize(27) h_ptcl_or_clone.GetXaxis().SetTitleFont(43) h_ptcl_or_clone.GetYaxis().SetTitleSize(27) h_ptcl_or_clone.GetYaxis().SetTitleFont(43) h_ptcl_or_clone.GetXaxis().SetLabelFont(43) h_ptcl_or_clone.GetXaxis().SetLabelSize(25) h_ptcl_or_clone.GetYaxis().SetLabelFont(43) h_ptcl_or_clone.GetYaxis().SetLabelSize(25) h_ptcl_or_clone.SetMaximum(1.3) h_ptcl_or_clone.SetMinimum(0.7) h_ptcl_or_clone.GetXaxis().SetTitleOffset(2.5) h_ptcl_or_clone.GetXaxis().SetTitle(args.title) h_ptcl_or_clone.GetYaxis().SetTitle("#frac{Unfolded}{Simulation} ") h_ptcl_or_clone.Draw("hist") h_reco_unfolded_clone.Draw("same p x0") h_reco_unfolded_roof_clone.Draw("same p x0") h_reco_unfolded_svd_clone.Draw("same p x0") h_reco_unfolded_T_clone.Draw("same p x0") h_reco_unfolded_Ids_clone.Draw("same p x0") pad2.RedrawAxis() c.Update() histograms.append(c) # here is the crash probably PrintCan(c, outputname)
def eraselabel(pad, h): pad.cd() pe = TPad("pe", "pe", 0, 0, pad.GetLeftMargin(), h) pe.Draw() pe.SetFillColor(pad.GetFillColor()) pe.SetBorderMode(0)
def PlotSig(templates, sideband_templates): print "Plotting Signal Template" data = templates["Data"].histo.Clone() gjets = templates["GJets"].histo.Clone() sideband = sideband_templates["Sideband"].histo.Clone() full = gjets.Clone() full.Add(sideband) c = TCanvas("c", "canvas", 800, 800) gStyle.SetOptStat(0) gStyle.SetLegendBorderSize(0) # c.SetLeftMargin(0.15); # c.SetLogy(); #c.cd(); pad1 = TPad("pad1", "pad1", 0.01, 0.25, 0.99, 0.99) pad1.SetBottomMargin(0.) pad1.Draw() pad1.cd() pad1.SetLogy() pad1.SetFillColor(0) pad1.SetFrameBorderMode(0) pad1.SetBorderMode(0) temp_style(gjets, kGreen + 2) temp_style(sideband, kRed) temp_style(full, kBlue + 2) DataStyle(data) leg = getLegend(xmax=0.7, ymin=0.55, ymax=0.75) gjets.Draw("hist") gjets.SetTitle("") gjets.GetYaxis().SetTitle("Events") if templates.variable.xaxis_title == "": templates.variable.xaxis_title = next( (vartitle for var, vartitle in xaxismap.items() if var in templates.variable.variable), "") gjets.GetXaxis().SetTitle(templates.variable.xaxis_title) sideband.Draw("hist same") full.Draw("hist same") data.Draw("pex0 same") hslist = [data, gjets, sideband] leg.AddEntry(data, "Data", "lp") leg.AddEntry(gjets, "Real GJets", "l") leg.AddEntry(sideband, "QCD Fake Template", "l") leg.AddEntry(full, "Full", "l") VarBounds(templates.variable.variable, hslist) leg.Draw() lumi_label = '%s' % float('%.3g' % (templates.lumi / 1000.)) + " fb^{-1}" texLumi, texCMS = getCMSText(lumi_label, templates.year) if re.search("(\d+to\d+|\d+toInf)", templates.variable.variable): ptrange = templates.variable.variable.split("_")[1].split("to") rtext = PtRangeText(ptrange=ptrange) c.cd() pad2 = TPad("pad2", "pad2", 0.01, 0.01, 0.99, 0.25) pad2.SetGridy() pad2.Draw() pad2.cd() pad2.SetFillColor(0) pad2.SetFrameBorderMode(0) pad2.SetBorderMode(0) pad2.SetTopMargin(0) pad2.SetBottomMargin(0.35) ratio = GetRatio(data, full) RatioStyle(ratio, rymin=-0.25, rymax=2.25, xname=templates.variable.xaxis_title, yname="Data/Full") ratio.Draw("pex0") line = getRatioLine(data.GetXaxis().GetXmin(), data.GetXaxis().GetXmax()) line.Draw("same") SaveAs(c, "real_template_%s" % templates.varname, year=templates.year, sub="GammaPurity")