w
Some checks failed
CI for csaxs_bec / test (push) Failing after 33s
CI for csaxs_bec / test (pull_request) Failing after 37s

This commit is contained in:
2025-12-10 07:05:02 +01:00
parent 8853cc94a4
commit 970fa9bcd3

View File

@@ -4,6 +4,7 @@ from __future__ import annotations
import threading
import time
from functools import partial
from threading import RLock
from typing import TYPE_CHECKING, Callable, Literal
@@ -434,6 +435,12 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard):
return
signal: EpicsSignalRO
attr_name = signal.attr_name
# Ignore updates for channels that are not setup through num_connected_channels
index = int(attr_name[3:]) # Extract index from 'mcaX'
if index > self.num_connected_channels:
return
mca_channel = getattr(self, attr_name, None)
if mca_channel is None:
logger.error(f"Could not find matching MCA channel for signal {signal.name}")
@@ -472,7 +479,7 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard):
"""
Called when the device is staged.
"""
self.erase_all.set(1).wait(timeout=self._pv_timeout)
triggers = self.scan_info.msg.scan_parameters.get("frames_per_trigger", 1)
num_points = self.scan_info.msg.num_points
self._num_total_triggers = triggers * num_points
@@ -480,6 +487,8 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard):
self.preset_real.set(0).wait(timeout=self._pv_timeout)
self.num_use_all.set(triggers).wait(timeout=self._pv_timeout)
self.erase_all.put(1) # Reset the MCS card
# Reset data
self._received_updates.clear()
@@ -493,7 +502,7 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard):
Called when the device is unstaged.
"""
self.stop_all.put(1)
self.erase_all.set(0).wait(timeout=self._pv_timeout)
self.erase_all.put(1) # Reset the MCS card
def _monitor_async_data_emission(self, timeout: int = 10) -> bool:
"""Monitor data emission after scan is done."""
@@ -518,10 +527,16 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard):
def on_complete(self) -> CompareStatus:
"""On scan completion."""
# Check Acquiring is DONE
# Prepare callback for data emission done
status_async_data = StatusBase(obj=self)
status_async_data.add_callback(self._status_callback)
self._scan_done_callbacks.append(partial(self._status_callback, status_async_data))
# Start done callback loop
self._start_monitor_async_data_emission.set()
# Add CompareStatus for Acquiring DONE
status = CompareStatus(self.acquiring, ACQUIRING.DONE)
# Combine both statuses
ret_status = status & status_async_data
ret_status.add_callback(self._status_failed_callback)
self.cancel_on_stop(ret_status)