Esempio n. 1
0
def ratioplot():
    # create required parts
    h1 = createH1()
    h2 = createH2()
    h3 = createRatio(h1, h2)
    c, pad1, pad2 = createCanvasPads()

    # draw everything
    pad1.cd()
    h1.Draw()
    h2.Draw("same")
    # to avoid clipping the bottom zero, redraw a small axis
    h1.GetYaxis().SetLabelSize(0.0)
    axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "")
    axis.SetLabelFont(43)
    axis.SetLabelSize(15)
    axis.Draw()
    pad2.cd()
    h3.Draw("ep")
Esempio n. 2
0
rebin_nue.SetLineColor(38)
simple_nue.SetLineColor(46)
rebin_nue.SetLineWidth(6)
simple_nue.SetLineWidth(6)
simple_nue.GetXaxis().SetRangeUser(0, 4)
rebin_nue.GetXaxis().SetRangeUser(0, 4)

simple_nue.Draw("hist")
rebin_nue.Draw("hist same")


# Do not draw the Y axis label on the upper plot and redraw a small
# axis instead, in order to avoid the first label (0) to be clipped.
rebin_nue.GetYaxis().SetLabelSize(0.)
axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "")
axis.SetLabelFont(43)  # Absolute font size in pixel (precision 3)
axis.SetLabelSize(15)
axis.Draw()

leg_nue = TLegend(0.75, 0.95, 0.75, 0.95)
leg_nue.AddEntry(simple_nue, "nue gSimple Flux",  "l")
leg_nue.AddEntry(rebin_nue,  "nue dk2nu Flux",    "l")
leg_nue.Draw()

