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")
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))
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")
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
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))
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
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 (%)')
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()
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()
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