Пример #1
0
pads[1].SetGrid(0, 1)
h_axes[1].Draw()

ratio_hists = []
ratio_hist_errs = []
if args.show_unc:
    for h in hist_errs:
        ratio_hist_errs.append(plot.MakeRatioHist(h, hists[0], True, False))
        ratio_hist_errs[-1].Draw('E2SAME')

for h in hists:
    ratio_hists.append(plot.MakeRatioHist(h, hists[0], False, False))
    ratio_hists[-1].Draw('HISTSAME')

plot.SetupTwoPadSplitAsRatio(pads, plot.GetAxisHist(pads[0]),
                             plot.GetAxisHist(pads[1]), 'Ratio to SM', True,
                             float(args.ratio.split(',')[0]),
                             float(args.ratio.split(',')[1]))

# Go back and tidy up the axes and frame
pads[0].cd()
pads[0].GetFrame().Draw()
pads[0].RedrawAxis()

# CMS logo
plot.DrawTitle(pads[0], args.title_left, 1)
plot.DrawTitle(pads[0], args.title_right, 3)

canv.Print('.png')
canv.Print('.pdf')
Пример #2
0
plot.FixTopRange(pads[0], plot.GetPadYMax(pads[0]), 0.43)
legend.Draw()

# # Do the ratio plot
pads[1].cd()
pads[1].SetGrid(0, 1)
h_axes[1].Draw()

ratio_hists = []
for h in hists:
    ratio_hists.append(plot.MakeRatioHist(h, hists[0], False, False))
for tgt in targets:
    ratio_hists[tgt[0]].Draw('HISTSAME')

plot.SetupTwoPadSplitAsRatio(
    pads, plot.GetAxisHist(
        pads[0]), plot.GetAxisHist(pads[1]), 'Ratio to SM', True, 0.0, 5.0)

# Go back and tidy up the axes and frame
pads[0].cd()
pads[0].GetFrame().Draw()
pads[0].RedrawAxis()

# CMS logo
plot.DrawCMSLogo(pads[0], 'Les Houches', '2019', 11, 0.045, 0.05, 1.0, '', 1.0)
plot.DrawTitle(pads[0], 'pp #rightarrow H / Hj', 1)
plot.DrawTitle(pads[0], 'SMEFT', 3)


canv.Print('.png')
canv.Print('.pdf')
Пример #3
0
def plot_lepton(files, label, era, output, draw_options, title, y_range,
                ratio_y_range, binned_in, x_title, ratio_to, plot_dir,
                label_pos):
    ROOT.PyConfig.IgnoreCommandLineOptions = True
    ROOT.gROOT.SetBatch(ROOT.kTRUE)
    ROOT.TH1.AddDirectory(0)
    plot.ModTDRStyle()

    # parser = argparse.ArgumentParser()

    # parser.add_argument(
    #     'input', nargs='+', help="""Input files""")
    # parser.add_argument(
    #     '--output', '-o', default='efficiency', help="""Name of the output
    #     plot without file extension""")
    # parser.add_argument('--title', default='Muon ID Efficiency')
    # parser.add_argument('--y-range', default='0,1')
    # parser.add_argument('--ratio-y-range', default='0.5,1.5')
    # parser.add_argument('--binned-in', default='#eta')
    # parser.add_argument('--x-title', default='p_{T} (GeV)')
    # parser.add_argument('--ratio-to', default=None, type=int)
    # parser.add_argument('--plot-dir', '-p', default='./')
    # parser.add_argument('--label-pos', default=1)
    # args = parser.parse_args()

    if plot_dir != '':
        os.system('mkdir -p %s' % plot_dir)

    hists = []

    # file = ROOT.TFile('%s.root' % target)

    # Process each input argument
    for src in files:
        #splitsrc = src.split(':')
        file = ROOT.TFile(src)
        if src.find("gen") >= 0:
            hists.append(file.Get(label + "_tot").Clone())
        else:
            hists.append(file.Get(label).Clone())
        file.Close()

    print hists

    hist = hists[0]

    latex = ROOT.TLatex()
    latex.SetNDC()

    for i in xrange(1, hist.GetNbinsY() + 1):
        bin_label = '%s: [%g,%g]' % (binned_in,
                                     hist.GetYaxis().GetBinLowEdge(i),
                                     hist.GetYaxis().GetBinUpEdge(i))
        canv = ROOT.TCanvas('%s_%i' % (output, i), output)

        if ratio_to is not None:
            pads = plot.TwoPadSplit(0.50, 0.01, 0.01)
        else:
            pads = plot.OnePad()
        slices = []

        if label_pos == 1:
            text = ROOT.TPaveText(0.55, 0.37, 0.9, 0.50, 'NDC')
            legend = ROOT.TLegend(0.18, 0.37, 0.5, 0.50, '', 'NDC')
        elif label_pos == 2:
            text = ROOT.TPaveText(0.55, 0.67, 0.9, 0.80, 'NDC')
            legend = ROOT.TLegend(0.18, 0.67, 0.5, 0.80, '', 'NDC')
        else:
            text = ROOT.TPaveText(0.55, 0.54, 0.9, 0.67, 'NDC')
            legend = ROOT.TLegend(0.55, 0.67, 0.9, 0.80, '', 'NDC')
        text = ROOT.TPaveText(0.55, 0.54, 0.9, 0.67, 'NDC')
        legend = ROOT.TLegend(0.6, 0.54, 0.95, 0.74, '', 'NDC')
        #~ if 'ID' in splitsrc[1]:
        #~ legend = ROOT.TLegend(0.18, 0.67, 0.5, 0.85, '', 'NDC')
        for j, src in enumerate(files):
            #splitsrc = src.split(':')
            htgr = hists[j].ProjectionX(
                '%s_projx_%i' % (hists[j].GetName(), j), i, i)
            #if len(splitsrc) >= 3:
            #    settings = {x.split('=')[0]: eval(x.split('=')[1]) for x in splitsrc[2].split(',')}
            if draw_options[j] != None:
                settings = draw_options[j]
                plot.Set(htgr, **settings)
            htgr.Draw('HIST LP SAME')  #htgr.Draw('SAME')
            legend.AddEntry(htgr)
            slices.append(htgr)
        latex.SetTextSize(0.06)
        #~ text.AddText(args.title)
        #~ text.AddText(bin_label)
        #~ text.SetTextAlign(13)
        #~ text.SetBorderSize(0)
        #~ text.Draw()
        legend.Draw()
        pads[0].SetLogx(True)
        axis = plot.GetAxisHist(pads[0])
        axis.GetYaxis().SetTitle('Efficiency')
        axis.GetXaxis().SetTitle(x_title)
        axis.GetXaxis().SetRangeUser(1, 1000)
        axis.SetMinimum(float(y_range[0]))
        axis.SetMaximum(float(y_range[1]))
        #~ pads[0].SetGrid(0, 1)
        pads[0].RedrawAxis('g')

        #~ plot.DrawCMSLogo(pads[0], args.title, bin_label, 0, 0.16, 0.035, 1.2, cmsTextSize=0.5)
        plot.DrawTitle(pads[0], title + ' - ' + bin_label, 1)

        #plot.DrawTitle(pads[0], '18.99 fb^{-1} (13 TeV)', 3)
        if era == "2016":
            plot.DrawTitle(pads[0], '35.9 fb^{-1} (2016, 13 TeV)', 3)
        elif era == "2017":
            plot.DrawTitle(pads[0], '41.5 fb^{-1} (2017, 13 TeV)', 3)
        elif era == "2018":
            plot.DrawTitle(pads[0], '59.7 fb^{-1} (2018, 13 TeV)', 3)

        if ratio_to is not None:
            pads[1].cd()
            pads[1].SetLogx(True)
            ratios = []
            for slice in slices:
                ratios.append(slice.Clone())
                ratios[-1].Divide(slices[ratio_to])
            ratios[0].Draw('AXIS')
            plot.SetupTwoPadSplitAsRatio(pads, plot.GetAxisHist(pads[0]),
                                         plot.GetAxisHist(pads[1]),
                                         'Ratio to data', True,
                                         float(ratio_y_range[0]),
                                         float(ratio_y_range[1]))
            for j, ratio in enumerate(ratios):
                if j == ratio_to:
                    continue
                ratio.Draw('HIST LP SAME')  #('SAME E0')
            pads[1].SetGrid(0, 1)
            pads[1].RedrawAxis('g')

        outname = '%s.%s.%g_%g' % (output, hist.GetYaxis().GetTitle(),
                                   hist.GetYaxis().GetBinLowEdge(i),
                                   hist.GetYaxis().GetBinUpEdge(i))
        outname = outname.replace('(', '_')
        outname = outname.replace(')', '_')
        outname = outname.replace('.', '_')

        canv.Print('%s/%s.png' % (plot_dir, outname))
        canv.Print('%s/%s.pdf' % (plot_dir, outname))
plot.FixTopRange(pads[0], plot.GetPadYMax(pads[0]), 0.30)
legend.Draw()
plot.FixBoxPadding(pads[0], legend, 0.05)

# Do the ratio plot
pads[1].cd()
pads[1].SetGrid(0, 1)
h_axes[1].Draw()

r_data = plot.MakeRatioHist(h_data, h_tot, True, False)
r_tot = plot.MakeRatioHist(h_tot, h_tot, True, False)
r_tot.Draw('E2SAME')
r_data.Draw('SAME')

plot.SetupTwoPadSplitAsRatio(pads, plot.GetAxisHist(pads[0]),
                             plot.GetAxisHist(pads[1]), 'Obs/Exp', True, 0.61,
                             1.39)

# Go back and tidy up the axes and frame
pads[0].cd()
pads[0].GetFrame().Draw()
pads[0].RedrawAxis()

# CMS logo
plot.DrawCMSLogo(pads[0], 'CMS', 'Preliminary', 11, 0.045, 0.05, 1.0, '', 1.0)
plot.DrawTitle(pads[0], '%.1f pb^{-1} (13 TeV)' % intLumiData, 3)

# latex = ROOT.TLatex()
# plot.Set(latex, NDC=None, TextFont=42, TextSize=0.08)
# latex.DrawLatex(0.67, 0.57, CHANNELS[args.channel])
plot.DrawTitle(pads[0], CHANNELS[args.channel], 1)
Пример #5
0
def plot_hadronic(input_file, triggers, working_points, file_types, era,
                  per_dm, output, draw_options, title, y_range, ratio_y_range,
                  binned_in, x_title, ratio_to, plot_dir, label_pos):

    ROOT.PyConfig.IgnoreCommandLineOptions = True
    ROOT.gROOT.SetBatch(ROOT.kTRUE)
    ROOT.TH1.AddDirectory(0)
    plot.ModTDRStyle()
    plot_dir = "plots"
    hists = {}
    graphs = {}
    if plot_dir != '':
        os.system('mkdir -p %s' % plot_dir)
    if per_dm:
        decayModes = ["inclusive", 0, 1, 10]
    else:
        decayModes = ["inclusive"]
    file = ROOT.TFile(input_file)
    for trg in triggers:
        hists[trg] = {}
        graphs[trg] = {}
        for decayMode in decayModes:
            dm_label = "" if decayMode == "inclusive" else "dm{}_".format(
                decayMode)
            hists[trg][decayMode] = {}
            graphs[trg][decayMode] = {}
            for wp in working_points:
                hists[trg][decayMode][wp] = []
                graphs[trg][decayMode][wp] = []

                for ft in file_types:
                    hists[trg][decayMode][wp].append(
                        file.Get(
                            "hist_{}TriggerEfficiency_{}TauMVA_{}{}".format(
                                trg, wp, dm_label, ft)).Clone())
                    graphs[trg][decayMode][wp].append(
                        file.Get(
                            "hist_{}TriggerEfficiency_{}TauMVA_{}{}".format(
                                trg, wp, dm_label, ft)).Clone())

    file.Close()

    latex = ROOT.TLatex()
    latex.SetNDC()
    for trg in triggers:
        for decayMode in decayModes:
            dm_label = "" if decayMode == "inclusive" else "dm{}_".format(
                decayMode)
            for wp in working_points:
                bin_label = "{}".format(wp)
                canv = ROOT.TCanvas('%s_%s' % (output, wp), output)

                if ratio_to is not None:
                    pads = plot.TwoPadSplit(0.50, 0.01, 0.01)
                else:
                    pads = plot.OnePad()
                slices = []

                if label_pos == 1:
                    text = ROOT.TPaveText(0.55, 0.37, 0.9, 0.50, 'NDC')
                    legend = ROOT.TLegend(0.18, 0.37, 0.5, 0.50, '', 'NDC')
                elif label_pos == 2:
                    text = ROOT.TPaveText(0.55, 0.67, 0.9, 0.80, 'NDC')
                    legend = ROOT.TLegend(0.18, 0.67, 0.5, 0.80, '', 'NDC')
                else:
                    text = ROOT.TPaveText(0.55, 0.54, 0.9, 0.67, 'NDC')
                    legend = ROOT.TLegend(0.55, 0.67, 0.9, 0.80, '', 'NDC')
                text = ROOT.TPaveText(0.55, 0.54, 0.9, 0.67, 'NDC')
                legend = ROOT.TLegend(0.6, 0.54, 0.95, 0.74, '', 'NDC')
                #~ if 'ID' in splitsrc[1]:
                #~ legend = ROOT.TLegend(0.18, 0.67, 0.5, 0.85, '', 'NDC')
                for j, hist in enumerate(graphs[trg][decayMode][wp]):
                    #splitsrc = src.split(':')
                    # htgr = hists[j].ProjectionX('%s_projx_%i' % (hists[j].GetName(), j), i, i)
                    #if len(splitsrc) >= 3:
                    #    settings = {x.split('=')[0]: eval(x.split('=')[1]) for x in splitsrc[2].split(',')}
                    if draw_options[j] != None:
                        settings = draw_options[j]
                        plot.Set(hist, **settings)
                    hist.Draw('LP SAME')  #htgr.Draw('SAME')
                    legend.AddEntry(hist)
                for j, hist in enumerate(hists[trg][decayMode][wp]):
                    if draw_options[j] != None:
                        settings = draw_options[j]
                        plot.Set(hist, **settings)
                    slices.append(hist)
                latex.SetTextSize(0.06)
                #~ text.AddText(args.title)
                #~ text.AddText(bin_label)
                #~ text.SetTextAlign(13)
                #~ text.SetBorderSize(0)
                #~ text.Draw()
                legend.Draw()
                pads[0].SetLogx(True)
                axis = plot.GetAxisHist(pads[0])
                axis.GetYaxis().SetTitle('Efficiency')
                axis.GetXaxis().SetTitle(x_title)
                # axis.GetXaxis().SetRangeUser(1,1000)
                axis.SetMinimum(float(y_range[0]))
                axis.SetMaximum(float(y_range[1]))
                #~ pads[0].SetGrid(0, 1)
                pads[0].RedrawAxis('g')

                #~ plot.DrawCMSLogo(pads[0], args.title, bin_label, 0, 0.16, 0.035, 1.2, cmsTextSize=0.5)
                plot.DrawTitle(
                    pads[0], trg + ' ' + title +
                    dm_label.replace('_', '').replace('dm', ' - dm') + ' - ' +
                    bin_label, 1)

                #plot.DrawTitle(pads[0], '18.99 fb^{-1} (13 TeV)', 3)
                if era == "2016":
                    plot.DrawTitle(pads[0], '35.9 fb^{-1} (2016, 13 TeV)', 3)
                elif era == "2017":
                    plot.DrawTitle(pads[0], '41.5 fb^{-1} (2017, 13 TeV)', 3)
                elif era == "2018":
                    plot.DrawTitle(pads[0], '59.7 fb^{-1} (2018, 13 TeV)', 3)

                if ratio_to is not None:
                    pads[1].cd()
                    pads[1].SetLogx(True)
                    ratios = []
                    for slice in slices:
                        ratios.append(slice.Clone())
                        ratios[-1].Divide(slices[ratio_to])
                    ratios[0].Draw('AXIS')
                    plot.SetupTwoPadSplitAsRatio(pads,
                                                 plot.GetAxisHist(pads[0]),
                                                 plot.GetAxisHist(pads[1]),
                                                 'Ratio to data', True,
                                                 float(ratio_y_range[0]),
                                                 float(ratio_y_range[1]))
                    for j, ratio in enumerate(ratios):
                        if j == ratio_to:
                            continue
                        ratio.Draw('LP SAME')  #('SAME E0')
                    pads[1].SetGrid(0, 1)
                    pads[1].RedrawAxis('g')

                outname = '{}_{}_{}_{}{}'.format(trg, era, output, dm_label,
                                                 wp)
                outname = outname.replace('(', '_')
                outname = outname.replace(')', '_')
                outname = outname.replace('.', '_')

                canv.Print('%s/%s.png' % (plot_dir, outname))
                canv.Print('%s/%s.pdf' % (plot_dir, outname))