diff --git a/src/aare/daq/daq.py b/src/aare/daq/daq.py index 4f301e4e..2ce4b920 100644 --- a/src/aare/daq/daq.py +++ b/src/aare/daq/daq.py @@ -956,7 +956,7 @@ class AareDAQ: sample_id = getattr(sample, "db_id", None) logger.exception( - "Operation failed", + f"Operation {operation.value} failed with error {error}", extra={ "operation": operation.value, "event_type": str(event_type), @@ -965,6 +965,8 @@ class AareDAQ: "additional_comment": additional_comment, }, ) + logger.warning("cleaning up detector state after failed operation...") + self._jfjoch.cancel(wait_for_done=True) if sample is None or sample_id is None: logger.error(f"Error in {operation.value}: {error}") diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index 163a04c8..2d6d49fa 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -114,7 +114,7 @@ class JFJochWrapper: ) from e @needs_init - def cancel(self, on_init: bool = False): + def cancel(self, on_init: bool = False, wait_for_done: bool = False): try: self._api.cancel_post() except Exception as e: @@ -124,6 +124,8 @@ class JFJochWrapper: operation="POST", endpoint="cancel_post", ) from e + if wait_for_done: + self._api.wait_till_done_post(1) @needs_init def is_idle(self) -> bool: