Example #1
0
 def _draw_materials_2d(self, step_data, material_dict, x_range, z_range):
     """Make a 2D plot of position vs material in r, z"""
     # we plot G4_AIR first, then G4_GALACTIC?
     canvas = common.make_root_canvas("Material vs position")
     hist, graph = common.make_root_graph("Material vs position", [1e9],
                                          "z [mm]", [1e9],
                                          "r [mm]",
                                          xmin=z_range[0],
                                          xmax=z_range[1],
                                          ymin=x_range[0],
                                          ymax=x_range[1])
     hist.Draw()
     draw_list = step_data.keys()
     draw_list = self.move(draw_list, "G4_AIR", 0)
     draw_list = self.move(draw_list, "G4_Galactic", 1)
     graph_list = []
     for material in draw_list:
         x_list = [step["r"] for step in step_data[material]]
         z_list = [step["z"] for step in step_data[material]]
         hist, graph = common.make_root_graph(material, z_list, "z [mm]",
                                              x_list, "r [mm]")
         graph.SetMarkerColor(material_dict[material])
         graph.SetMarkerStyle(7)
         graph.SetLineColor(10)
         graph.Draw('p')
         graph_list.append(graph)
     common.make_root_legend(canvas, graph_list)
     canvas.Update()
     for _format in self.formats:
         canvas.Print(self.mat_2d + "." + _format)
def main():
    data = load_json("single_tracking.json")
    plot_heat(data)
    heat_canvas = None
    for plane in range(len(data[0]["an_area_list"])):
        heat_canvas = plot_heat(data, plane, heat_canvas)

    graph_z_list = []
    graph_traj_list = []
    canvas_z = None
    canvas_traj = None
    line_color_index = 0
    plot_data = select(data, [(a*20., a*2.) for a in range(11)])
    for item in reversed(plot_data):
        line_color_index += 1
        pos = 1.*line_color_index/(len(plot_data)+1)
        red = 0.5*(math.sin(2*math.pi*pos)+1.)
        green = 0.5*(math.cos(2*math.pi*pos)+1.)
        blue = 0.5
        norm = (red**2+green**2+blue**2)**0.5
        red, green, blue = red/norm, green/norm, blue/norm
        line_color = ROOT.TColor.GetColor(red, green, blue)
        canvas_z, graph_z = plot_z(item, line_color, False, canvas_z)
        canvas_traj, graph_traj = plot_trajectory(item, line_color, canvas_traj)
        graph_z_list.append(graph_z)
        graph_traj_list.append(graph_traj)
    common.make_root_legend(canvas_traj, graph_traj_list)
    common.make_root_legend(canvas_z, graph_z_list)
Example #3
0
 def _draw_materials_2d(self, step_data, material_dict, x_range, z_range):
     """Make a 2D plot of position vs material in r, z"""
     # we plot G4_AIR first, then G4_GALACTIC?
     canvas = common.make_root_canvas("Material vs position")
     hist, graph = common.make_root_graph("Material vs position",
                                          [1e9], "z [mm]",
                                          [1e9], "r [mm]",
                                          xmin=z_range[0], xmax=z_range[1],
                                          ymin=x_range[0], ymax=x_range[1])
     hist.Draw()
     draw_list = step_data.keys()
     draw_list = self.move(draw_list, "G4_AIR", 0)
     draw_list = self.move(draw_list, "G4_Galactic", 1)
     graph_list = []
     for material in draw_list:
         x_list = [step["r"] for step in step_data[material]]
         z_list = [step["z"] for step in step_data[material]]
         hist, graph = common.make_root_graph(material,
                                              z_list, "z [mm]",
                                              x_list, "r [mm]")
         graph.SetMarkerColor(material_dict[material])
         graph.SetMarkerStyle(7)
         graph.SetLineColor(10)
         graph.Draw('p')
         graph_list.append(graph)
     common.make_root_legend(canvas, graph_list)
     canvas.Update()
     for _format in self.formats:
         canvas.Print(self.mat_2d+"."+_format)
Example #4
0
def main():
    data = load_json("single_tracking.json")
    plot_heat(data)
    heat_canvas = None
    for plane in range(len(data[0]["an_area_list"])):
        heat_canvas = plot_heat(data, plane, heat_canvas)

    graph_z_list = []
    graph_traj_list = []
    canvas_z = None
    canvas_traj = None
    line_color_index = 0
    plot_data = select(data, [(a * 20., a * 2.) for a in range(11)])
    for item in reversed(plot_data):
        line_color_index += 1
        pos = 1. * line_color_index / (len(plot_data) + 1)
        red = 0.5 * (math.sin(2 * math.pi * pos) + 1.)
        green = 0.5 * (math.cos(2 * math.pi * pos) + 1.)
        blue = 0.5
        norm = (red**2 + green**2 + blue**2)**0.5
        red, green, blue = red / norm, green / norm, blue / norm
        line_color = ROOT.TColor.GetColor(red, green, blue)
        canvas_z, graph_z = plot_z(item, line_color, False, canvas_z)
        canvas_traj, graph_traj = plot_trajectory(item, line_color,
                                                  canvas_traj)
        graph_z_list.append(graph_z)
        graph_traj_list.append(graph_traj)
    common.make_root_legend(canvas_traj, graph_traj_list)
    common.make_root_legend(canvas_z, graph_z_list)
def demit_graph(material, mom, thickness):
    emittance_canvas = None
    graph_list = []
    for eps, color in [(3., ROOT.kRed), (6., ROOT.kRed + 2), (10., 1)]:
        emittance_canvas, hist, graph = dbeta_graph(material, eps, mom,
                                                    thickness,
                                                    emittance_canvas, color)
        hist.SetTitle(str(thickness) + " mm " + material + " p = " + str(mom))
        graph_list.append(graph)
    common.make_root_legend(emittance_canvas, graph_list)
    emittance_canvas.Update()
    emittance_canvas.Print("demit_" + material + "_" + str(mom) + ".eps")
Example #6
0
def plot_fields(data, plot_dir, foil_probe, foil_var, axis_name):
    bump_fields = {}
    bump_position = get_bump_position(data, foil_probe, foil_var)
    for bump in data:
        for key in bump["bump_fields"]:
            if key not in bump_fields:
                bump_fields[key] = []
            bump_fields[key].append(bump["bump_fields"][key])
    print("bump_fields = {")
    for key in bump_fields:
        print("    \"" + key + "\" :", bump_fields[key], ",")
    print("}")
    canvas = common.make_root_canvas("fields")
    all_fields = []
    for key in bump_fields:
        all_fields += bump_fields[key]
    delta = 0.2
    max_pos = (1. + delta) * max(bump_position) - delta * min(bump_position)
    hist, graph = common.make_root_graph(
        "fields",
        bump_position * len(bump_fields) + [max_pos], axis_name,
        all_fields + [0.], "Dipole field [T]")
    hist.Draw()
    color = [
        ROOT.kBlue, ROOT.kGreen + 2, ROOT.kRed, ROOT.kYellow + 2,
        ROOT.kCyan + 1
    ]
    marker = [20, 24, 21, 25]
    leg_list = []
    index = 0
    marker_index = 0
    for key, field in sorted(bump_fields.items()):
        name = key.replace("__", "")
        name = name.replace("_", " ")
        hist, graph = common.make_root_graph(name, bump_position, axis_name,
                                             field, "Dipole field [T]")
        graph.SetMarkerStyle(marker[marker_index])
        graph.SetMarkerColor(color[index])
        graph.SetLineColor(color[index])
        graph.SetLineStyle(color[index])
        graph.Draw("lpsame")
        leg_list.append(graph)
        index += 1
        if index == len(color):
            index = 0
            marker_index += 1
    leg = common.make_root_legend(canvas, leg_list)
    leg.SetBorderSize(1)
    leg.SetX1NDC(0.75)
    leg.SetX2NDC(0.9)
    leg.SetY1NDC(0.5)
    leg.SetY2NDC(0.9)
    leg.Draw()
    canvas.Update()
    for format in ["png"]:
        canvas.Print(plot_dir + "/bump_fields." + format)
