From 3b7fe21fcd37fc3a440326e2ecc0617a8af373ac Mon Sep 17 00:00:00 2001 From: David Perl Date: Thu, 27 Aug 2026 10:05:57 +0200 Subject: [PATCH 1/4] fix: improve log messages --- src/aare/daq/operations/raster/service.py | 4 ++-- src/aare/gui/widgets/camera_image.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/aare/daq/operations/raster/service.py b/src/aare/daq/operations/raster/service.py index 38708811..3b6091b2 100644 --- a/src/aare/daq/operations/raster/service.py +++ b/src/aare/daq/operations/raster/service.py @@ -486,7 +486,7 @@ class RasterService: com = raster_highest_score(scan_result.images) if com is None: - self.logger.info("Calcualted COM is None using centre image") + self.logger.info("Calcualted COM is None -> using centre image") if request.n_x == 1: x = request.grid_size_mm.x / 2.0 else: @@ -515,7 +515,7 @@ class RasterService: ), ) else: - self.logger.info("Calcualted COM is not None, procedding") + self.logger.info("Calcualted COM is not None, proceeding") target_coor = com.get_com_mm(request) target_coor_offset = self.ctx.sample_geometry.smargon_nudge(target_coor) self.logger.info( diff --git a/src/aare/gui/widgets/camera_image.py b/src/aare/gui/widgets/camera_image.py index c13ff300..b1a90dab 100644 --- a/src/aare/gui/widgets/camera_image.py +++ b/src/aare/gui/widgets/camera_image.py @@ -877,7 +877,6 @@ class SampleCameraImageLabel(QGraphicsView): case SampleCameraImageState.IDLE: point = self.mapToScene(event.pos()) if not self.scene.sceneRect().contains(point): - logger.error("Point is outside scene bounds") return if event.modifiers() & Qt.KeyboardModifier.ShiftModifier: -- 2.54.0 From adfc39d4cdf59beed42ad746ca2afe38a82b2d1b Mon Sep 17 00:00:00 2001 From: David Perl Date: Thu, 27 Aug 2026 10:53:41 +0200 Subject: [PATCH 2/4] inspect jfjoch status after wait_til_running --- src/aare/devices/jfjoch.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index f0d2b9c8..b72938e8 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -277,10 +277,20 @@ class JFJochWrapper: @needs_init def wait_till_running(self, timeout: float = 60): + logger.info("Waiting for JFJoch to report detector armed") if self._simulated: return None try: self._api.wait_until_running_post_with_http_info(timeout=math.ceil(timeout)) + status = self._api.status_get() + logger.debug(status) + if status.message_severity == "error": + raise self._jfjoch_error( + f"JFJoch status message has error severity after waiting for arm: {status.message}", + error=RuntimeError(status.message), + operation="POST", + endpoint="wait_until_running_post", + ) return True except Exception as e: raise self._jfjoch_error( -- 2.54.0 From 588419c05743c9fa577ed375f9ec8c92094b6911 Mon Sep 17 00:00:00 2001 From: David Perl Date: Thu, 27 Aug 2026 10:59:07 +0200 Subject: [PATCH 3/4] fix: current state reading --- src/aare/daq/operations/rotation/service.py | 1 + src/aare/devices/bec_worker.py | 30 ++++++++++++--------- src/aare/gui/panels/smart_rotation_panel.py | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/aare/daq/operations/rotation/service.py b/src/aare/daq/operations/rotation/service.py index 1246c6dd..74a41708 100644 --- a/src/aare/daq/operations/rotation/service.py +++ b/src/aare/daq/operations/rotation/service.py @@ -68,6 +68,7 @@ class RotationService: ) time.sleep(smargon_time_step) + self.ctx.deps.devs.aerotech.wait_till_done(timeout=int(round(total_time + 60, 0))) self.ctx.deps.devs.aerotech_omega = omega_start diff --git a/src/aare/devices/bec_worker.py b/src/aare/devices/bec_worker.py index 2668b03f..d2024e85 100644 --- a/src/aare/devices/bec_worker.py +++ b/src/aare/devices/bec_worker.py @@ -50,21 +50,22 @@ class BeamlineState(str, Enum): XTAL_SNAPSHOT = "xtal_snapshot" -def _bec_state_to_aare_state(bec_state: BeamlineState) -> BeamlineStateEnum: +def _bec_state_to_aare_state(bec_state: str) -> BeamlineStateEnum: map = { - BeamlineState.BEAMSTOP_ALIGNMENT: BeamlineStateEnum.BeamstopAlignment, - BeamlineState.SAMPLE_ALIGNMENT: BeamlineStateEnum.SampleAlignment, - BeamlineState.DATA_COLLECTION: BeamlineStateEnum.DataCollection, - BeamlineState.DC_XRF: BeamlineStateEnum.XrayFluorescence, - BeamlineState.MANUAL_SAMPLE_EXCHANGE: BeamlineStateEnum.SampleExchange, - BeamlineState.BEAM_VISUALISATION: BeamlineStateEnum.BeamLocation, - BeamlineState.FLUX_MEASUREMENT: BeamlineStateEnum.FluxMeasurement, - BeamlineState.BEAMSTOP_ALIGNMENT: BeamlineStateEnum.BeamstopAlignment, - BeamlineState.MAINTENANCE: BeamlineStateEnum.Maintenance, - BeamlineState.XTAL_SNAPSHOT: BeamlineStateEnum.XtalSnapshot, + "BEAMSTOP_ALIGNMENT": BeamlineStateEnum.BeamstopAlignment, + "SAMPLE_ALIGNMENT": BeamlineStateEnum.SampleAlignment, + "DATA_COLLECTION": BeamlineStateEnum.DataCollection, + "DC_XRF": BeamlineStateEnum.XrayFluorescence, + "MANUAL_SAMPLE_EXCHANGE": BeamlineStateEnum.SampleExchange, + "BEAM_VISUALISATION": BeamlineStateEnum.BeamLocation, + "FLUX_MEASUREMENT": BeamlineStateEnum.FluxMeasurement, + "BEAMSTOP_ALIGNMENT": BeamlineStateEnum.BeamstopAlignment, + "MAINTENANCE": BeamlineStateEnum.Maintenance, + "XTAL_SNAPSHOT": BeamlineStateEnum.XtalSnapshot, } if bec_state in map: return map[bec_state] + logger.warning(f"No match for state: {bec_state}") return BeamlineStateEnum.Maintenance @@ -138,9 +139,12 @@ class BECClientWorker: if self.planner is None: return BeamlineStateEnum.Maintenance matching_states = self.planner.current_state() - if matching_states is None or len(matching_states) > 1: + if matching_states is None or len(matching_states) < 1: return BeamlineStateEnum.Maintenance - return _bec_state_to_aare_state(matching_states[0]) + logger.debug(f"BEC planner returned matching states: {matching_states}") + current_state = _bec_state_to_aare_state(matching_states[0][0]) + logger.info(f"Current state detected from BEC: {current_state}") + return current_state def _bec_error( self, exc: Exception, *, operation: str, tags: list[str] | None = None diff --git a/src/aare/gui/panels/smart_rotation_panel.py b/src/aare/gui/panels/smart_rotation_panel.py index 51bf8320..28e5f1b0 100644 --- a/src/aare/gui/panels/smart_rotation_panel.py +++ b/src/aare/gui/panels/smart_rotation_panel.py @@ -232,7 +232,7 @@ class SimpleRotationSettingsPanel(QWidget): self._d = s # TODO only update best_res after raster finished otherwise ask to update. or have toggle to overwrite with user value # TODO only take best res from flat face scan - # TODO identify flat face!!!! + # TODO identify flat face! best_res = s.last_best_res self._omega = s.geom.omega_deg -- 2.54.0 From 8029a937e5a4b9da8235a9691879db28bb3f0daf Mon Sep 17 00:00:00 2001 From: David Perl Date: Thu, 27 Aug 2026 12:53:35 +0200 Subject: [PATCH 4/4] style: reformat --- src/aare/daq/operations/rotation/service.py | 1 - src/aare/devices/bec_worker.py | 1 - src/aare/devices/jfjoch.py | 10 +++++----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/aare/daq/operations/rotation/service.py b/src/aare/daq/operations/rotation/service.py index 74a41708..1246c6dd 100644 --- a/src/aare/daq/operations/rotation/service.py +++ b/src/aare/daq/operations/rotation/service.py @@ -68,7 +68,6 @@ class RotationService: ) time.sleep(smargon_time_step) - self.ctx.deps.devs.aerotech.wait_till_done(timeout=int(round(total_time + 60, 0))) self.ctx.deps.devs.aerotech_omega = omega_start diff --git a/src/aare/devices/bec_worker.py b/src/aare/devices/bec_worker.py index d2024e85..40a34af9 100644 --- a/src/aare/devices/bec_worker.py +++ b/src/aare/devices/bec_worker.py @@ -59,7 +59,6 @@ def _bec_state_to_aare_state(bec_state: str) -> BeamlineStateEnum: "MANUAL_SAMPLE_EXCHANGE": BeamlineStateEnum.SampleExchange, "BEAM_VISUALISATION": BeamlineStateEnum.BeamLocation, "FLUX_MEASUREMENT": BeamlineStateEnum.FluxMeasurement, - "BEAMSTOP_ALIGNMENT": BeamlineStateEnum.BeamstopAlignment, "MAINTENANCE": BeamlineStateEnum.Maintenance, "XTAL_SNAPSHOT": BeamlineStateEnum.XtalSnapshot, } diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index b72938e8..4edb52b4 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -286,11 +286,11 @@ class JFJochWrapper: logger.debug(status) if status.message_severity == "error": raise self._jfjoch_error( - f"JFJoch status message has error severity after waiting for arm: {status.message}", - error=RuntimeError(status.message), - operation="POST", - endpoint="wait_until_running_post", - ) + f"JFJoch status message has error severity after waiting for arm: {status.message}", + error=RuntimeError(status.message), + operation="POST", + endpoint="wait_until_running_post", + ) return True except Exception as e: raise self._jfjoch_error( -- 2.54.0