c6.cd()
pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3)
pad2.SetTopMargin(0.1)
pad2.SetBottomMargin(0.1)
pad2.SetGridx()  # vertical grid
pad2.Draw()
pad2.cd()  # pad2 becomes the current pad
def main():  # pylint: disable=too-many-locals, too-many-statements, too-many-branches
    """
    Main plotting function
    """
    gROOT.SetBatch(True)

    # pylint: disable=unused-variable

    parser = argparse.ArgumentParser()
    parser.add_argument("--database-analysis",
                        "-d",
                        dest="database_analysis",
                        help="analysis database to be used",
                        required=True)
    parser.add_argument("--analysis",
                        "-a",
                        dest="type_ana",
                        help="choose type of analysis",
                        required=True)
    parser.add_argument("--input",
                        "-i",
                        dest="input_file",
                        help="results input file",
                        required=True)

    args = parser.parse_args()

    typean = args.type_ana
    shape = typean[len("jet_"):]
    print("Shape:", shape)

    file_in = args.input_file
    with open(args.database_analysis, "r") as file_db:
        data_param = yaml.safe_load(file_db)
    case = list(data_param.keys())[0]
    datap = data_param[case]

    logger = get_logger()

    i_cut = file_in.rfind("/")
    rootpath = file_in[:i_cut]

    # plotting
    # LaTeX string
    p_latexnhadron = datap["analysis"][typean]["latexnamehadron"]
    p_latexbin2var = datap["analysis"][typean]["latexbin2var"]
    v_varshape_latex = datap["analysis"][typean]["var_shape_latex"]

    # first variable (hadron pt)
    lpt_finbinmin = datap["analysis"][typean]["sel_an_binmin"]
    lpt_finbinmax = datap["analysis"][typean]["sel_an_binmax"]
    var1ranges = lpt_finbinmin.copy()
    var1ranges.append(lpt_finbinmax[-1])

    # second variable (jet pt)
    v_var2_binning = datap["analysis"][typean]["var_binning2"]  # name
    lvar2_binmin_reco = datap["analysis"][typean].get("sel_binmin2_reco", None)
    lvar2_binmax_reco = datap["analysis"][typean].get("sel_binmax2_reco", None)
    p_nbin2_reco = len(lvar2_binmin_reco)  # number of reco bins
    lvar2_binmin_gen = datap["analysis"][typean].get("sel_binmin2_gen", None)
    lvar2_binmax_gen = datap["analysis"][typean].get("sel_binmax2_gen", None)
    p_nbin2_gen = len(lvar2_binmin_gen)  # number of gen bins
    var2ranges_reco = lvar2_binmin_reco.copy()
    var2ranges_reco.append(lvar2_binmax_reco[-1])
    var2binarray_reco = array(
        "d",
        var2ranges_reco)  # array of bin edges to use in histogram constructors
    var2ranges_gen = lvar2_binmin_gen.copy()
    var2ranges_gen.append(lvar2_binmax_gen[-1])
    var2binarray_gen = array(
        "d",
        var2ranges_gen)  # array of bin edges to use in histogram constructors

    # observable (z, shape,...)
    v_varshape_binning = datap["analysis"][typean][
        "var_binningshape"]  # name (reco)
    v_varshape_binning_gen = datap["analysis"][typean][
        "var_binningshape_gen"]  # name (gen)
    lvarshape_binmin_reco = \
        datap["analysis"][typean].get("sel_binminshape_reco", None)
    lvarshape_binmax_reco = \
        datap["analysis"][typean].get("sel_binmaxshape_reco", None)
    p_nbinshape_reco = len(lvarshape_binmin_reco)  # number of reco bins
    lvarshape_binmin_gen = \
        datap["analysis"][typean].get("sel_binminshape_gen", None)
    lvarshape_binmax_gen = \
        datap["analysis"][typean].get("sel_binmaxshape_gen", None)
    p_nbinshape_gen = len(lvarshape_binmin_gen)  # number of gen bins
    varshaperanges_reco = lvarshape_binmin_reco.copy()
    varshaperanges_reco.append(lvarshape_binmax_reco[-1])
    varshapebinarray_reco = array(
        "d", varshaperanges_reco
    )  # array of bin edges to use in histogram constructors
    varshaperanges_gen = lvarshape_binmin_gen.copy()
    varshaperanges_gen.append(lvarshape_binmax_gen[-1])
    varshapebinarray_gen = array(
        "d", varshaperanges_gen
    )  # array of bin edges to use in histogram constructors

    file_results = TFile.Open(file_in)
    if not file_results:
        logger.fatal(make_message_notfound(file_in))

    ibin2 = 1

    suffix = "%s_%g_%g" % (v_var2_binning, lvar2_binmin_gen[ibin2],
                           lvar2_binmax_gen[ibin2])

    # HF data
    nameobj = "%s_hf_data_%d_stat" % (shape, ibin2)
    hf_data_stat = file_results.Get(nameobj)
    if not hf_data_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_hf_data_%d_syst" % (shape, ibin2)
    hf_data_syst = file_results.Get(nameobj)
    if not hf_data_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # HF PYTHIA
    nameobj = "%s_hf_pythia_%d_stat" % (shape, ibin2)
    hf_pythia_stat = file_results.Get(nameobj)
    if not hf_pythia_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # HF ratio
    nameobj = "%s_hf_ratio_%d_stat" % (shape, ibin2)
    hf_ratio_stat = file_results.Get(nameobj)
    if not hf_ratio_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_hf_ratio_%d_syst" % (shape, ibin2)
    hf_ratio_syst = file_results.Get(nameobj)
    if not hf_ratio_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # inclusive data
    nameobj = "%s_incl_data_%d_stat" % (shape, ibin2)
    incl_data_stat = file_results.Get(nameobj)
    if not incl_data_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_incl_data_%d_syst" % (shape, ibin2)
    incl_data_syst = file_results.Get(nameobj)
    if not incl_data_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # inclusive PYTHIA
    nameobj = "%s_incl_pythia_%d_stat" % (shape, ibin2)
    incl_pythia_stat = file_results.Get(nameobj)
    if not incl_pythia_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_incl_pythia_%d_syst" % (shape, ibin2)
    incl_pythia_syst = file_results.Get(nameobj)
    if not incl_pythia_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # inclusive ratio
    nameobj = "%s_incl_ratio_%d_stat" % (shape, ibin2)
    incl_ratio_stat = file_results.Get(nameobj)
    if not incl_ratio_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_incl_ratio_%d_syst" % (shape, ibin2)
    incl_ratio_syst = file_results.Get(nameobj)
    if not incl_ratio_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # quark PYTHIA
    nameobj = "%s_quark_pythia_%d_stat" % (shape, ibin2)
    quark_pythia_stat = file_results.Get(nameobj)
    if not quark_pythia_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_quark_pythia_%d_syst" % (shape, ibin2)
    quark_pythia_syst = file_results.Get(nameobj)
    if not quark_pythia_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # gluon PYTHIA
    nameobj = "%s_gluon_pythia_%d_stat" % (shape, ibin2)
    gluon_pythia_stat = file_results.Get(nameobj)
    if not gluon_pythia_stat:
        logger.fatal(make_message_notfound(nameobj, file_in))
    nameobj = "%s_gluon_pythia_%d_syst" % (shape, ibin2)
    gluon_pythia_syst = file_results.Get(nameobj)
    if not gluon_pythia_syst:
        logger.fatal(make_message_notfound(nameobj, file_in))

    # plot the results with systematic uncertainties and models

    size_can = [800, 800]
    offsets_axes = [0.8, 1.1]
    margins_can = [0.1, 0.13, 0.1, 0.03]
    size_thg = 0.05
    offset_thg = 0.85

    gStyle.SetErrorX(0)  # do not plot horizontal error bars of histograms
    fontsize = 0.035
    opt_leg_g = "FP"
    opt_plot_g = "2"

    list_new = []  # list to avoid loosing objects created in loops

    # labels

    x_latex = 0.16
    y_latex_top = 0.83
    y_step = 0.055

    title_x = v_varshape_latex
    title_y = "(1/#it{N}_{jet}) d#it{N}/d%s" % v_varshape_latex
    title_full = ";%s;%s" % (title_x, title_y)
    title_full_ratio = ";%s;data/MC: ratio of %s" % (title_x, title_y)

    text_alice = "#bf{ALICE} Preliminary, pp, #sqrt{#it{s}} = 13 TeV"
    text_alice_sim = "#bf{ALICE} Simulation, pp, #sqrt{#it{s}} = 13 TeV"
    text_pythia = "PYTHIA 8 (Monash)"
    text_pythia_split = "#splitline{PYTHIA 8}{(Monash)}"
    text_jets = "charged jets, anti-#it{k}_{T}, #it{R} = 0.4"
    text_ptjet = "%g #leq %s < %g GeV/#it{c}, #left|#it{#eta}_{jet}#right| #leq 0.5" % (
        lvar2_binmin_reco[ibin2], p_latexbin2var, lvar2_binmax_reco[ibin2])
    text_pth = "%g #leq #it{p}_{T}^{%s} < %g GeV/#it{c}, #left|#it{y}_{%s}#right| #leq 0.8" % (
        lpt_finbinmin[0], p_latexnhadron,
        min(lpt_finbinmax[-1], lvar2_binmax_reco[ibin2]), p_latexnhadron)
    text_ptcut = "#it{p}_{T, incl. ch. jet}^{leading track} #geq 5.33 GeV/#it{c}"
    text_ptcut_sim = "#it{p}_{T, incl. ch. jet}^{leading h^{#pm}} #geq 5.33 GeV/#it{c} (varied)"
    text_sd = "Soft Drop (#it{z}_{cut} = 0.1, #it{#beta} = 0)"

    title_thetag = "#it{#theta}_{g} = #it{R}_{g}/#it{R}"
    radius_jet = 0.4

    # colour and marker indeces
    c_hf_data = 0
    c_incl_data = 1
    c_hf_mc = 2
    c_incl_mc = 6
    c_quark_mc = 5
    c_gluon_mc = 0

    # markers
    m_hf_data = get_marker(0)
    m_incl_data = get_marker(1)
    m_hf_mc = get_marker(0, 2)
    m_incl_mc = get_marker(1, 2)
    m_quark_mc = get_marker(2)
    m_gluon_mc = get_marker(3)

    # make the horizontal error bars smaller
    if shape == "nsd":
        for gr in [
                hf_data_syst, incl_data_syst, hf_ratio_syst, incl_ratio_syst,
                incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst
        ]:
            for i in range(gr.GetN()):
                gr.SetPointEXlow(i, 0.1)
                gr.SetPointEXhigh(i, 0.1)

    # data, HF and inclusive

    hf_data_syst_cl = hf_data_syst.Clone()

    leg_pos = [.72, .75, .85, .85]
    list_obj = [hf_data_syst, incl_data_syst, hf_data_stat, incl_data_stat]
    labels_obj = ["%s-tagged" % p_latexnhadron, "inclusive", "", ""]
    colours = [
        get_colour(i, j) for i, j in zip((c_hf_data, c_incl_data, c_hf_data,
                                          c_incl_data), (2, 2, 1, 1))
    ]
    markers = [m_hf_data, m_incl_data, m_hf_data, m_incl_data]
    y_margin_up = 0.46
    y_margin_down = 0.05
    cshape_data, list_obj_data_new = make_plot("cshape_data_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \
        title=title_full)
    for gr, c in zip((hf_data_syst, incl_data_syst), (c_hf_data, c_incl_data)):
        gr.SetMarkerColor(get_colour(c))
    list_obj_data_new[0].SetTextSize(fontsize)
    if shape == "nsd":
        hf_data_syst.GetXaxis().SetNdivisions(5)
    # Draw a line through the points.
    if shape == "nsd":
        for h in (hf_data_stat, incl_data_stat):
            h_line = h.Clone(h.GetName() + "_line")
            h_line.SetLineStyle(2)
            h_line.Draw("l hist same")
            list_new.append(h_line)
    cshape_data.Update()
    if shape == "rg":
        # plot the theta_g axis
        gr_frame = hf_data_syst
        axis_rg = gr_frame.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_data.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_data.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_data = []
    for text_latex in [
            text_alice, text_jets, text_ptjet, text_pth, text_ptcut, text_sd
    ]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_data.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_data.Update()
    cshape_data.SaveAs("%s/%s_data_%s.pdf" % (rootpath, shape, suffix))

    # data and PYTHIA, HF

    leg_pos = [.72, .65, .85, .85]
    list_obj = [hf_data_syst_cl, hf_data_stat, hf_pythia_stat]
    labels_obj = ["data", "", text_pythia_split]
    colours = [
        get_colour(i, j)
        for i, j in zip((c_hf_data, c_hf_data, c_hf_mc), (2, 1, 1))
    ]
    markers = [m_hf_data, m_hf_data, m_hf_mc]
    y_margin_up = 0.4
    y_margin_down = 0.05
    cshape_data_mc_hf, list_obj_data_mc_hf_new = make_plot("cshape_data_mc_hf_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \
        title=title_full)
    for gr, c in zip([hf_data_syst_cl], [c_hf_data]):
        gr.SetMarkerColor(get_colour(c))
    leg_data_mc_hf = list_obj_data_mc_hf_new[0]
    leg_data_mc_hf.SetHeader("%s-tagged" % p_latexnhadron)
    leg_data_mc_hf.SetTextSize(fontsize)
    if shape == "nsd":
        hf_data_syst_cl.GetXaxis().SetNdivisions(5)
        #axis_nsd = hf_data_syst_cl.GetHistogram().GetXaxis()
        #x1 = axis_nsd.GetBinLowEdge(1)
        #x2 = axis_nsd.GetBinUpEdge(axis_nsd.GetNbins())
        #axis_nsd.Set(5, x1, x2)
        #for ibin in range(axis_nsd.GetNbins()):
        #    axis_nsd.SetBinLabel(ibin + 1, "%d" % ibin)
        #axis_nsd.SetNdivisions(5)
    cshape_data_mc_hf.Update()
    if shape == "rg":
        # plot the theta_g axis
        axis_rg = hf_data_stat.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_data_mc_hf.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_data_mc_hf.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_data_mc_hf = []
    for text_latex in [text_alice, text_jets, text_ptjet, text_pth, text_sd]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_data_mc_hf.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_data_mc_hf.Update()
    cshape_data_mc_hf.SaveAs("%s/%s_data_mc_hf_%s.pdf" %
                             (rootpath, shape, suffix))

    # data and PYTHIA, inclusive

    #leg_pos = [.68, .65, .85, .85]
    list_obj = [
        incl_data_syst, incl_pythia_syst, incl_data_stat, incl_pythia_stat
    ]
    labels_obj = ["data", text_pythia_split]
    colours = [
        get_colour(i, j) for i, j in zip((c_incl_data, c_incl_mc, c_incl_data,
                                          c_incl_mc), (2, 2, 1, 1))
    ]
    markers = [m_incl_data, m_incl_mc, m_incl_data, m_incl_mc]
    y_margin_up = 0.4
    y_margin_down = 0.05
    cshape_data_mc_incl, list_obj_data_mc_incl_new = make_plot("cshape_data_mc_incl_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \
        title=title_full)
    for gr, c in zip([incl_data_syst, incl_pythia_syst],
                     [c_incl_data, c_incl_mc]):
        gr.SetMarkerColor(get_colour(c))
    leg_data_mc_incl = list_obj_data_mc_incl_new[0]
    leg_data_mc_incl.SetHeader("inclusive")
    leg_data_mc_incl.SetTextSize(fontsize)
    if shape == "nsd":
        incl_data_syst.GetXaxis().SetNdivisions(5)
    cshape_data_mc_incl.Update()
    if shape == "rg":
        # plot the theta_g axis
        axis_rg = incl_data_stat.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_data_mc_incl.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_data_mc_incl.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_data_mc_incl = []
    for text_latex in [text_alice, text_jets, text_ptjet, text_ptcut, text_sd]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_data_mc_incl.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_data_mc_incl.Update()
    cshape_data_mc_incl.SaveAs("%s/%s_data_mc_incl_%s.pdf" %
                               (rootpath, shape, suffix))

    # Ratios data/MC, HF and inclusive

    line_1 = TLine(lvarshape_binmin_reco[0], 1, lvarshape_binmax_reco[-1], 1)
    line_1.SetLineStyle(9)
    line_1.SetLineColor(1)
    line_1.SetLineWidth(3)

    #leg_pos = [.72, .7, .85, .85] # with header
    leg_pos = [.72, .75, .85, .85]  # without header
    list_obj = [
        hf_ratio_syst, line_1, incl_ratio_syst, hf_ratio_stat, incl_ratio_stat
    ]
    labels_obj = ["%s-tagged" % p_latexnhadron, "inclusive"]
    colours = [
        get_colour(i, j) for i, j in zip((c_hf_data, c_incl_data, c_hf_data,
                                          c_incl_data), (2, 2, 1, 1))
    ]
    markers = [m_hf_data, m_incl_data, m_hf_data, m_incl_data]
    y_margin_up = 0.52
    y_margin_down = 0.05
    if shape == "nsd":
        y_margin_up = 0.22
    cshape_ratio, list_obj_ratio_new = make_plot("cshape_ratio_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \
        title=title_full_ratio)
    cshape_ratio.Update()
    for gr, c in zip((hf_ratio_syst, incl_ratio_syst),
                     (c_hf_data, c_incl_data)):
        gr.SetMarkerColor(get_colour(c))
    leg_ratio = list_obj_ratio_new[0]
    leg_ratio.SetTextSize(fontsize)
    #leg_ratio.SetHeader("data/MC")
    if shape == "nsd":
        hf_ratio_syst.GetXaxis().SetNdivisions(5)
    cshape_ratio.Update()
    if shape == "rg":
        # plot the theta_g axis
        gr_frame = hf_ratio_syst
        axis_rg = gr_frame.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_ratio.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_ratio.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_ratio = []
    for text_latex in [
            text_alice, text_jets, text_ptjet, text_pth, text_ptcut, text_sd,
            text_pythia
    ]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_ratio.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_ratio.Update()
    cshape_ratio.SaveAs("%s/%s_ratio_%s.pdf" % (rootpath, shape, suffix))

    # PYTHIA, HF, inclusive, quark, gluon

    incl_pythia_syst_cl = incl_pythia_syst.Clone()

    y_min_h, y_max_h = get_y_window_his([
        hf_pythia_stat, incl_pythia_stat, quark_pythia_stat, gluon_pythia_stat
    ])
    y_min_g, y_max_g = get_y_window_gr(
        [incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst])
    y_min = min(y_min_h, y_min_g)
    y_max = max(y_max_h, y_max_g)
    y_margin_up = 0.46
    y_margin_down = 0.05
    y_min_plot, y_max_plot = get_plot_range(y_min, y_max, y_margin_down,
                                            y_margin_up)

    #leg_pos = [.6, .65, .75, .85]
    leg_pos = [.72, .55, .85, .85]
    list_obj = [
        incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst, hf_pythia_stat,
        incl_pythia_stat, quark_pythia_stat, gluon_pythia_stat
    ]
    labels_obj = ["inclusive", "quark", "gluon", "%s-tagged" % p_latexnhadron]
    colours = [
        get_colour(i, j)
        for i, j in zip((c_incl_mc, c_quark_mc, c_gluon_mc, c_hf_mc, c_incl_mc,
                         c_quark_mc, c_gluon_mc), (2, 2, 2, 1, 1, 1, 1))
    ]
    markers = [
        m_incl_mc, m_quark_mc, m_gluon_mc, m_hf_mc, m_incl_mc, m_quark_mc,
        m_gluon_mc
    ]
    y_margin_up = 0.46
    y_margin_down = 0.05
    cshape_mc, list_obj_mc_new = make_plot("cshape_mc_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \
        title=title_full)
    cshape_mc.Update()
    for gr, c in zip((incl_pythia_syst, quark_pythia_syst, gluon_pythia_syst),
                     (c_incl_mc, c_quark_mc, c_gluon_mc)):
        gr.SetMarkerColor(get_colour(c))
    leg_mc = list_obj_mc_new[0]
    leg_mc.SetTextSize(fontsize)
    leg_mc.SetHeader(text_pythia_split)
    if shape == "nsd":
        incl_pythia_syst.GetXaxis().SetNdivisions(5)
    cshape_mc.Update()
    if shape == "rg":
        # plot the theta_g axis
        axis_rg = hf_pythia_stat.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_mc.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_mc.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_mc = []
    for text_latex in [
            text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim,
            text_sd
    ]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_mc.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_mc.Update()
    cshape_mc.SaveAs("%s/%s_mc_%s.pdf" % (rootpath, shape, suffix))

    # PYTHIA, HF, quark, gluon

    #leg_pos = [.6, .65, .75, .85]
    leg_pos = [.72, .61, .85, .85]
    list_obj = [
        quark_pythia_syst, gluon_pythia_syst, hf_pythia_stat,
        quark_pythia_stat, gluon_pythia_stat
    ]
    labels_obj = ["quark", "gluon", "%s-tagged" % p_latexnhadron]
    colours = [
        get_colour(i, j)
        for i, j in zip((c_quark_mc, c_gluon_mc, c_hf_mc, c_quark_mc,
                         c_gluon_mc), (2, 2, 1, 1, 1))
    ]
    markers = [m_quark_mc, m_gluon_mc, m_hf_mc, m_quark_mc, m_gluon_mc]
    y_margin_up = 0.46
    y_margin_down = 0.05
    cshape_mc, list_obj_mc_new = make_plot("cshape_mc_qgd_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \
        title=title_full)
    cshape_mc.Update()
    for gr, c in zip((quark_pythia_syst, gluon_pythia_syst),
                     (c_quark_mc, c_gluon_mc)):
        gr.SetMarkerColor(get_colour(c))
    leg_mc = list_obj_mc_new[0]
    leg_mc.SetTextSize(fontsize)
    leg_mc.SetHeader(text_pythia_split)
    if shape == "nsd":
        quark_pythia_syst.GetXaxis().SetNdivisions(5)
    cshape_mc.Update()
    if shape == "rg":
        # plot the theta_g axis
        axis_rg = hf_pythia_stat.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_mc.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_mc.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_mc = []
    for text_latex in [
            text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim,
            text_sd
    ]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_mc.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_mc.Update()
    cshape_mc.SaveAs("%s/%s_mc_qgd_%s.pdf" % (rootpath, shape, suffix))

    # PYTHIA, HF, inclusive

    #leg_pos = [.6, .65, .75, .85]
    leg_pos = [.72, .67, .85, .85]
    list_obj = [incl_pythia_syst_cl, incl_pythia_stat, hf_pythia_stat]
    labels_obj = ["inclusive", "", "%s-tagged" % p_latexnhadron]
    colours = [
        get_colour(i, j)
        for i, j in zip((c_incl_mc, c_incl_mc, c_hf_mc), (2, 1, 1))
    ]
    markers = [m_incl_mc, m_incl_mc, m_hf_mc]
    y_margin_up = 0.46
    y_margin_down = 0.05
    cshape_mc, list_obj_mc_new = make_plot("cshape_mc_id_" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, range_y=[y_min_plot, y_max_plot], margins_c=margins_can, \
        title=title_full)
    # Draw a line through the points.
    if shape == "nsd":
        for h in (incl_pythia_stat, hf_pythia_stat):
            h_line = h.Clone(h.GetName() + "_line")
            h_line.SetLineStyle(2)
            h_line.Draw("l hist same")
            list_new.append(h_line)
    cshape_mc.Update()
    incl_pythia_syst_cl.SetMarkerColor(get_colour(c_incl_mc))
    leg_mc = list_obj_mc_new[0]
    leg_mc.SetTextSize(fontsize)
    leg_mc.SetHeader(text_pythia_split)
    if shape == "nsd":
        incl_pythia_syst_cl.GetXaxis().SetNdivisions(5)
    cshape_mc.Update()
    if shape == "rg":
        # plot the theta_g axis
        axis_rg = hf_pythia_stat.GetXaxis()
        rg_min = axis_rg.GetBinLowEdge(axis_rg.GetFirst())
        rg_max = axis_rg.GetBinUpEdge(axis_rg.GetLast())
        thetag_min = rg_min / radius_jet
        thetag_max = rg_max / radius_jet
        y_axis = cshape_mc.GetUymax()
        axis_thetag = TGaxis(rg_min, y_axis, rg_max, y_axis, thetag_min,
                             thetag_max, 510, "-")
        axis_thetag.SetTitle(title_thetag)
        axis_thetag.SetTitleSize(size_thg)
        axis_thetag.SetLabelSize(0.036)
        axis_thetag.SetTitleFont(42)
        axis_thetag.SetLabelFont(42)
        axis_thetag.SetLabelOffset(0)
        axis_thetag.SetTitleOffset(offset_thg)
        cshape_mc.SetTickx(0)
        axis_thetag.Draw("same")
    # Draw LaTeX
    y_latex = y_latex_top
    list_latex_mc = []
    for text_latex in [
            text_alice_sim, text_jets, text_ptjet, text_pth, text_ptcut_sim,
            text_sd
    ]:
        latex = TLatex(x_latex, y_latex, text_latex)
        list_latex_mc.append(latex)
        draw_latex(latex, textsize=fontsize)
        y_latex -= y_step
    cshape_mc.Update()
    cshape_mc.SaveAs("%s/%s_mc_id_%s.pdf" % (rootpath, shape, suffix))

    # data inclusive vs PYTHIA, quark, gluon

    #leg_pos = [.6, .65, .75, .85]
    #leg_pos = [.72, .55, .85, .85]
    leg_pos = [.6, .7, .85, .85]
    list_obj = [
        incl_data_syst, quark_pythia_syst, gluon_pythia_syst, incl_data_stat,
        quark_pythia_stat, gluon_pythia_stat
    ]
    labels_obj = ["inclusive (data)", "quark (PYTHIA 8)", "gluon (PYTHIA 8)"]
    colours = [
        get_colour(i, j)
        for i, j in zip((c_incl_data, c_quark_mc, c_gluon_mc, c_incl_data,
                         c_quark_mc, c_gluon_mc), (2, 2, 2, 1, 1, 1))
    ]
    markers = [
        m_incl_data, m_quark_mc, m_gluon_mc, m_incl_data, m_quark_mc,
        m_gluon_mc
    ]
    y_margin_up = 0.3
    y_margin_down = 0.05
    cshape_mc, list_obj_mc_new = make_plot("cshape_mc_data_iqg" + suffix, size=size_can, \
        list_obj=list_obj, labels_obj=labels_obj, opt_leg_g=opt_leg_g, opt_plot_g=opt_plot_g, offsets_xy=offsets_axes, \
        colours=colours, markers=markers, leg_pos=leg_pos, margins_y=[y_margin_down, y_margin_up], margins_c=margins_can, \
        title=title_full)
    for gr, c in zip((incl_data_syst, quark_pythia_syst, gluon_pythia_syst),
                     (c_incl_data, c_quark_mc, c_gluon_mc)):
        gr.SetMarkerColor(get_colour(c))
    leg_mc = list_obj_mc_new[0]
    leg_mc.SetTextSize(fontsize)
    cshape_mc.Update()
    cshape_mc.SaveAs("%s/%s_data_i_mc_qg_%s.pdf" % (rootpath, shape, suffix))
Esempio n. 4
0
            gr_minus.SetMarkerStyle(21)
            gr_minus.SetMarkerColor(4)

            gr_plus.Draw("ep same")
            gr_minus.Draw("ep same")
            canvas.Update()

            axis = TGaxis(ROOT.gPad.GetUxmax(), ROOT.gPad.GetUymin(),
                          ROOT.gPad.GetUxmax(), ROOT.gPad.GetUymax(), 0, 2,
                          510, "+L")
            axis.SetTitle("Temperature (before - after) [degC]")
            axis.SetTitleOffset(1.5)
            axis.SetTitleFont(42)
            axis.SetLineColor(6)
            axis.SetTextColor(6)
            axis.SetLabelFont(42)
            axis.Draw()

            gr_temp.SetLineColor(6)
            gr_temp.SetLineWidth(4)
            gr_temp.SetMarkerSize(3)
            gr_temp.SetMarkerStyle(22)
            gr_temp.SetMarkerColor(6)

            label = ROOT.TLatex(0.68, 0.75, klayer)
            label.SetNDC()

            label2 = ROOT.TLatex(0.2, 0.93, "CMS")
            label2.SetNDC()

            label3 = ROOT.TLatex(0.23, 0.86, "Preliminary")
Esempio n. 5
0
    def PlotOnCanvas(self,pdf_name):
        tdrstyle.setTDRStyle() 
        canvas = TCanvas("c", "c", 600, 600)

        pad1 = TPad("pad1", "pad1", 0, 0.0, 1, 1.0)
        pad1.SetTopMargin(0.15)
        pad1.SetBottomMargin(0.32)
        pad1.SetRightMargin(0.05)
        pad1.SetLeftMargin(0.15)
        if self.title == '':
            pad1.SetTopMargin(0.05)
        pad1.SetGridx()
        pad1.Draw()
        pad1.cd()
        self.histo1.SetStats(0)
        self.histo1.Draw(self.option)
        self.histo2.Draw(self.option+" same")

        if self.logx:
            pad1.SetLogx()
        if self.logy:
            pad1.SetLogy()

        # Redraw axis to avoid clipping 0
        self.histo1.GetXaxis().SetLabelSize(0.)
        self.histo1.GetXaxis().SetTitle('')
        axis = TGaxis(-9,-2.8,-9,2.8,0,10000,50510,"")
        axis.SetLabelFont(43)
        axis.SetLabelSize(15)
        axis.Draw("same")

        pad2 = TPad("pad2", "pad2", 0, 0.0, 1, 0.3)
        pad2.SetTopMargin(0)
        pad2.SetBottomMargin(0.4)
        pad2.SetRightMargin(0.05)
        pad2.SetLeftMargin(0.15)
        pad2.SetGridx()
        pad2.Draw()
        pad2.cd() 

        if self.logx:
            pad2.SetLogx()

        self.ratio.SetLineColor(ROOT.kBlack)
        self.ratio.SetMinimum(0.5)
        self.ratio.SetMaximum(1.5)
        self.ratio.SetStats(0)
        self.ratio.SetMarkerStyle(21)
        self.ratio.Draw("ep")

        self.histo1.SetLineColor(ROOT.kBlue+1)
        self.histo1.SetLineWidth(2)
        max_y = max(self.histo1.GetMaximum(),self.histo2.GetMaximum())
        self.histo1.SetMaximum(max_y*1.1)

        self.histo1.GetXaxis().SetTitleOffset(1.5)
        self.histo1.GetXaxis().SetLabelSize(0.)
        self.histo1.GetXaxis().SetTitleSize(0.)

        self.histo1.GetYaxis().SetTitleOffset(1.5)
        self.histo1.GetYaxis().SetLabelSize(0.03)
        self.histo1.GetYaxis().SetTitleSize(0.05)
        self.histo1.GetYaxis().SetNdivisions(505)

        self.histo2.SetLineColor(ROOT.kRed)
        self.histo2.SetLineWidth(2)

        self.ratio.SetTitle("")

        self.ratio.GetXaxis().SetNdivisions(510)
        self.ratio.GetXaxis().SetTitleOffset(1.1)
        self.ratio.GetXaxis().SetLabelSize(0.10)
        self.ratio.GetXaxis().SetTitleSize(0.15)
        if len(self.xlabel) > 30:
            self.ratio.GetXaxis().SetTitleSize(0.13)
        if len(self.xlabel) > 60:
            self.ratio.GetXaxis().SetTitleSize(0.11)

        self.ratio.GetYaxis().SetTitle("Ratio")
        self.ratio.GetYaxis().SetNdivisions(505)
        self.ratio.GetYaxis().SetTitleOffset(0.5)
        self.ratio.GetYaxis().SetLabelSize(0.10)
        self.ratio.GetYaxis().SetTitleSize(0.15)
        if len(self.ylabel) > 30:
            self.ratio.GetYaxis().SetTitleSize(0.13)
        if len(self.ylabel) > 60:
            self.ratio.GetYaxis().SetTitleSize(0.11)

        # Legend #
        canvas.cd()
        if self.title == '':
            self.legend = TLegend(0.60,0.80,0.93,0.93)
        else:
            self.legend = TLegend(0.60,0.70,0.93,0.83)
        self.legend.SetTextSize(0.05)
        self.legend.SetBorderSize(0)
        self.legend.SetFillColor(0)
        self.legend.AddEntry(self.histo1,self.legend1,"l")
        self.legend.AddEntry(self.histo2,self.legend2,"l")
        self.legend.Draw()

        ROOT.SetOwnership(canvas, False)
        ROOT.SetOwnership(pad1, False)
        ROOT.SetOwnership(pad2, False)

        return canvas,self.filename
Esempio n. 6
0
    gAxis.SetBit(TAxis.kRotateTitle)
    gAxis.SetBit(TAxis.kCenterTitle)
    gAxis.Draw()
else:
    mbbHi_meV = SensClass.GetMbb(tHalfMin_y * CLHEP.year, isotope, nmeModel,
                                 ga) / CLHEP.meV
    mbbLow_meV = SensClass.GetMbb(tHalfMax_y * CLHEP.year, isotope, nmeModel,
                                  ga) / CLHEP.meV
    nLabels = 4
    gAxis = TGaxis(expMax_ty * 1.01, tHalfMax_y,
                   expMax_ty - (expMax_ty - expMin_ty) / 10000., tHalfMin_y,
                   mbbLow_meV, mbbHi_meV, nLabels, "-G")
    gAxis.SetTitle("m_{#beta#beta} sensitivity (90% CL) [meV]")
    gAxis.SetTitleOffset(1.2)
    gAxis.SetTitleFont(hiBGFunc.GetYaxis().GetTitleFont())
    gAxis.SetTitleSize(hiBGFunc.GetYaxis().GetTitleSize())
    gAxis.SetLabelFont(hiBGFunc.GetYaxis().GetLabelFont())
    gAxis.SetLabelSize(hiBGFunc.GetYaxis().GetLabelSize())
    gAxis.SetBit(TAxis.kRotateTitle)
    gAxis.SetBit(TAxis.kCenterTitle)
    gAxis.Draw()

canvas.Update()
label = "sensVsExp"
if options.use5SigDL: label = "DLVsExp"
if options.xenon136: label += "_Xe"
if options.useShellModel: label += "_SM"
if ga != 1.25: label += "_g"
canvas.Print(label + ".pdf")
canvas.Print(label + ".png")
def make_comparison_plot(outdir, var, groupname1, groupname2, category, weight = "PU_weight*MC_weight*bTagSF_weight*leptonSF_weight*triggerSF_weight*FR_weight", dataset = "ttH"):
  var_name = var[0]
  n_bins = var[3]
  range_low = var[4]
  range_high = var[5]
  
  histos = []
  plot_name = "p"   #segfault when using different names for each
  #"%s_%s_%s_%s_%s_vs_%s" % (outdir, var_name, dataset, category, groupname1, groupname2)
  name1 = "plot_%s_%s" % (groupname1, plot_name)
  plot1 = single_plot("%s/%s" % (groups[groupname1]["inputPath"], groups[groupname1]["inputFiles"][dataset]),
    name1,
    "%s_%s" % (groups[groupname1]["treePrefix"], category),
    var_name,
    weight,
    n_bins, range_low, range_high)
    
  name2 = "plot_%s_%s" % (groupname2, plot_name)
  plot2 = single_plot("%s/%s" % (groups[groupname2]["inputPath"], groups[groupname2]["inputFiles"][dataset]),
    name2,
    "%s_%s" % (groups[groupname2]["treePrefix"], category),
    var_name,
    weight,
    n_bins, range_low, range_high)
  histos.append(plot1)
  histos.append(plot2)

  leg_entry = []
  leg_entry.append("%s:\t N=%d, mean=%.2f, RMS=%.2f" % (groupname1, plot1.GetEntries(), plot1.GetMean(), plot1.GetRMS()))
  leg_entry.append("%s:\t N=%d, mean=%.2f, RMS=%.2f" % (groupname2, plot2.GetEntries(), plot2.GetMean(), plot2.GetRMS()))
  leg=TLegend(0.45,0.74,0.85,0.89)
  
  leg.SetHeader(get_header(category));
  leg.SetBorderSize(0)
  leg.SetTextSize(0.04)
  leg.SetFillColor(0)

  for i in range(len(histos)):
    normalize_histogram(histos[i])
    leg.AddEntry(histos[i], leg_entry[i])

  histos[0].SetLineColor(ROOT.kOrange-2)
  histos[0].SetFillColor(ROOT.kOrange-2)
  histos[0].SetStats(0)
  histos[0].SetTitle("")

  histos[1].SetLineColor(1)
  histos[1].SetLineWidth(2)

  c=TCanvas("c_%s" % plot_name,"c_%s" % plot_name, 800, 600)

  pad1 = TPad("pad1", "pad1", 0, 0.3, 1, 1.0)
  pad1.SetLeftMargin(0.15)
  pad1.SetBottomMargin(0) # Upper and lower plot are joined
  pad1.Draw()             # Draw the upper pad: pad1
  pad1.cd()               # pad1 becomes the current pad
  
  max_val = 0.1
  min_val = 0
  for i in range(len(histos)):
    max_val = max(histos[i].GetMaximum(), max_val)
    min_val = min(histos[i].GetMinimum(), min_val)
  
  for i in range(len(histos)):
    histos[i].SetMaximum(1.4*max_val)
    histos[i].SetMinimum(1.4*min_val)
    histos[i].GetXaxis().SetTitle(var_name)
    histos[i].GetYaxis().SetTitle("a.u.")
    histos[i].GetYaxis().SetTitleOffset(1.7)
    #histos[i].GetYaxis().SetTickLength(0)
    #histos[i].GetYaxis().SetLabelOffset(999)

  texl = TLatex(histos[0].GetBinLowEdge(1), 1.01*1.4*max_val, "CMS Preliminary, Simulation ttH #sqrt{s}=13 TeV")
  texl.SetTextSize(0.04)
  texl.Draw("same")

  histos[0].Draw("hist")
  histos[1].Draw("same")
  leg.Draw("same")
  texl.Draw("same")
  
  histos[0].GetYaxis().SetLabelSize(0.)
  axis = TGaxis(range_low, min_val, range_low, max_val, min_val, max_val, 510, "")
  axis.SetLabelFont(43) #Absolute font size in pixel (precision 3)
  axis.SetLabelSize(15)
  axis.Draw()
  
  # lower plot will be in pad
  c.cd()    # Go back to the main canvas before defining pad2
  pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3)
  pad2.SetLeftMargin(0.15)
  pad2.SetTopMargin(0)
  pad2.SetBottomMargin(0.35)
  pad2.Draw()
  pad2.cd()
  
  h_ratio = make_ratio_histogram("h_ratio", histos[1], histos[0])
  
  """
  h_ratio = h[1].Clone("h_ratio")
  """
  
  h_ratio.SetTitle("")
  h_ratio.Draw()       #Draw the ratio plot
  
  # Y axis histo_emul plot settings
  histos[0].GetYaxis().SetTitleSize(20)
  histos[0].GetYaxis().SetTitleFont(43)
  histos[0].GetYaxis().SetTitleOffset(1.5)
  
  # Ratio plot (h_ratio) settings
  #h_ratio.SetTitle("") # Remove the ratio title
  
  h_ratio.GetYaxis().SetLabelSize(0.)
  axis2 = TGaxis( range_low, 0.01, range_low, 1.99, 0.01, 1.99, 505,"")
  axis2.SetLabelFont(43) # Absolute font size in pixel (precision 3)
  axis2.SetLabelSize(15)
  axis2.Draw()
  
  # Y axis ratio plot settings
  h_ratio.GetYaxis().SetTitle("%s/%s" % (groupname2, groupname1))
  h_ratio.GetYaxis().SetNdivisions(505)
  h_ratio.GetYaxis().SetTitleSize(20)
  h_ratio.GetYaxis().SetTitleFont(43)
  h_ratio.GetYaxis().SetTitleOffset(1.5)
  #h_ratio.GetYaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3)
  #h_ratio.GetYaxis().SetLabelSize(15)

  
  # X axis ratio plot settings
  h_ratio.GetXaxis().SetTitleSize(20)
  h_ratio.GetXaxis().SetTitleFont(43)
  h_ratio.GetXaxis().SetTitleOffset(4.)
  h_ratio.GetXaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3)
  h_ratio.GetXaxis().SetLabelSize(15)

  
  line = TLine(range_low, 1., range_high,1.)
  line.Draw("same")

  plot_file_name="%s" % (var_name)
  dirname = ("%s_vs_%s/%s/%s" % (groupname1, groupname2, category, outdir)).replace(" ", "_")
  for file_format in ["png", "pdf"]:
      mkdir_p("plots_test/%s/%s" % (dirname, file_format))
      c.SaveAs("plots_test/%s/%s/%s.%s" % (dirname, file_format, plot_file_name, file_format))
Esempio n. 8
0
leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_exp_v1, v1_label + " Exp", "L")
leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_exp_v2, v2_label + " Exp", "L")
if drawObs:
    leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_obs_v1, v1_label + " Obs",
                                    "L")
    leg_2d_exclusion_v1_v2.AddEntry(graph_exclusion_obs_v2, v2_label + " Obs",
                                    "L")

leg_2d_exclusion_v1_v2.Draw()

drawCMS2(myC2D, 13, lumi)

f1_lambda = TF1("f1", "(x+6.00)/1.454", 72.902, 416.78)
A1_lambda = TGaxis(100.0, 0.02, 600.0, 0.02, "f1", 1010, "NI")
A1_lambda.SetLabelFont(42)
A1_lambda.SetLabelSize(0.035)
A1_lambda.SetTextFont(42)
A1_lambda.SetTextSize(1.2)
A1_lambda.SetTitle("#Lambda [TeV]")
A1_lambda.SetTitleSize(0.04)
A1_lambda.SetTitleOffset(0.9)
A1_lambda.Draw()

myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" +
             year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".pdf")
myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" +
             year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".png")
myC2D.SaveAs(outputDir + "/limits" + "/limit_exclusion_region_2D_" +
             year_to_plot + "_" + v1_tag + "_vs_" + v2_tag + ".C")
def plot_ratio(ih_,max_val_,xbins__,comb_ID_):

#    // Define two gaussian histograms. Note the X and Y title are defined
#    // at booking time using the convention "Hist_title ; X_title ; Y_title"
#    TH1F *h1 = new TH1F("h1", "Two gaussian plots and their ratio;x title; h1 and h2 gaussian histograms", 100, -5, 5);
#    TH1F *h2 = new TH1F("h2", "h2", 100, -5, 5);
#    h1.FillRandom("gaus");
#    h2.FillRandom("gaus");

#    // Define the Canvas
    #TCanvas *c = new TCanvas("c", "canvas", 800, 800);

    cc = TCanvas("cc", "canvas", 800, 800)

    h1 = ih_[0][0]
    h2 = ih_[1][0]

    #print 'h1 = ',h1
    #print 'h2 = ',h2 

    #print'h1.GetMaximum() = ' ,h1.GetMaximum() 

    #// Upper plot will be in pad1
    pad1 = TPad("pad1", "pad1", 0, 0.3, 1, 1.0)
    pad1.SetBottomMargin(0) # Upper and lower plot are joined
    #pad1.SetGridx()         #Vertical grid, dashed lines 

    pad1.Draw()            #Draw the upper pad: pad1
    pad1.cd()               # pad1 becomes the current pad
    h1.SetStats(0)          # No statistics on upper plot
    h1.GetXaxis().SetNdivisions(xbins__)
    h1.Draw()               # Draw h1

    # pad1.Update()
    # lline = TLine(pad1.GetUxmin(),20,pad1.GetUxmax(),20)
    # #lline.SetNDC(1)
    # lline.SetLineStyle(3)
    # lline.Draw('same')

    h2.Draw("same")         # Draw h2 on top of h1

    #    // Do not draw the Y axis label on the upper plot and redraw a small
    #    // axis instead, in order to avoid the first label (0) to be clipped.
    h1.GetYaxis().SetLabelSize(0.)
    #TGaxis *axis = new TGaxis( -5, 20, -5, 220, 20,220,510,"");
    #axis = TGaxis( -5, 20, -5, 220, 20,220,510,"") #xmin ymin xmax ymax 
    axis = TGaxis( 0, 0, 0, max_val_, 0.001,max_val_,510,"")
    axis.SetLabelFont(43) #Absolute font size in pixel (precision 3)
    axis.SetLabelSize(15)
    axis.Draw()

    #lower plot will be in pad
    cc.cd()           # Go back to the main canvas before defining pad2
    #TPad *pad2 = new TPad("pad2", "pad2", 0, 0.05, 1, 0.3)
    pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3)
    pad2.SetTopMargin(0) # can change to separate top and bottom 
    #pad2.SetBottomMargin(0.2)
    #pad2.SetBottomMargin(0)
    #pad2.SetGridx() # vertical grid, dashed lines 
    
    pad2.Draw()
    pad2.cd()      # pad2 becomes the current pad

    # Define the ratio plot
    #TH1F *h3 = (TH1F*)h1.Clone("h3");
    h3 = h2.Clone("h3")
    h3.SetLineColor(1)
    h3.SetMinimum(0.5)  # Define Y ..
    h3.SetMaximum(1.5) # .. range
    h3.Sumw2()
    h3.SetStats(0)     # No statistics on lower plot
    h3.Divide(h1)
    h3.SetMarkerStyle(21)

    #gPad.Modified()
    #gPad.Update()

    h3.Draw("ep")     # Draw the ratio plot

    pad2.Update()
    lline = TLine(pad2.GetUxmin(),1,pad2.GetUxmax(),1)
    #lline.SetNDC(1)
    lline.SetLineStyle(1)
    lline.Draw('same')


    #// h1 settings
    h1.SetLineColor(600+1)
    h1.SetLineWidth(2)

    #// Y axis h1 plot settings
    h1.GetYaxis().SetTitleSize(20)
    h1.GetYaxis().SetTitleFont(43)
    h1.GetYaxis().SetTitleOffset(1.55)

    #print 'xbins__ = ',xbins__ 
    
    h1.GetXaxis().SetNdivisions(xbins__)
    #h1.GetXaxis().SetNdivisions(0)

    #// h2 settings
    h2.SetLineColor(632)
    h2.SetLineWidth(2)

   # // Ratio plot (h3) settings
    h3.SetTitle("") # Remove the ratio title

    #// Y axis ratio plot settings
    h3.GetYaxis().SetTitle("Reco/Gen")
    h3.GetYaxis().SetNdivisions(505)
    h3.GetYaxis().SetTitleSize(20)
    h3.GetYaxis().SetTitleFont(43)
    h3.GetYaxis().SetTitleOffset(1.55)
    h3.GetYaxis().SetLabelFont(43) #Absolute font size in pixel (precision 3)
    h3.GetYaxis().SetLabelSize(15)

  #  // X axis ratio plot settings
    #h3.GetXaxis().SetNdivisions(xbins__)
    h3.GetXaxis().SetNdivisions(xbins__)
    #h3.GetXaxis().SetNdivisions(0)
    h3.GetXaxis().SetTitleSize(20)
    h3.GetXaxis().SetTitleFont(43)
    h3.GetXaxis().SetTitleOffset(4.)
    h3.GetXaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3)
    h3.GetXaxis().SetLabelSize(15)

    

    pad1.cd()

    leg_ = TLegend(0.6, 0.75, 0.89, 0.89)
    #for hi_,h_ in enumerate(hists_):
    a = ih_[:]
    #print'a = ',a
    #for i,hist_info_ in enumerate(a):
    for hist_info_ in a:
        this_h = hist_info_[0]
        this_label = hist_info_[1]
        
        leg_.AddEntry(this_h,this_label,'lf') # histo object, ID 
    #leg.SetTextSize(0.02)
    leg_.Draw('same')
    
    #cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".png")
    cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".pdf")
    cc.SaveAs(output_Loc + "Gen_Reco_" + comb_ID_ + ".png")

    return 0 