def main():
    #test_energy_loss()
    eqm_graph("beryllium")
    eqm_graph("carbon")
    eqm_graph("liquid_hydrogen")
    eqm_graph("gaseous_hydrogen")

    demit_graph("liquid_hydrogen", 140., 350.)
    demit_graph("aluminium", 140., 1.)
    demit_graph("lithium_hydride", 140., 65.)

    #emittance_canvas.Print("plots/emittance_vs_demittance.png")
    #emittance_canvas = dp_graph()
    #emittance_canvas.Print("plots/emittance_vs_dp.png")
    return
    emittance_canvas, hist, graph_3 = dbeta_graph(3, None, 2)
    emittance_canvas, hist, graph_6 = dbeta_graph(6, emittance_canvas, 4)
    emittance_canvas, hist, graph_12 = dbeta_graph(12, emittance_canvas, 6)
    common.make_root_legend(emittance_canvas, [graph_3, graph_6, graph_12])
    emittance_canvas.Print("plots/emittance_vs_dbeta.png")
    emittance_canvas.Print("plots/emittance_vs_dbeta.root")
def eqm_graph(material):
    channel = CoolingChannel(material, 11.)
    channel.mass = common.pdg_pid_to_mass[2212]
    canvas = None
    ke_list = [1] + list(range(5, 31, 5))
    graph_list = []
    print(material)
    for i, ke in enumerate(ke_list):
        i_rat = i / float(len(ke_list))
        if i_rat > 0.5:
            color = ROOT.TColor.GetColor(0., i_rat, (1. - i_rat) * 2)
        else:
            color = ROOT.TColor.GetColor(i_rat * 2, 0., 0.)
        channel.set_ke(ke)
        print(ke, channel.p, channel.dEdz())
        beta_list = [float(i) for i in range(100, 5001, 100)]
        eqm_list = []
        for beta in beta_list:
            channel.beta_hill = beta
            eqm_list.append(channel.eqm_emittance())
        #print beta_list, eqm_list
        hist, graph = common.make_root_graph("KE = " + str(ke) + " MeV",
                                             beta_list,
                                             "#beta [mm]",
                                             eqm_list,
                                             "#varepsilon_{n} [mm]",
                                             ymin=0.,
                                             ymax=3.)
        if canvas == None:
            canvas = common.make_root_canvas("eqm_graph - " + material)
            canvas.Draw()
            hist.SetTitle(material)
            hist.Draw()
        graph.SetLineColor(color)
        graph.Draw("SAME")
        graph_list.append(graph)
    common.make_root_legend(canvas, graph_list)
    canvas.Update()
Example #9
0
def plot_fields(data, plot_dir, foil_probe):
    print("\nfield", end=' ')
    bump_fields = [[], [], [], []]
    bump_position = []
    for bump_run in data:
        bump_position += [
            bump["tracking"][foil_probe][1] for bump in bump_run["bumps"]
        ]
        for bump in bump_run["bumps"]:
            for i in range(4):
                bump_fields[i].append(bump["bump_fields"][i])
    canvas = common.make_root_canvas("fields")
    all_fields = bump_fields[0] + bump_fields[1] + bump_fields[
        2] + bump_fields[3]
    delta = 0.2
    max_pos = (1. + delta) * max(bump_position) - delta * min(bump_position)
    hist, graph = common.make_root_graph("fields",
                                         bump_position * 4 + [max_pos],
                                         "Radial position [mm]",
                                         all_fields + [0.], "Dipole field [T]")
    hist.Draw()
    color = [ROOT.kBlue, ROOT.kGreen + 2, ROOT.kRed, ROOT.kYellow + 2]
    leg_list = []
    for i, field in enumerate(bump_fields):
        hist, graph = common.make_root_graph("Bump " + str(i + 1),
                                             bump_position,
                                             "Radial position [mm]", field,
                                             "Dipole field [T]")
        graph.SetMarkerStyle(20)
        graph.SetMarkerColor(color[i])
        graph.SetLineColor(color[i])
        graph.Draw("lpsame")
        leg_list.append(graph)
    leg = common.make_root_legend(canvas, leg_list)
    leg.SetBorderSize(1)
    leg.SetX1NDC(0.75)
    leg.SetX2NDC(0.9)
    leg.SetY1NDC(0.5)
    leg.SetY2NDC(0.9)
    leg.Draw()
    canvas.Update()
    for format in "eps", "png", "root":
        canvas.Print(plot_dir + "/bump_fields." + format)
