def plot_sweep_energy(xrt_lens, dbi, ax=None):
"""Plot the databroker results from a `sweep_energy_plan`."""
df = dbi.table()
df = df.set_index(df.energy)
if ax is None:
_, ax = plt.subplots(constrained_layout=True, figsize=(12, 10))
plot_spreadsheet_data(xrt_lens, ax=ax, df=lens_to_spreadsheet_df[xrt_lens])
ax.set_yscale("log")
df = df.copy()
# **NOTE** for the purposes of plotting in log scale, set tfs_radius = 1
# when zero in actuality
df.loc[df.tfs_radius == 0.0, "tfs_radius"] = 1.0
ax.scatter(
df.energy, df.trip_high, label="Trip high [PLC]", color="black", marker="v"
)
ax.scatter(
df.energy, df.trip_low, label="Trip low [PLC]", color="black", marker="^"
)
if False:
when_faulted = df.where(df.faulted == 1).dropna()
ax.scatter(
when_faulted.index,
when_faulted.tfs_radius,
label="Scan point - fault",
color="red",
marker="x",
)
else:
when_faulted = df.where(df.min_fault == 1).dropna()
ax.scatter(
when_faulted.index,
when_faulted.tfs_radius,
label="Scan point - min energy fault",
color="red",
marker="x",
)
when_faulted = df.where(df.lens_required_fault == 1).dropna()
ax.scatter(
when_faulted.index,
when_faulted.tfs_radius,
label="Scan point - lens required",
color="red",
marker="D",
)
when_faulted = df.where(df.table_fault == 1).dropna()
ax.scatter(
when_faulted.index,
when_faulted.tfs_radius,
label="Scan point - table fault",
color="red",
marker="+",
)
when_not_faulted = df.where(df.faulted == 0).dropna()
ax.scatter(
when_not_faulted.index,
when_not_faulted.tfs_radius,
color="black",
marker=".",
s=3,
label="Scan point - no fault",
)
ax.set_ylim(1, 1e4)
ax.legend(loc="upper right")
xrt_radius, *_ = list(df.xrt_radius)
if xrt_radius == 0.0:
ax.set_title("No pre-focusing lens")
else:
ax.set_title(f"Pre-focusing radius = {xrt_radius:.2f}um (Lens #{xrt_lens})")
plt.show()
return xrt_radius