Esempio n. 10
0
    graph_exclusion_cms_8TeV_1g.SetFillColorAlpha(kAzure + 10, 0.65)
    graph_exclusion_cms_8TeV_1g.SetLineColorAlpha(kAzure + 10, 0.65)

    ######CMS 8TeV, two photons
    mass_cms_8TeV_2g = np.array([198., 227., 256., 256., 227., 198.])
    ctau_cms_8TeV_2g = 0.01 * np.array([0.4, 2, 9, 9, 25., 50.])
    graph_exclusion_cms_8TeV_2g = TGraph(6, mass_cms_8TeV_2g, ctau_cms_8TeV_2g)
    graph_exclusion_cms_8TeV_2g.SetFillColorAlpha(kGray, 0.6)
    graph_exclusion_cms_8TeV_2g.SetLineColorAlpha(kGray, 0.6)

    ####legend

    #Lambda axis
    f1_lambda = TF1("f1", "(x+6.00)/1.454", 72.902, 416.78)
    A1_lambda = TGaxis(100.0, 0.0125, 600.0, 0.0125, "f1", 1010, "NI")
    A1_lambda.SetLabelFont(42)
    A1_lambda.SetLabelSize(0.035)
    A1_lambda.SetTextFont(42)
    A1_lambda.SetTextSize(1.3)
    A1_lambda.SetTitle("#Lambda (TeV)")
    A1_lambda.SetTitleSize(0.04)
    A1_lambda.SetTitleOffset(0.9)

    ### only
    graph_exclusion_exp_ = TGraph(
        len(lambda_point_boundary_exp_),
        np.array(1.454 * lambda_point_boundary_exp_ - 6.0),
        0.01 * np.array(ctau_points))
    graph_exclusion_exp_p1sig_ = TGraph(
        len(lambda_point_boundary_exp_p1sig_),
        np.array(1.454 * lambda_point_boundary_exp_p1sig_ - 6.0),
        hRawYields.GetBinContent(iPt) -
        hRawYieldDistr[-1].GetMean()) / hRawYieldDistr[-1].GetMean() * 100
    syst = TMath.Sqrt(rms**2 + shift**2)
    hRMS.SetBinContent(iPt, rms)
    hMeanShift.SetBinContent(iPt, shift)
    hSyst.SetBinContent(iPt, syst)

