mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2026-02-05 06:38:41 +01:00
feat(sim_waveform): add progress and async multi data signals to SimWaveform
This commit is contained in:
@@ -17,7 +17,7 @@ from typeguard import typechecked
|
|||||||
from ophyd_devices.sim.sim_data import SimulatedDataWaveform
|
from ophyd_devices.sim.sim_data import SimulatedDataWaveform
|
||||||
from ophyd_devices.sim.sim_signals import ReadOnlySignal, SetableSignal
|
from ophyd_devices.sim.sim_signals import ReadOnlySignal, SetableSignal
|
||||||
from ophyd_devices.utils import bec_utils
|
from ophyd_devices.utils import bec_utils
|
||||||
from ophyd_devices.utils.bec_signals import AsyncSignal
|
from ophyd_devices.utils.bec_signals import AsyncMultiSignal, AsyncSignal, ProgressSignal
|
||||||
from ophyd_devices.utils.errors import DeviceStopError
|
from ophyd_devices.utils.errors import DeviceStopError
|
||||||
|
|
||||||
logger = bec_logger.logger
|
logger = bec_logger.logger
|
||||||
@@ -94,6 +94,10 @@ class SimWaveform(Device):
|
|||||||
data = Cpt(AsyncSignal, name="data", ndim=1, max_size=1000)
|
data = Cpt(AsyncSignal, name="data", ndim=1, max_size=1000)
|
||||||
# Can be extend or append
|
# Can be extend or append
|
||||||
async_update = Cpt(AsyncUpdateSignal, value="add", kind=Kind.config)
|
async_update = Cpt(AsyncUpdateSignal, value="add", kind=Kind.config)
|
||||||
|
progress = Cpt(ProgressSignal, name="progress")
|
||||||
|
async_multi_data = Cpt(
|
||||||
|
AsyncMultiSignal, name="async_multi_data", signals=["data1", "data2"], ndim=1, max_size=1000
|
||||||
|
)
|
||||||
slice_size = Cpt(SetableSignal, value=100, dtype=np.int32, kind=Kind.config)
|
slice_size = Cpt(SetableSignal, value=100, dtype=np.int32, kind=Kind.config)
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -122,6 +126,7 @@ class SimWaveform(Device):
|
|||||||
self.stopped = False
|
self.stopped = False
|
||||||
self._staged = Staged.no
|
self._staged = Staged.no
|
||||||
self._trigger_thread = None
|
self._trigger_thread = None
|
||||||
|
self._trigger_received = 0
|
||||||
self.scan_info = scan_info
|
self.scan_info = scan_info
|
||||||
self._delay_slice_update = False
|
self._delay_slice_update = False
|
||||||
if self.sim_init:
|
if self.sim_init:
|
||||||
@@ -197,6 +202,12 @@ class SimWaveform(Device):
|
|||||||
|
|
||||||
self._trigger_thread = threading.Thread(target=acquire, args=(status,), daemon=True)
|
self._trigger_thread = threading.Thread(target=acquire, args=(status,), daemon=True)
|
||||||
self._trigger_thread.start()
|
self._trigger_thread.start()
|
||||||
|
self._trigger_received += 1
|
||||||
|
self.progress.put(
|
||||||
|
value=self._trigger_received,
|
||||||
|
max_value=self.frames.get(),
|
||||||
|
done=self.frames.get() == self._trigger_received,
|
||||||
|
)
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def _send_async_update(self, value: Any, index: int | None = None) -> None:
|
def _send_async_update(self, value: Any, index: int | None = None) -> None:
|
||||||
@@ -239,6 +250,9 @@ class SimWaveform(Device):
|
|||||||
expire=self._stream_ttl,
|
expire=self._stream_ttl,
|
||||||
)
|
)
|
||||||
self.data.put(value, async_update=async_update)
|
self.data.put(value, async_update=async_update)
|
||||||
|
self.async_multi_data.put(
|
||||||
|
{"data1": {"value": value}, "data2": {"value": value}}, async_update=async_update
|
||||||
|
)
|
||||||
|
|
||||||
def stage(self) -> list[object]:
|
def stage(self) -> list[object]:
|
||||||
"""Stage the camera for upcoming scan
|
"""Stage the camera for upcoming scan
|
||||||
@@ -264,6 +278,7 @@ class SimWaveform(Device):
|
|||||||
self.burst.set(self.scan_info.msg.scan_parameters["frames_per_trigger"])
|
self.burst.set(self.scan_info.msg.scan_parameters["frames_per_trigger"])
|
||||||
self.stopped = False
|
self.stopped = False
|
||||||
self._slice_index = 0
|
self._slice_index = 0
|
||||||
|
self._trigger_received = 0
|
||||||
logger.warning(f"Staged {self.name}, scan_id : {self.scan_info.msg.scan_id}")
|
logger.warning(f"Staged {self.name}, scan_id : {self.scan_info.msg.scan_id}")
|
||||||
return super().stage()
|
return super().stage()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user