mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-06 03:40:41 +02:00
refactor(waveform): added second waveform signal to the async waveform sim device
This commit is contained in:
parent
673be87a2d
commit
47ae7d61a9
@ -82,9 +82,16 @@ class SimWaveform(Device):
|
||||
burst = Cpt(SetableSignal, name="burst", value=1, kind=Kind.config)
|
||||
|
||||
waveform_shape = Cpt(SetableSignal, name="waveform_shape", value=SHAPE, kind=Kind.config)
|
||||
waveform = Cpt(
|
||||
waveform_1 = Cpt(
|
||||
ReadOnlySignal,
|
||||
name="waveform",
|
||||
name="waveform_1",
|
||||
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
||||
compute_readback=True,
|
||||
kind=Kind.hinted,
|
||||
)
|
||||
waveform_2 = Cpt(
|
||||
ReadOnlySignal,
|
||||
name="waveform_2",
|
||||
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
||||
compute_readback=True,
|
||||
kind=Kind.hinted,
|
||||
@ -124,6 +131,7 @@ class SimWaveform(Device):
|
||||
if self.sim_init:
|
||||
self.sim.set_init(self.sim_init)
|
||||
self._slice_index = 0
|
||||
self.signals = [self.waveform_1, self.waveform_2]
|
||||
|
||||
@property
|
||||
def delay_slice_update(self) -> bool:
|
||||
@ -154,7 +162,7 @@ class SimWaveform(Device):
|
||||
try:
|
||||
for _ in range(self.burst.get()):
|
||||
# values of the Waveform
|
||||
values = self.waveform.get()
|
||||
values = [signal.get() for signal in self.signals]
|
||||
# add_slice option
|
||||
if self.async_update.get() == "add_slice":
|
||||
size = self.slice_size.get()
|
||||
@ -224,7 +232,10 @@ class SimWaveform(Device):
|
||||
)
|
||||
|
||||
msg = messages.DeviceMessage(
|
||||
signals={self.waveform.name: {"value": value, "timestamp": time.time()}},
|
||||
signals={
|
||||
self.waveform_1.name: {"value": value[0], "timestamp": time.time()},
|
||||
self.waveform_2.name: {"value": value[1], "timestamp": time.time()},
|
||||
},
|
||||
metadata=metadata,
|
||||
)
|
||||
# Send the message to BEC
|
||||
|
@ -741,15 +741,15 @@ def test_waveform(waveform):
|
||||
"""Test the SimWaveform class"""
|
||||
waveform.sim.select_model("GaussianModel")
|
||||
waveform.sim.params = {"amplitude": 500, "center": 500, "sigma": 10}
|
||||
data = waveform.waveform.get()
|
||||
data = waveform.waveform_1.get()
|
||||
assert isinstance(data, np.ndarray)
|
||||
assert data.shape == waveform.SHAPE
|
||||
assert np.isclose(np.argmax(data), 500, atol=5)
|
||||
waveform.waveform_shape.put(50)
|
||||
data = waveform.waveform.get()
|
||||
data = waveform.waveform_1.get()
|
||||
for model in waveform.sim.get_all_sim_models():
|
||||
waveform.sim.select_model(model)
|
||||
waveform.waveform.get()
|
||||
waveform.waveform_1.get()
|
||||
# Now also test the async readback
|
||||
mock_connector = waveform.connector = mock.MagicMock()
|
||||
mock_run_subs = waveform._run_subs = mock.MagicMock()
|
||||
@ -788,7 +788,7 @@ def test_waveform_update_modes(waveform, mode, mock_data, expected_calls):
|
||||
with (
|
||||
mock.patch.object(waveform, "_run_subs") as mock_run_subs,
|
||||
mock.patch.object(waveform, "_send_async_update") as mock_send_async_update,
|
||||
mock.patch.object(waveform.waveform, "get", return_value=mock_data),
|
||||
mock.patch.object(waveform.waveform_1, "get", return_value=mock_data),
|
||||
):
|
||||
|
||||
status = waveform.trigger()
|
||||
|
Loading…
x
Reference in New Issue
Block a user