cRMS = TCanvas('cRMS', '', 800, 800)
cRMS.DrawFrame(hRMS.GetBinLowEdge(1), 0.1, ptMax, 20.,
               ';#it{p}_{T} (GeV/#it{c});RMS (%)')
hRMS.DrawCopy('same')
axisSoverB = TGaxis(gPad.GetUxmax(), gPad.GetUymin(), gPad.GetUxmax(),
                    gPad.GetUymax(), 0.01, 20., 510, "+LG")
axisSoverB.SetLineColor(kRed + 1)
axisSoverB.SetLabelColor(kRed + 1)
axisSoverB.SetLabelFont(42)
axisSoverB.SetLabelSize(0.045)
axisSoverB.SetTitle('S/B (3#sigma)')
axisSoverB.SetTitleOffset(1.2)
axisSoverB.SetLabelOffset(0.012)
axisSoverB.SetTitleColor(kRed + 1)
axisSoverB.SetTitleFont(42)
axisSoverB.SetTitleSize(0.05)
axisSoverB.SetMaxDigits(3)
axisSoverB.Draw()
hSoverB.DrawCopy('same')
cRMS.Update()

cSyst = TCanvas('cSyst', '', 800, 800)
cSyst.DrawFrame(hSyst.GetBinLowEdge(1), 0.1, ptMax, 20.,
                ';#it{p}_{T} (GeV/#it{c}); Syst (%)')
