From 18fe88469a6599e769d744851be19dacab5e4d45 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Fri, 3 Jul 2026 14:13:36 +0200 Subject: [PATCH] bec/gui: added save_current_psotion and save_and_reload macros to GUI --- src/aare/daq/daq.py | 22 ++++++++++++ src/aare/daq/server.py | 39 ++++++++++++++++++++++ src/aare/devices/bec_worker.py | 15 +++++++++ src/aare/gui/panels/local_contact_panel.py | 39 +++++++++++++++++++--- src/aare/gui/threads/daq_worker.py | 12 +++++++ 5 files changed, 122 insertions(+), 5 deletions(-) diff --git a/src/aare/daq/daq.py b/src/aare/daq/daq.py index 6e561788..c90df0c8 100644 --- a/src/aare/daq/daq.py +++ b/src/aare/daq/daq.py @@ -1908,6 +1908,7 @@ class AareDAQ: self.__cfg.set_busy(BeamlineStateEnum.SampleAlignment) try: self.__cfg.abr_meas_pos = AerotechCoordinate(at_mm=self.__devs.aerotech_pos.at_mm) + self.__devs.bec_worker.save_current_aerotech_position() self.__cfg.state_busy = False except Exception: self.__cfg.state_busy = False @@ -3533,6 +3534,27 @@ class AareDAQ: finally: self.__cfg.state_busy = False + def bec_save_current_bs_pos(self) -> None: + self.__cfg.try_set_busy(timeout=360) + try: + self.__devs.bec_worker.save_current_bs_pos() + finally: + self.__cfg.state_busy = False + + def bec_save_current_collimator_pos(self) -> None: + self.__cfg.try_set_busy(timeout=360) + try: + self.__devs.bec_worker.save_current_collimator_pos() + finally: + self.__cfg.state_busy = False + + def bec_save_current_aerotech_position(self) -> None: + self.__cfg.try_set_busy(timeout=360) + try: + self.__devs.bec_worker.save_current_aerotech_position() + finally: + self.__cfg.state_busy = False + def fluorimeter_take_spectrum(self, fm: FluorescenceSpectrumParameterModel) -> FluorescenceSpectrumOutputModel: self.__cfg.try_set_busy(timeout=360) diff --git a/src/aare/daq/server.py b/src/aare/daq/server.py index 9d55d5f0..28fec1ac 100644 --- a/src/aare/daq/server.py +++ b/src/aare/daq/server.py @@ -640,6 +640,45 @@ async def bec_reinitialise_planner_and_position_devices( "message": "BEC planner and position devices reinitialised.", } +@app.post("/bec/save_current_bs_pos") +async def bec_save_current_bs_pos(token: str = Depends(oauth2_scheme)) -> dict: + """ + Save the current BEC beamstop work position. Staff only. + """ + data = auth.parse_token(token) + auth.check_jwt_staff_only(data) + daq.bec_save_current_bs_pos() + return { + "ok": True, + "message": "Saved current BEC beamstop work position.", + } + +@app.post("/bec/save_current_collimator_pos") +async def bec_save_current_collimator_pos(token: str = Depends(oauth2_scheme)) -> dict: + """ + Save the current BEC collimator work position. Staff only. + """ + data = auth.parse_token(token) + auth.check_jwt_staff_only(data) + daq.bec_save_current_collimator_pos() + return { + "ok": True, + "message": "Saved current BEC collimator work position.", + } + +@app.post("/bec/save_current_aerotech_position") +async def bec_save_current_aerotech_position(token: str = Depends(oauth2_scheme)) -> dict: + """ + Save the current BEC aerotech work position and reload device config. Staff only. + """ + data = auth.parse_token(token) + auth.check_jwt_staff_only(data) + daq.bec_save_current_aerotech_position() + return { + "ok": True, + "message": "Saved current BEC aerotech work position and reloaded devices.", + } + def initialise_aerotech(self): self.__cfg.try_set_busy(timeout=360) try: diff --git a/src/aare/devices/bec_worker.py b/src/aare/devices/bec_worker.py index ecf0c44b..c4fccdd3 100644 --- a/src/aare/devices/bec_worker.py +++ b/src/aare/devices/bec_worker.py @@ -494,6 +494,21 @@ class BECClientWorker: tags=["backlight"] ) + def save_current_bs_pos(self): + save_current_position(self.dev.bs_z, 'safe') + + def save_current_collimator_pos(self): + save_current_position(self.dev.coll_y, 'work') + + def save_current_aerotech_position(self): + save_current_position(self.dev.aerotech, 'work', axis = 'x') + save_current_position(self.dev.aerotech, 'work', axis='y') + save_current_position(self.dev.aerotech, 'work', axis='z') + self.save_config_and_reload_devices() + + def save_config_and_reload_devices(self): + self.position_devices, self.planner = save_and_reload() + @property def zoom(self): return self.__zoom.position diff --git a/src/aare/gui/panels/local_contact_panel.py b/src/aare/gui/panels/local_contact_panel.py index 13cedbaa..f285d081 100644 --- a/src/aare/gui/panels/local_contact_panel.py +++ b/src/aare/gui/panels/local_contact_panel.py @@ -315,13 +315,14 @@ class LocalContactPanel(QFrame): tools_layout.setContentsMargins(10, 12, 10, 10) tools_layout.setSpacing(6) - #label = QLabel("BEC inspection and recovery utilities.", tools) - #label.setWordWrap(True) tools_layout.addWidget(tools) - tools_layout.addWidget(self._make_button("Load BEC user macros", self._daq.bec_load_user_macros, "Loading BEC user macros.")) - tools_layout.addWidget(self._make_button("Show BEC user macros", self._daq.bec_list_all_user_macros, "Listing BEC user macros.")) - tools_layout.addWidget(self._make_button("Show BEC position devices", self._daq.bec_list_all_devices, "Listing BEC devices.")) + tools_layout.addWidget( + self._make_button("Load BEC user macros", self._daq.bec_load_user_macros, "Loading BEC user macros.")) + tools_layout.addWidget( + self._make_button("Show BEC user macros", self._daq.bec_list_all_user_macros, "Listing BEC user macros.")) + tools_layout.addWidget( + self._make_button("Show BEC position devices", self._daq.bec_list_all_devices, "Listing BEC devices.")) tools_layout.addWidget( self._make_button( "Reinitialise BEC planner/devices", @@ -330,7 +331,35 @@ class LocalContactPanel(QFrame): ) ) + device_config = QGroupBox("Device config", tab) + device_config_layout = QVBoxLayout(device_config) + device_config_layout.setContentsMargins(10, 12, 10, 10) + device_config_layout.setSpacing(6) + + device_config_layout.addWidget( + self._make_button( + "Save current beamstop z safe position", + self._daq.bec_save_current_bs_pos, + "Saving current BEC beamstop safe position.", + ) + ) + device_config_layout.addWidget( + self._make_button( + "Save current collimator position", + self._daq.bec_save_current_collimator_pos, + "Saving current BEC collimator work position.", + ) + ) + device_config_layout.addWidget( + self._make_button( + "Save current aerotech position", + self._daq.bec_save_current_aerotech_position, + "Saving current BEC aerotech work position and reloading devices.", + ) + ) + layout.addWidget(tools) + layout.addWidget(device_config) layout.addStretch(1) return tab diff --git a/src/aare/gui/threads/daq_worker.py b/src/aare/gui/threads/daq_worker.py index 876e7b8b..970fff19 100644 --- a/src/aare/gui/threads/daq_worker.py +++ b/src/aare/gui/threads/daq_worker.py @@ -1663,6 +1663,18 @@ class DAQWorker(QObject): def bec_reinitialise_planner_and_position_devices(self, method: str = "auto"): self.generic_post(f"bec/reinitialise_planner_and_position_devices?method={method}") + @Slot() + def bec_save_current_bs_pos(self): + self.generic_post("bec/save_current_bs_pos") + + @Slot() + def bec_save_current_collimator_pos(self): + self.generic_post("bec/save_current_collimator_pos") + + @Slot() + def bec_save_current_aerotech_position(self): + self.generic_post("bec/save_current_aerotech_position") + @Slot() def initialise_smargon(self): self.generic_post("smargon/initialize")