Keyword auto updates for alignment scans
This commit is contained in:
@@ -2,6 +2,13 @@ from bec_widgets.cli.auto_updates import AutoUpdates, ScanInfo
|
|||||||
|
|
||||||
|
|
||||||
class PlotUpdate(AutoUpdates):
|
class PlotUpdate(AutoUpdates):
|
||||||
|
create_default_dock = True
|
||||||
|
enabled = True
|
||||||
|
|
||||||
|
def do_update(self, msg):
|
||||||
|
"""Save the original scan message for future use"""
|
||||||
|
self._scan_msg = msg
|
||||||
|
return super().do_update(msg)
|
||||||
|
|
||||||
# def simple_line_scan(self, info: ScanInfo) -> None:
|
# def simple_line_scan(self, info: ScanInfo) -> None:
|
||||||
# """
|
# """
|
||||||
@@ -15,6 +22,39 @@ class PlotUpdate(AutoUpdates):
|
|||||||
# plt = self.figure.plot(dev_x, dev_y)
|
# plt = self.figure.plot(dev_x, dev_y)
|
||||||
# plt.set(title=f"PXIII: Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
|
# plt.set(title=f"PXIII: Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
|
||||||
|
|
||||||
|
def keyword_handler(self, info: ScanInfo) -> None:
|
||||||
|
""" Simple keyword handler
|
||||||
|
|
||||||
|
This simple keyword handler looks for the keyword 'datasource' in the scan arguments.
|
||||||
|
This allows the user to explictly specify the desired data source. Useful for alignment
|
||||||
|
scans.
|
||||||
|
"""
|
||||||
|
dev_x = info.scan_report_devices[0]
|
||||||
|
if "kwargs" in self._scan_msg.info:
|
||||||
|
dev_y = self._scan_msg.info["kwargs"].get("datasource", None)
|
||||||
|
else:
|
||||||
|
dev_y = None
|
||||||
|
if not dev_y:
|
||||||
|
return
|
||||||
|
|
||||||
|
plt1 = self.get_default_figure()
|
||||||
|
try:
|
||||||
|
# This will throw RPCResponseTimeoutError
|
||||||
|
plt1.clear_all()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
# This will throw RPCResponseTimeoutError
|
||||||
|
plt1.plot(x_name=dev_x, y_name=dev_y)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
# This will throw RPCResponseTimeoutError
|
||||||
|
plt1.set(title=f"PXIII: Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# plt1.add_dap(dev_x, dev_y, dap="LinearModel")
|
||||||
|
|
||||||
def handler(self, info: ScanInfo) -> None:
|
def handler(self, info: ScanInfo) -> None:
|
||||||
# EXAMPLES:
|
# EXAMPLES:
|
||||||
# if info.scan_name == "line_scan" and info.scan_report_devices:
|
# if info.scan_name == "line_scan" and info.scan_report_devices:
|
||||||
@@ -24,3 +64,5 @@ class PlotUpdate(AutoUpdates):
|
|||||||
# self.run_grid_scan_update(info)
|
# self.run_grid_scan_update(info)
|
||||||
# return
|
# return
|
||||||
super().handler(info)
|
super().handler(info)
|
||||||
|
self.keyword_handler(info)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user