def plot(plot_dir, data_list_pairs):
    tmp_data = []
    for i, data in enumerate(data_list_pairs):
        pos_peak = numpy.mean(
            [x["y"] for x in data["RF"]["pos_peak_with_errors"]])
        neg_peak = numpy.mean(
            [-x["y"] for x in data["RF"]["neg_peak_with_errors"]])
        voltage = (pos_peak - neg_peak)
        data["rf_peak_to_peak_voltage"] = voltage
        rf_list = ["0.2", "0.32", "0.46", "0.62", "0.81", "3.01", "7.18"]
        if True or str(round(voltage, 2)) in rf_list:
            print "Using", voltage
            tmp_data.append(data)
        else:
            print "Not using", voltage
    data_list_pairs = tmp_data
    peak_delta_canvas = common.make_root_canvas("delta rf vs bpm")
    peak_delta_canvas.Draw()
    peak_delta_hist_canvas = common.make_root_canvas("delta rf vs bpm - hist")
    peak_delta_hist_canvas.Draw()
    graph_list = []
    hist_list = []
    dt_mean_list = []
    dt_err_list = []
    measured_voltage_list = []
    max_y = -1e9
    min_y = 1e9
    delta_hist_min = 1e9
    delta_hist_max = -1e9
    for i, data in enumerate(data_list_pairs):
        """
        voltage_str = "V="+str(round(data["rf_peak_to_peak_voltage"], 2))
        print "Plotting measured "+voltage_str
        formats = ["png", "root"]
        times = data["RF"]["time_list"]

        rf_voltage_list = data["RF"]["voltage_list"]
        rf_peak_error_list = data["RF"]["pos_peak_with_errors"]
        rf_peak_list = [x["x"] for x in rf_peak_error_list]
        rf_period = sum([rf_peak_list[j+1] - rf_peak_list[j] for j, index in enumerate(rf_peak_list[:-1])])  
        rf_period = DT*rf_period/float(len(rf_peak_list))
        rf_frequency = 1./rf_period
        print "  RF Period", rf_period, "Frequency", rf_frequency

        print "  Plotting RF magnitude and error"
        canvas_rf_v, hist_rf_v, graph_rf_v = graph_peak_magnitude(data["RF"]["pos_peak_with_errors"], data["RF"]["neg_peak_with_errors"], title=voltage_str)
        for format in formats:
            canvas_rf_v.Print(plot_dir+voltage_str+"_rf_voltage."+format)

        print "  Plotting peak finding errors"
        canvas_err, hist_err, graph_err = graph_peak_errors(data["signal"]["peak_with_errors"], 4, title=voltage_str)
        graph_peak_errors(data["RF"]["pos_peak_with_errors"], 2, canvas_err)
        for format in formats:
            canvas_err.Print(plot_dir+voltage_str+"_peak_errors."+format)

        print "  Plotting peak to peak distance"
        print "    signal",
        canvas_pp, hist_pp, graph_pp = graph_delta_times(data["signal"]["peak_with_errors"], 4, title=voltage_str)
        print "    RF",
        graph_delta_times(data["RF"]["pos_peak_with_errors"], 2, canvas_pp)
        for format in formats:
            canvas_pp.Print(plot_dir+voltage_str+"_peak_deltas."+format)

        print "  Plotting data"
        y_range = common.min_max(data["RF"]["voltage_list"]+data["signal"]["voltage_list"]+data["dc_signal"]["voltage_list"])
        canvas, hist, graph, peak_hist, peak_graph = graph_peak_times(data["RF"], data["RF"]["pos_peak_with_errors"], 2, y_range, title=voltage_str)
        bpm_peak_indices = data["signal"]["peak_indices"]
        bpm_voltage_list = data["signal"]["voltage_list"]
        bpm_peak_list = [index for index in bpm_peak_indices]
        graph_peak_times(data["signal"], data["signal"]["peak_with_errors"], 4, y_range, canvas)
        graph_peak_times(data["dc_signal"], [{"x":0, "y":0}], 6, y_range, canvas)
        canvas.Update()
        for format in formats:
            canvas.Print(plot_dir+voltage_str+"_signals."+format)
        """

        print "  Plotting distance between bpm and rf peaks"
        peak_delta_canvas.cd()
        peak_time_list = data["peak_time_list"]
        peak_delta_list = data["peak_delta_list"]

        hist, graph = common.make_root_graph(voltage_str, peak_time_list,
                                             "time [ns]", peak_delta_list,
                                             "dt [ns]")
        min_y = min([hist.GetYaxis().GetXmin(), min_y])
        max_y = max([hist.GetYaxis().GetXmax(), max_y])
        if len(data_list_pairs) > 1:
            hist.Draw()
            color_fraction = float(i) / float(len(data_list_pairs) - 1)
        else:
            color_fraction = 1
        color = ROOT.TColor.GetColor(color_fraction, 1. - color_fraction, 0)
        graph.SetMarkerColor(color)
        graph.SetLineColor(color)
        graph.SetMarkerStyle(6)
        graph_list.append(graph)

        peak_delta_hist_canvas.cd()
        filtered_list = []
        for j, peak in enumerate(peak_delta_list):
            if peak_time_list[j] > 30.e3 and \
               peak_time_list[j] < 40.e3:
                filtered_list.append(peak)
        if len(filtered_list) > 0:
            dt_mean_list.append(max(filtered_list))
            #dt_err_list.append(numpy.std(filtered_list)/len(filtered_list)**0.5)
            measured_voltage_list.append(data["rf_peak_to_peak_voltage"])
        hist = common.make_root_histogram(voltage_str, filtered_list,
                                          "dt [ns]", 4)
        delta_hist_min = min([hist.GetXaxis().GetXmin(), delta_hist_min])
        delta_hist_max = max([hist.GetXaxis().GetXmax(), delta_hist_max])
        hist.SetLineColor(color)
        hist_list.append(hist)

    peak_delta_canvas.cd()
    hist, graph = common.make_root_graph(voltage_str,
                                         peak_time_list,
                                         "t [ns]",
                                         peak_delta_list,
                                         "dt [ns]",
                                         ymin=0.,
                                         ymax=700.)
    hist.Draw()  # redraw hist to get axes right
    for graph in graph_list:
        graph.Draw("p")
    legend = common.make_root_legend(peak_delta_canvas, graph_list)
    legend.Draw()
    peak_delta_canvas.Update()
    for format in formats:
        peak_delta_canvas.Print(plot_dir + "bpm_to_rf_deltas." + format)

    peak_delta_hist_canvas.cd()
    print delta_hist_min, delta_hist_max
    hist = common.make_root_histogram(voltage_str, [-1],
                                      "dt [ns]",
                                      1000, [-1],
                                      "Counts",
                                      1000,
                                      xmin=delta_hist_min,
                                      xmax=delta_hist_max,
                                      ymin=1e-2,
                                      ymax=20.)
    hist.Draw()  # redraw hist to get axes right
    for a_hist in hist_list:
        a_hist.Draw("same")
    legend = common.make_root_legend(peak_delta_hist_canvas, hist_list)
    legend.Draw()
    peak_delta_hist_canvas.Update()
    for format in formats:
        peak_delta_hist_canvas.Print(plot_dir + "bpm_to_rf_deltas_hist." +
                                     format)

    if len(dt_mean_list) < 2:
        return
    phase_mean_list = [
        2. * math.pi * dt / rf_period for dt in dt_mean_list[1:]
    ]
    measured_voltage_list = measured_voltage_list[1:]
    for popper in []:
        phase_mean_list.pop(popper)
        phase_err_list.pop(popper)
        measured_voltage_list.pop(popper)
    synchronous_phase_canvas = common.make_root_canvas(
        "Synchronous phase vs voltage")
    hist, graph = common.make_root_graph("Synchronous phase vs voltage",
                                         phase_mean_list, "#phi [rad]",
                                         measured_voltage_list, "V [au]")
    graph = ROOT.TGraph(len(phase_mean_list))
    graph.SetMarkerStyle(4)
    for i in range(len(phase_mean_list)):
        graph.SetPoint(i, phase_mean_list[i], measured_voltage_list[i])

    print phase_mean_list
    print measured_voltage_list
    hist.Draw()
    graph.Draw('p')
    print "Doing unweighted fit"
    fit_unweighted = ROOT.TF1("fit", "[0]/sin([1]+x)")
    fit_unweighted.SetParameter(0, 0.1)
    fit_unweighted.SetParameter(1, 0.)
    fit_unweighted.SetLineColor(4)
    graph.Fit(fit_unweighted, "EX0")
    fit_unweighted.Draw("SAME")
    synchronous_phase_canvas.Update()
    for format in formats:
        synchronous_phase_canvas.Print(
            plot_dir + "synchronous_phase_vs_voltage_unweighted." + format)