Esempio n. 12
0
    def PlotOnCanvas(self, pdf_name):
        #gROOT.SetBatch(False)
        tdrstyle.setTDRStyle()
        canvas = TCanvas("c1", "c1", 600, 600)
        pad1 = TPad("pad1", "pad1", 0, 0.0, 1, 1.0)
        pad1.SetBottomMargin(0.32)
        pad1.SetGridx()
        pad1.Draw()
        pad1.cd()
        self.histo1.SetStats(0)
        self.histo1.Draw(self.option)
        self.histo2.Draw(self.option + " same")

        if self.logx:
            pad1.SetLogx()
        if self.logy:
            pad1.SetLogy()

        legend = TLegend(0.65, 0.7, 0.85, 0.83)
        legend.SetHeader("Legend", "C")
        legend.AddEntry(self.histo1, self.legend1, "l")
        legend.AddEntry(self.histo2, self.legend2, "l")
        legend.Draw()

        # Redraw axis to avoid clipping 0
        self.histo1.GetXaxis().SetLabelSize(0.)
        self.histo1.GetXaxis().SetTitle('')
        axis = TGaxis(-9, -2.8, -9, 2.8, 0, 10000, 50510, "")
        axis.SetLabelFont(43)
        axis.SetLabelSize(15)
        axis.Draw("same")

        pad2 = TPad("pad2", "pad2", 0, 0.0, 1, 0.3)
        pad2.SetTopMargin(0)
        pad2.SetBottomMargin(0.4)
        pad2.SetGridx()
        pad2.Draw()
        pad2.cd()

        if self.logx:
            pad2.SetLogx()

        self.ratio.SetLineColor(ROOT.kBlack)
        self.ratio.SetMinimum(0.5)
        self.ratio.SetMaximum(1.5)
        self.ratio.SetStats(0)
        self.ratio.SetMarkerStyle(21)
        self.ratio.Draw("ep")

        self.histo1.SetLineColor(ROOT.kBlue + 1)
        self.histo1.SetLineWidth(2)
        max_y = max(self.histo1.GetMaximum(), self.histo2.GetMaximum())
        self.histo1.SetMaximum(max_y * 1.1)
        self.histo1.GetYaxis().SetNdivisions(505)
        self.histo1.GetYaxis().SetTitleSize(20)
        self.histo1.GetYaxis().SetTitleFont(43)
        self.histo1.GetYaxis().SetTitleOffset(1.8)

        self.histo2.SetLineColor(ROOT.kRed)
        self.histo2.SetLineWidth(2)

        self.ratio.SetTitle("")

        self.ratio.GetYaxis().SetTitle("Ratio")
        self.ratio.GetYaxis().SetNdivisions(505)
        self.ratio.GetYaxis().SetTitleSize(20)
        self.ratio.GetYaxis().SetTitleFont(43)
        self.ratio.GetYaxis().SetTitleOffset(1.8)
        self.ratio.GetYaxis().SetLabelFont(43)
        self.ratio.GetYaxis().SetLabelSize(15)

        self.ratio.GetXaxis().SetNdivisions(510)
        self.ratio.GetXaxis().SetTitleSize(20)
        self.ratio.GetXaxis().SetTitleFont(43)
        self.ratio.GetXaxis().SetTitleOffset(4.)
        self.ratio.GetXaxis().SetLabelFont(43)
        self.ratio.GetXaxis().SetLabelSize(15)

        ROOT.SetOwnership(canvas, False)
        ROOT.SetOwnership(pad1, False)
        ROOT.SetOwnership(pad2, False)

        canvas.Print(pdf_name, 'Title:' + self.title)
        canvas.Close()
