diff --git a/pxiii_bec/bec_widgets/auto_updates.py b/pxiii_bec/bec_widgets/auto_updates.py index 573bcd8..9e20a92 100644 --- a/pxiii_bec/bec_widgets/auto_updates.py +++ b/pxiii_bec/bec_widgets/auto_updates.py @@ -2,6 +2,13 @@ from bec_widgets.cli.auto_updates import AutoUpdates, ScanInfo 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: # """ @@ -15,6 +22,39 @@ class PlotUpdate(AutoUpdates): # 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) + 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: # EXAMPLES: # if info.scan_name == "line_scan" and info.scan_report_devices: @@ -24,3 +64,5 @@ class PlotUpdate(AutoUpdates): # self.run_grid_scan_update(info) # return super().handler(info) + self.keyword_handler(info) +