def plot(plot_dir, data_list_pairs):
    tmp_data = []
    for i, data in enumerate(data_list_pairs):
        pos_peak = numpy.mean([x["y"] for x in data["RF"]["pos_peak_with_errors"]])
        neg_peak = numpy.mean([-x["y"] for x in data["RF"]["neg_peak_with_errors"]])
        voltage = (pos_peak-neg_peak)
        data["rf_peak_to_peak_voltage"] = voltage
        rf_list = ["0.2", "0.32", "0.46", "0.62", "0.81", "3.01", "7.18"]
        if True or str(round(voltage, 2)) in rf_list:
            print "Using", voltage
            tmp_data.append(data)
        else:
            print "Not using", voltage
    data_list_pairs = tmp_data
    peak_delta_canvas = common.make_root_canvas("delta rf vs bpm")
    peak_delta_canvas.Draw()
    peak_delta_hist_canvas = common.make_root_canvas("delta rf vs bpm - hist")
    peak_delta_hist_canvas.Draw()
    graph_list = []
    hist_list = []
    dt_mean_list = []
    dt_err_list = []
    measured_voltage_list = []
    max_y = -1e9
    min_y = 1e9
    delta_hist_min = 1e9
    delta_hist_max = -1e9
    for i, data in enumerate(data_list_pairs):
        """
        voltage_str = "V="+str(round(data["rf_peak_to_peak_voltage"], 2))
        print "Plotting measured "+voltage_str
        formats = ["png", "root"]
        times = data["RF"]["time_list"]

        rf_voltage_list = data["RF"]["voltage_list"]
        rf_peak_error_list = data["RF"]["pos_peak_with_errors"]
        rf_peak_list = [x["x"] for x in rf_peak_error_list]
        rf_period = sum([rf_peak_list[j+1] - rf_peak_list[j] for j, index in enumerate(rf_peak_list[:-1])])  
        rf_period = DT*rf_period/float(len(rf_peak_list))
        rf_frequency = 1./rf_period
        print "  RF Period", rf_period, "Frequency", rf_frequency

        print "  Plotting RF magnitude and error"
        canvas_rf_v, hist_rf_v, graph_rf_v = graph_peak_magnitude(data["RF"]["pos_peak_with_errors"], data["RF"]["neg_peak_with_errors"], title=voltage_str)
        for format in formats:
            canvas_rf_v.Print(plot_dir+voltage_str+"_rf_voltage."+format)

        print "  Plotting peak finding errors"
        canvas_err, hist_err, graph_err = graph_peak_errors(data["signal"]["peak_with_errors"], 4, title=voltage_str)
        graph_peak_errors(data["RF"]["pos_peak_with_errors"], 2, canvas_err)
        for format in formats:
            canvas_err.Print(plot_dir+voltage_str+"_peak_errors."+format)

        print "  Plotting peak to peak distance"
        print "    signal",
        canvas_pp, hist_pp, graph_pp = graph_delta_times(data["signal"]["peak_with_errors"], 4, title=voltage_str)
        print "    RF",
        graph_delta_times(data["RF"]["pos_peak_with_errors"], 2, canvas_pp)
        for format in formats:
            canvas_pp.Print(plot_dir+voltage_str+"_peak_deltas."+format)

        print "  Plotting data"
        y_range = common.min_max(data["RF"]["voltage_list"]+data["signal"]["voltage_list"]+data["dc_signal"]["voltage_list"])
        canvas, hist, graph, peak_hist, peak_graph = graph_peak_times(data["RF"], data["RF"]["pos_peak_with_errors"], 2, y_range, title=voltage_str)
        bpm_peak_indices = data["signal"]["peak_indices"]
        bpm_voltage_list = data["signal"]["voltage_list"]
        bpm_peak_list = [index for index in bpm_peak_indices]
        graph_peak_times(data["signal"], data["signal"]["peak_with_errors"], 4, y_range, canvas)
        graph_peak_times(data["dc_signal"], [{"x":0, "y":0}], 6, y_range, canvas)
        canvas.Update()
        for format in formats:
            canvas.Print(plot_dir+voltage_str+"_signals."+format)
        """

        print "  Plotting distance between bpm and rf peaks"
        peak_delta_canvas.cd()
        peak_time_list = data["peak_time_list"]
        peak_delta_list = data["peak_delta_list"]

        hist, graph = common.make_root_graph(voltage_str, peak_time_list, "time [ns]", peak_delta_list, "dt [ns]")
        min_y = min([hist.GetYaxis().GetXmin(), min_y])
        max_y = max([hist.GetYaxis().GetXmax(), max_y])
        if len(data_list_pairs) > 1:
            hist.Draw()
            color_fraction = float(i)/float(len(data_list_pairs)-1)
        else:
            color_fraction = 1
        color = ROOT.TColor.GetColor(color_fraction, 1.-color_fraction, 0)
        graph.SetMarkerColor(color)
        graph.SetLineColor(color)
        graph.SetMarkerStyle(6)
        graph_list.append(graph)

        peak_delta_hist_canvas.cd()
        filtered_list = []
        for j, peak in enumerate(peak_delta_list):
            if peak_time_list[j] > 30.e3 and \
               peak_time_list[j] < 40.e3:
                filtered_list.append(peak)
        if len(filtered_list) > 0:
            dt_mean_list.append(max(filtered_list))
            #dt_err_list.append(numpy.std(filtered_list)/len(filtered_list)**0.5)
            measured_voltage_list.append(data["rf_peak_to_peak_voltage"])
        hist = common.make_root_histogram(voltage_str, filtered_list, "dt [ns]", 4)
        delta_hist_min = min([hist.GetXaxis().GetXmin(), delta_hist_min])
        delta_hist_max = max([hist.GetXaxis().GetXmax(), delta_hist_max])
        hist.SetLineColor(color)
        hist_list.append(hist)

    peak_delta_canvas.cd()
    hist, graph = common.make_root_graph(voltage_str, peak_time_list, "t [ns]", peak_delta_list, "dt [ns]", ymin=0., ymax=700.)
    hist.Draw() # redraw hist to get axes right
    for graph in graph_list:
        graph.Draw("p")
    legend = common.make_root_legend(peak_delta_canvas, graph_list)
    legend.Draw()
    peak_delta_canvas.Update() 
    for format in formats:
        peak_delta_canvas.Print(plot_dir+"bpm_to_rf_deltas."+format)

    peak_delta_hist_canvas.cd()
    print delta_hist_min, delta_hist_max
    hist = common.make_root_histogram(voltage_str, [-1], "dt [ns]", 1000, [-1], "Counts", 1000, xmin=delta_hist_min, xmax=delta_hist_max, ymin=1e-2, ymax=20.)
    hist.Draw() # redraw hist to get axes right
    for a_hist in hist_list:
        a_hist.Draw("same")
    legend = common.make_root_legend(peak_delta_hist_canvas, hist_list)
    legend.Draw()
    peak_delta_hist_canvas.Update()
    for format in formats:
        peak_delta_hist_canvas.Print(plot_dir+"bpm_to_rf_deltas_hist."+format)

    if len(dt_mean_list) < 2:
        return
    phase_mean_list = [2.*math.pi*dt/rf_period for dt in dt_mean_list[1:]]
    measured_voltage_list = measured_voltage_list[1:]
    for popper in []:
        phase_mean_list.pop(popper)
        phase_err_list.pop(popper)
        measured_voltage_list.pop(popper)
    synchronous_phase_canvas = common.make_root_canvas("Synchronous phase vs voltage")
    hist, graph = common.make_root_graph("Synchronous phase vs voltage", phase_mean_list, "#phi [rad]", measured_voltage_list, "V [au]")
    graph = ROOT.TGraph(len(phase_mean_list))
    graph.SetMarkerStyle(4)
    for i in range(len(phase_mean_list)):
        graph.SetPoint(i, phase_mean_list[i], measured_voltage_list[i])

    print phase_mean_list 
    print measured_voltage_list
    hist.Draw()
    graph.Draw('p')
    print "Doing unweighted fit"
    fit_unweighted = ROOT.TF1("fit", "[0]/sin([1]+x)")
    fit_unweighted.SetParameter(0, 0.1)
    fit_unweighted.SetParameter(1, 0.)
    fit_unweighted.SetLineColor(4)
    graph.Fit(fit_unweighted, "EX0")
    fit_unweighted.Draw("SAME")
    synchronous_phase_canvas.Update()    
    for format in formats:
        synchronous_phase_canvas.Print(plot_dir+"synchronous_phase_vs_voltage_unweighted."+format)