Esempio n. 13
0
def ratio_plot(h1,
               h2,
               legend,
               name='c',
               dim=(800, 600),
               mode='',
               l_range=(0, 0),
               l_y_title=''):

    if not isinstance(dim, collections.abc.Sequence):
        raise TypeError("The variable 'dim' has a wrong type")
    elif len(dim) != 2:
        raise ValueError("Wrong length given for list 'dim'")

    if not isinstance(l_range, collections.abc.Sequence):
        raise TypeError("The variable 'l_range' has a wrong type")
    elif len(l_range) != 2:
        raise ValueError("Wrong length given for list 'l_range'")

    if name == 'c':
        name = name + '_' + random_string()

    c = TCanvas(name, '', dim[0], dim[1])

    pad1 = TPad('pad1', 'pad1', 0, 0.3, 1, 1.0)
    pad1.SetBottomMargin(0)  # Upper and lower plot are joined
    pad1.Draw()  # Draw the upper pad: pad1
    pad1.cd()  # pad1 becomes the current pad

    h1.SetStats(0)
    h1.Draw()

    h2opt = h2.GetOption() + 'SAME'
    h2.Draw(h2opt)

    legend.Draw()

    axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, '')
    axis.SetLabelFont(43)  # Absolute font size in pixel (precision 3)
    axis.SetLabelSize(20)
    axis.SetTitleFont(43)
    axis.SetTitleSize(20)
    axis.SetTitleOffset(1.3)
    axis.Draw()
    c.Update()

    # lower plot will be in pad
    c.cd()  # Go back to the main canvas before defining pad2
    pad2 = TPad('pad2', 'pad2', 0, 0.01, 1., 0.30)
    pad2.SetTopMargin(0.0)
    pad2.SetBottomMargin(0.28)
    pad2.SetGridy(1)
    pad2.Draw()
    pad2.cd()  # pad2 becomes the current pad

    # Define the ratio plot
    h3 = h1.Clone('h3')
    h3.SetLineColor(kPurpleC)
    h3.SetMarkerColor(kPurpleC)
    h3.SetMarkerSize(0.5)
    h3.Sumw2()
    h3.SetStats(0)  # No statistics on lower plot

    if (mode == 'ratio'):
        h3.Divide(h2)
    if (mode == 'diff'):
        h3.Add(h2, -1.)

    h3.SetMarkerStyle(21)
    h3.Draw('ep')  # Draw the ratio plot

    # Remove the ratio title
    h3.SetTitle('')

    # Y axis ratio plot settings
    l_title = ''
    if l_y_title == '':
        l_title = mode + '   '
    else:
        l_title = l_y_title

    h3.GetYaxis().SetTitle(l_title)
    h3.GetYaxis().SetNdivisions(505)
    h3.GetYaxis().SetTitleSize(20)
    h3.GetYaxis().SetTitleFont(43)
    h3.GetYaxis().SetTitleOffset(1.2)
    h3.GetYaxis().SetLabelFont(43)
    # Absolute font size in pixel(precision 3)
    h3.GetYaxis().SetLabelSize(16)
    if l_range != (0, 0):
        h3.GetYaxis().SetRangeUser(l_range[0], l_range[1])

    # X axis ratio plot settings
    h3.GetXaxis().SetTitleSize(20)
    h3.GetXaxis().SetTitleFont(43)
    h3.GetXaxis().SetTitleOffset(3.5)
    h3.GetXaxis().SetLabelFont(43)
    # Absolute font size in pixel(precision 3)
    h3.GetXaxis().SetLabelSize(18)

    c.Write()
    c.Close()
