0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

refactor: AutoUpdate disabled

This commit is contained in:
2025-03-20 21:28:16 +01:00
parent 838f9aa011
commit d066d581b3

View File

@ -1,168 +1,169 @@
from __future__ import annotations # TODO autoupdate disabled
# from __future__ import annotations
import threading #
from queue import Queue # import threading
from typing import TYPE_CHECKING # from queue import Queue
# from typing import TYPE_CHECKING
from pydantic import BaseModel #
# from pydantic import BaseModel
if TYPE_CHECKING: #
from .client import BECDockArea, BECFigure # if TYPE_CHECKING:
# from .client import BECDockArea, BECFigure
#
class ScanInfo(BaseModel): #
scan_id: str # class ScanInfo(BaseModel):
scan_number: int # scan_id: str
scan_name: str # scan_number: int
scan_report_devices: list # scan_name: str
monitored_devices: list # scan_report_devices: list
status: str # monitored_devices: list
model_config: dict = {"validate_assignment": True} # status: str
# model_config: dict = {"validate_assignment": True}
#
class AutoUpdates: #
create_default_dock: bool = False # class AutoUpdates:
enabled: bool = False # create_default_dock: bool = False
dock_name: str = None # enabled: bool = False
# dock_name: str = None
def __init__(self, gui: BECDockArea): #
self.gui = gui # def __init__(self, gui: BECDockArea):
self._default_dock = None # self.gui = gui
self._default_fig = None # self._default_dock = None
# self._default_fig = None
def start_default_dock(self): #
""" # def start_default_dock(self):
Create a default dock for the auto updates. # """
""" # Create a default dock for the auto updates.
self.dock_name = "default_figure" # """
self._default_dock = self.gui.new(self.dock_name) # self.dock_name = "default_figure"
self._default_dock.new("BECFigure") # self._default_dock = self.gui.new(self.dock_name)
self._default_fig = self._default_dock.elements_list[0] # self._default_dock.new("BECFigure")
# self._default_fig = self._default_dock.elements_list[0]
@staticmethod #
def get_scan_info(msg) -> ScanInfo: # @staticmethod
""" # def get_scan_info(msg) -> ScanInfo:
Update the script with the given data. # """
""" # Update the script with the given data.
info = msg.info # """
status = msg.status # info = msg.info
scan_id = msg.scan_id # status = msg.status
scan_number = info.get("scan_number", 0) # scan_id = msg.scan_id
scan_name = info.get("scan_name", "Unknown") # scan_number = info.get("scan_number", 0)
scan_report_devices = info.get("scan_report_devices", []) # scan_name = info.get("scan_name", "Unknown")
monitored_devices = info.get("readout_priority", {}).get("monitored", []) # scan_report_devices = info.get("scan_report_devices", [])
monitored_devices = [dev for dev in monitored_devices if dev not in scan_report_devices] # monitored_devices = info.get("readout_priority", {}).get("monitored", [])
return ScanInfo( # monitored_devices = [dev for dev in monitored_devices if dev not in scan_report_devices]
scan_id=scan_id, # return ScanInfo(
scan_number=scan_number, # scan_id=scan_id,
scan_name=scan_name, # scan_number=scan_number,
scan_report_devices=scan_report_devices, # scan_name=scan_name,
monitored_devices=monitored_devices, # scan_report_devices=scan_report_devices,
status=status, # monitored_devices=monitored_devices,
) # status=status,
# )
def get_default_figure(self) -> BECFigure | None: #
""" # def get_default_figure(self) -> BECFigure | None:
Get the default figure from the GUI. # """
""" # Get the default figure from the GUI.
return self._default_fig # """
# return self._default_fig
def do_update(self, msg): #
""" # def do_update(self, msg):
Run the update function if enabled. # """
""" # Run the update function if enabled.
if not self.enabled: # """
return # if not self.enabled:
if msg.status != "open": # return
return # if msg.status != "open":
info = self.get_scan_info(msg) # return
return self.handler(info) # info = self.get_scan_info(msg)
# return self.handler(info)
def get_selected_device(self, monitored_devices, selected_device): #
""" # def get_selected_device(self, monitored_devices, selected_device):
Get the selected device for the plot. If no device is selected, the first # """
device in the monitored devices list is selected. # Get the selected device for the plot. If no device is selected, the first
""" # device in the monitored devices list is selected.
if selected_device: # """
return selected_device # if selected_device:
if len(monitored_devices) > 0: # return selected_device
sel_device = monitored_devices[0] # if len(monitored_devices) > 0:
return sel_device # sel_device = monitored_devices[0]
return None # return sel_device
# return None
def handler(self, info: ScanInfo) -> None: #
""" # def handler(self, info: ScanInfo) -> None:
Default update function. # """
""" # Default update function.
if info.scan_name == "line_scan" and info.scan_report_devices: # """
return self.simple_line_scan(info) # if info.scan_name == "line_scan" and info.scan_report_devices:
if info.scan_name == "grid_scan" and info.scan_report_devices: # return self.simple_line_scan(info)
return self.simple_grid_scan(info) # if info.scan_name == "grid_scan" and info.scan_report_devices:
if info.scan_report_devices: # return self.simple_grid_scan(info)
return self.best_effort(info) # if info.scan_report_devices:
# return self.best_effort(info)
def simple_line_scan(self, info: ScanInfo) -> None: #
""" # def simple_line_scan(self, info: ScanInfo) -> None:
Simple line scan. # """
""" # Simple line scan.
fig = self.get_default_figure() # """
if not fig: # fig = self.get_default_figure()
return # if not fig:
dev_x = info.scan_report_devices[0] # return
selected_device = yield self.gui.selected_device # dev_x = info.scan_report_devices[0]
dev_y = self.get_selected_device(info.monitored_devices, selected_device) # selected_device = yield self.gui.selected_device
if not dev_y: # dev_y = self.get_selected_device(info.monitored_devices, selected_device)
return # if not dev_y:
yield fig.clear_all() # return
yield fig.plot( # yield fig.clear_all()
x_name=dev_x, # yield fig.plot(
y_name=dev_y, # x_name=dev_x,
label=f"Scan {info.scan_number} - {dev_y}", # y_name=dev_y,
title=f"Scan {info.scan_number}", # label=f"Scan {info.scan_number} - {dev_y}",
x_label=dev_x, # title=f"Scan {info.scan_number}",
y_label=dev_y, # x_label=dev_x,
) # y_label=dev_y,
# )
def simple_grid_scan(self, info: ScanInfo) -> None: #
""" # def simple_grid_scan(self, info: ScanInfo) -> None:
Simple grid scan. # """
""" # Simple grid scan.
fig = self.get_default_figure() # """
if not fig: # fig = self.get_default_figure()
return # if not fig:
dev_x = info.scan_report_devices[0] # return
dev_y = info.scan_report_devices[1] # dev_x = info.scan_report_devices[0]
selected_device = yield self.gui.selected_device # dev_y = info.scan_report_devices[1]
dev_z = self.get_selected_device(info.monitored_devices, selected_device) # selected_device = yield self.gui.selected_device
yield fig.clear_all() # dev_z = self.get_selected_device(info.monitored_devices, selected_device)
yield fig.plot( # yield fig.clear_all()
x_name=dev_x, # yield fig.plot(
y_name=dev_y, # x_name=dev_x,
z_name=dev_z, # y_name=dev_y,
label=f"Scan {info.scan_number} - {dev_z}", # z_name=dev_z,
title=f"Scan {info.scan_number}", # label=f"Scan {info.scan_number} - {dev_z}",
x_label=dev_x, # title=f"Scan {info.scan_number}",
y_label=dev_y, # x_label=dev_x,
) # y_label=dev_y,
# )
def best_effort(self, info: ScanInfo) -> None: #
""" # def best_effort(self, info: ScanInfo) -> None:
Best effort scan. # """
""" # Best effort scan.
fig = self.get_default_figure() # """
if not fig: # fig = self.get_default_figure()
return # if not fig:
dev_x = info.scan_report_devices[0] # return
selected_device = yield self.gui.selected_device # dev_x = info.scan_report_devices[0]
dev_y = self.get_selected_device(info.monitored_devices, selected_device) # selected_device = yield self.gui.selected_device
if not dev_y: # dev_y = self.get_selected_device(info.monitored_devices, selected_device)
return # if not dev_y:
yield fig.clear_all() # return
yield fig.plot( # yield fig.clear_all()
x_name=dev_x, # yield fig.plot(
y_name=dev_y, # x_name=dev_x,
label=f"Scan {info.scan_number} - {dev_y}", # y_name=dev_y,
title=f"Scan {info.scan_number}", # label=f"Scan {info.scan_number} - {dev_y}",
x_label=dev_x, # title=f"Scan {info.scan_number}",
y_label=dev_y, # x_label=dev_x,
) # y_label=dev_y,
# )