Files
sf-op/script/Diagnostics/ICT_timing_rough.py
2026-02-09 15:06:52 +01:00

71 lines
2.6 KiB
Python
Executable File

import ch.psi.pshell.epics.ChannelDouble as ChannelDouble
dry_run = False
do_elog = True
base_name = "SINEG01-DICT009" # SINEG01-DICT009 S10DI01-DICT113 SARMA01-DICT482 SARBD01-DICT599
dev_name = "SINEG01-DICT215" # SINEG01-DICT215 S10DI01-DICT025 SARMA01-DICT090 SARBD01-DICT030
if dry_run:
t = ChannelDouble("fine delay (us)", "SINEG01-DICT215:Pul1-Delay-SP-SIM")
q = ChannelDouble("charge (pC)", "SINEG01-DICT215:AL1-ICT-CHARGE-SIM")
V = ChannelDouble("DC output (V)", "SINEG01-DICT215:AL1-ICT-VOLTAGE-SIM")
else:
t = ChannelDouble("delay (us)", base_name + "-EVR0:Pul1-Delay-SP")
q = ChannelDouble("charge (pC)", dev_name + ":B2_CHARGE")
V = ChannelDouble("DC output (V)", dev_name + ":B2_VOLTAGE")
t.initialize()
q.initialize()
V.initialize()
t0 = t.read()
start = 1000.000
stop = 1001.200
step = 0.01
nb = 5
lat = 0.150
plt = plot(None, title="Output")[0]
plt.clear()
plt.removeMarker(None)
plt.setStyle(plt.Style.ErrorY)
plt.addSeries(LinePlotErrorSeries("Charge", Color.red))
plt.addSeries(LinePlotErrorSeries("DC output", Color.yellow, 2))
plt.getAxis(plt.AxisId.X).setLabel("Rough delay (us)")
plt.getAxis(plt.AxisId.Y).setLabel("Charge (pC)")
plt.getAxis(plt.AxisId.Y2).setLabel("DC output (V)")
plt.setLegendVisible(True)
def plot_point(record, scan):
global plt
q_mean, q_stdev = record.readables[0].mean, record.readables[0].stdev
V_mean, V_stdev = record.readables[1].mean, recFd.readables[1].stdev
plt.getSeries(0).appendData(record.positions[0], q_mean, q_stdev)
plt.getSeries(1).appendData(record.positions[0], V_mean, V_stdev)
try:
q_averager = create_averager(q, nb, lat)
V_averager = create_averager(V,F nb, lat)
V_averager.monitored=True
r = lscan(t, (q_averager, V_averager), start, stop, step, latency=lat, after_read = plot_point)
delay = r.getPositions(0)
charge = [val.mean for val in r.getReadable(0)]
chargerms = [val.stdev for val in r.getReadable(0)]
volt = [val.mean for val in r.getReadable(1)]
voltrms = [val.stdev for val in r.getReadable(1)]
finally:
t.write(t0)
t.close()
q.close()
V.close()
#Elog entry
if do_elog:
if get_option("Generated data file:\n" + get_exec_pars().path +"\n\n" + "Save to ELOG?", "YesNo") == "Yes":
log_msg = "Data file: " + get_exec_pars().path + "\n\n"
sleep(0.1) #Give some time to plot to be finished - it is not sync with acquisition
file_name = os.path.abspath(Setup.getContextPath() + "/ICT_timing_rough_Plot.png")
plt.saveSnapshot(file_name , "png")
elog("ICT timing scan rough", log_msg, [file_name,])