Esempio n. 14
0
corrected_nue.SetLineColor(38)
simple_nue.SetLineColor(46)
corrected_nue.SetLineWidth(4)
simple_nue.SetLineWidth(4)
simple_nue.GetXaxis().SetRangeUser(0, 4)
corrected_nue.GetXaxis().SetRangeUser(0, 4)

simple_nue.Draw("hist")
corrected_nue.Draw("hist same")


# Do not draw the Y axis label on the upper plot and redraw a small
# axis instead, in order to avoid the first label (0) to be clipped.
corrected_nue.GetYaxis().SetLabelSize(0.)
axis = TGaxis(-5, 20, -5, 220, 20, 220, 510, "")
axis.SetLabelFont(43)  # Absolute font size in pixel (precision 3)
axis.SetLabelSize(15)
axis.Draw()

leg_nue = TLegend(0.75, 0.95, 0.75, 0.95)
leg_nue.AddEntry(simple_nue, "nue std. Flux",  "l")
leg_nue.AddEntry(corrected_nue,  "nue cor. Flux",    "l")
leg_nue.Draw()

c6.cd()
pad2 = TPad("pad2", "pad2", 0, 0.05, 1, 0.3)
pad2.SetTopMargin(0.1)
pad2.SetBottomMargin(0.1)
pad2.SetGridx()  # vertical grid
pad2.Draw()
pad2.cd()  # pad2 becomes the current pad