mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-25 04:01:09 +02:00
fix: add dtype, shape for all signals - adapt to latest Ophyd
This commit is contained in:
@ -154,15 +154,17 @@ class SimCamera(PSIDetectorBase):
|
|||||||
SUB_MONITOR = "device_monitor_2d"
|
SUB_MONITOR = "device_monitor_2d"
|
||||||
_default_sub = SUB_MONITOR
|
_default_sub = SUB_MONITOR
|
||||||
|
|
||||||
exp_time = Cpt(SetableSignal, name="exp_time", value=1, kind=Kind.config)
|
exp_time = Cpt(SetableSignal, name="exp_time", value=1, dtype=float, shape=(), kind=Kind.config)
|
||||||
file_pattern = Cpt(SetableSignal, name="file_pattern", value="", kind=Kind.config)
|
file_pattern = Cpt(SetableSignal, name="file_pattern", value="", kind=Kind.config)
|
||||||
frames = Cpt(SetableSignal, name="frames", value=1, kind=Kind.config)
|
frames = Cpt(SetableSignal, name="frames", value=1, dtype=int, shape=(), kind=Kind.config)
|
||||||
burst = Cpt(SetableSignal, name="burst", value=1, kind=Kind.config)
|
burst = Cpt(SetableSignal, name="burst", value=1, dtype=int, shape=(), kind=Kind.config)
|
||||||
|
|
||||||
image_shape = Cpt(SetableSignal, name="image_shape", value=SHAPE, kind=Kind.config)
|
image_shape = Cpt(SetableSignal, name="image_shape", value=SHAPE, kind=Kind.config)
|
||||||
image = Cpt(
|
image = Cpt(
|
||||||
ReadOnlySignal,
|
ReadOnlySignal,
|
||||||
name="image",
|
name="image",
|
||||||
|
dtype=BIT_DEPTH,
|
||||||
|
shape=SHAPE,
|
||||||
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
||||||
compute_readback=True,
|
compute_readback=True,
|
||||||
kind=Kind.omitted,
|
kind=Kind.omitted,
|
||||||
|
@ -37,7 +37,13 @@ class SimFlyer(Device, FlyerInterface):
|
|||||||
sim_cls = SimulatedPositioner
|
sim_cls = SimulatedPositioner
|
||||||
|
|
||||||
readback = Cpt(
|
readback = Cpt(
|
||||||
ReadOnlySignal, name="readback", value=0, kind=Kind.hinted, compute_readback=False
|
ReadOnlySignal,
|
||||||
|
name="readback",
|
||||||
|
value=0,
|
||||||
|
dtype=float,
|
||||||
|
shape=(),
|
||||||
|
kind=Kind.hinted,
|
||||||
|
compute_readback=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -67,7 +67,9 @@ class SimMonitor(ReadOnlySignal):
|
|||||||
name=name,
|
name=name,
|
||||||
parent=parent,
|
parent=parent,
|
||||||
kind=kind,
|
kind=kind,
|
||||||
value=self.BIT_DEPTH(0),
|
value=0,
|
||||||
|
dtype=self.BIT_DEPTH,
|
||||||
|
shape=(),
|
||||||
compute_readback=True,
|
compute_readback=True,
|
||||||
sim=self.sim,
|
sim=self.sim,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
|
@ -47,9 +47,11 @@ class SimPositioner(Device, PositionerBase):
|
|||||||
sim_cls = SimulatedPositioner
|
sim_cls = SimulatedPositioner
|
||||||
|
|
||||||
# Define the signals as class attributes
|
# Define the signals as class attributes
|
||||||
readback = Cpt(ReadOnlySignal, name="readback", value=0, kind=Kind.hinted)
|
readback = Cpt(
|
||||||
setpoint = Cpt(SetableSignal, value=0, kind=Kind.normal)
|
ReadOnlySignal, name="readback", value=0, dtype=float, shape=(), kind=Kind.hinted
|
||||||
motor_is_moving = Cpt(SetableSignal, value=0, kind=Kind.normal)
|
)
|
||||||
|
setpoint = Cpt(SetableSignal, value=0, dtype=float, shape=(), kind=Kind.normal)
|
||||||
|
motor_is_moving = Cpt(SetableSignal, dtype=int, shape=(), value=0, kind=Kind.normal)
|
||||||
|
|
||||||
# Config signals
|
# Config signals
|
||||||
velocity = Cpt(SetableSignal, value=100, kind=Kind.config)
|
velocity = Cpt(SetableSignal, value=100, kind=Kind.config)
|
||||||
|
@ -42,17 +42,17 @@ class SetableSignal(Signal):
|
|||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
*args,
|
*args,
|
||||||
value: any = 0,
|
value: any = 0.0,
|
||||||
kind: int = Kind.normal,
|
kind: int = Kind.normal,
|
||||||
precision: float = PRECISION,
|
precision: float = PRECISION,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
super().__init__(*args, name=name, value=value, kind=kind, **kwargs)
|
super().__init__(*args, name=name, value=value, kind=kind, **kwargs)
|
||||||
self._metadata.update(connected=True, write_access=False)
|
self._metadata.update(connected=True, write_access=False)
|
||||||
self._value = value
|
self._value = self._readback
|
||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.sim = getattr(self.parent, "sim", None)
|
self.sim = getattr(self.parent, "sim", None)
|
||||||
self._update_sim_state(value)
|
self._update_sim_state(self._value)
|
||||||
self._metadata.update(write_access=True)
|
self._metadata.update(write_access=True)
|
||||||
|
|
||||||
def _update_sim_state(self, value: any) -> None:
|
def _update_sim_state(self, value: any) -> None:
|
||||||
@ -134,7 +134,7 @@ class ReadOnlySignal(Signal):
|
|||||||
name: str,
|
name: str,
|
||||||
*args,
|
*args,
|
||||||
parent=None,
|
parent=None,
|
||||||
value: any = 0,
|
value: any = 0.0,
|
||||||
kind: int = Kind.normal,
|
kind: int = Kind.normal,
|
||||||
precision: float = PRECISION,
|
precision: float = PRECISION,
|
||||||
compute_readback: bool = False,
|
compute_readback: bool = False,
|
||||||
@ -143,7 +143,7 @@ class ReadOnlySignal(Signal):
|
|||||||
):
|
):
|
||||||
super().__init__(*args, name=name, parent=parent, value=value, kind=kind, **kwargs)
|
super().__init__(*args, name=name, parent=parent, value=value, kind=kind, **kwargs)
|
||||||
self._metadata.update(connected=True, write_access=False)
|
self._metadata.update(connected=True, write_access=False)
|
||||||
self._value = value
|
self._value = self._readback
|
||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.compute_readback = compute_readback
|
self.compute_readback = compute_readback
|
||||||
self.sim = sim if sim is not None else getattr(self.parent, "sim", None)
|
self.sim = sim if sim is not None else getattr(self.parent, "sim", None)
|
||||||
@ -225,7 +225,7 @@ class CustomSetableSignal(BECDeviceBase):
|
|||||||
name: str,
|
name: str,
|
||||||
*args,
|
*args,
|
||||||
parent=None,
|
parent=None,
|
||||||
value: any = 0,
|
value: float = 0.0,
|
||||||
kind: int = Kind.normal,
|
kind: int = Kind.normal,
|
||||||
precision: float = PRECISION,
|
precision: float = PRECISION,
|
||||||
sim=None,
|
sim=None,
|
||||||
@ -233,26 +233,15 @@ class CustomSetableSignal(BECDeviceBase):
|
|||||||
):
|
):
|
||||||
if parent:
|
if parent:
|
||||||
name = f"{parent.name}_{name}"
|
name = f"{parent.name}_{name}"
|
||||||
super().__init__(*args, name=name, parent=parent, kind=kind, **kwargs)
|
super().__init__(*args, name=name, parent=parent, value=value, kind=kind, **kwargs)
|
||||||
self._metadata = {"connected": self.connected, "write_access": True}
|
self._metadata = {"connected": self.connected, "write_access": True}
|
||||||
self._value = value
|
|
||||||
self._timestamp = time.time()
|
self._timestamp = time.time()
|
||||||
self._dtype = type(value)
|
|
||||||
self._shape = self._get_shape(value)
|
|
||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.sim = sim if sim is not None else getattr(self.parent, "sim", None)
|
self.sim = sim if sim is not None else getattr(self.parent, "sim", None)
|
||||||
self._update_sim_state(value)
|
self._update_sim_state(value)
|
||||||
|
|
||||||
def _get_shape(self, value: any) -> list:
|
def _get_shape(self, value: any) -> list:
|
||||||
"""Get the shape of the value.
|
pass
|
||||||
**Note: This logic is from ophyd, and replicated here.
|
|
||||||
There would be more sophisticated ways, but to keep it consistent, it is replicated here.**
|
|
||||||
"""
|
|
||||||
if isinstance(value, np.ndarray):
|
|
||||||
return list(value.shape)
|
|
||||||
if isinstance(value, list):
|
|
||||||
return len(value)
|
|
||||||
return []
|
|
||||||
|
|
||||||
def _update_sim_state(self, value: any) -> None:
|
def _update_sim_state(self, value: any) -> None:
|
||||||
"""Update the readback value."""
|
"""Update the readback value."""
|
||||||
@ -260,13 +249,13 @@ class CustomSetableSignal(BECDeviceBase):
|
|||||||
self.sim.update_sim_state(self.name, value)
|
self.sim.update_sim_state(self.name, value)
|
||||||
|
|
||||||
def _get_value(self) -> any:
|
def _get_value(self) -> any:
|
||||||
"""Update the timestamp of the readback value."""
|
"""Return the readback value."""
|
||||||
if self.sim:
|
if self.sim:
|
||||||
return self.sim.sim_state[self.name]["value"]
|
return self.sim.sim_state[self.name]["value"]
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
def _get_timestamp(self) -> any:
|
def _get_timestamp(self) -> any:
|
||||||
"""Update the timestamp of the readback value."""
|
"""Return the timestamp of the readback value."""
|
||||||
if self.sim:
|
if self.sim:
|
||||||
return self.sim.sim_state[self.name]["timestamp"]
|
return self.sim.sim_state[self.name]["timestamp"]
|
||||||
return self._timestamp
|
return self._timestamp
|
||||||
@ -295,9 +284,7 @@ class CustomSetableSignal(BECDeviceBase):
|
|||||||
|
|
||||||
Core function for signal.
|
Core function for signal.
|
||||||
"""
|
"""
|
||||||
res = {
|
res = super().describe()
|
||||||
self.name: {"source": str(self.__class__), "dtype": self._dtype, "shape": self._shape}
|
|
||||||
}
|
|
||||||
if self.precision is not None:
|
if self.precision is not None:
|
||||||
res[self.name]["precision"] = self.precision
|
res[self.name]["precision"] = self.precision
|
||||||
return res
|
return res
|
||||||
|
@ -49,17 +49,19 @@ class SimWaveform(Device):
|
|||||||
SUB_MONITOR = "device_monitor_1d"
|
SUB_MONITOR = "device_monitor_1d"
|
||||||
_default_sub = SUB_MONITOR
|
_default_sub = SUB_MONITOR
|
||||||
|
|
||||||
exp_time = Cpt(SetableSignal, name="exp_time", value=1, kind=Kind.config)
|
exp_time = Cpt(SetableSignal, name="exp_time", value=1, dtype=float, shape=(), kind=Kind.config)
|
||||||
file_path = Cpt(SetableSignal, name="file_path", value="", kind=Kind.config)
|
file_path = Cpt(SetableSignal, name="file_path", value="", kind=Kind.config)
|
||||||
file_pattern = Cpt(SetableSignal, name="file_pattern", value="", kind=Kind.config)
|
file_pattern = Cpt(SetableSignal, name="file_pattern", value="", kind=Kind.config)
|
||||||
frames = Cpt(SetableSignal, name="frames", value=1, kind=Kind.config)
|
frames = Cpt(SetableSignal, name="frames", value=1, dtype=int, shape=(), kind=Kind.config)
|
||||||
burst = Cpt(SetableSignal, name="burst", value=1, kind=Kind.config)
|
burst = Cpt(SetableSignal, name="burst", value=1, dtype=int, shape=(), kind=Kind.config)
|
||||||
|
|
||||||
waveform_shape = Cpt(SetableSignal, name="waveform_shape", value=SHAPE, kind=Kind.config)
|
waveform_shape = Cpt(SetableSignal, name="waveform_shape", value=SHAPE, kind=Kind.config)
|
||||||
waveform = Cpt(
|
waveform = Cpt(
|
||||||
ReadOnlySignal,
|
ReadOnlySignal,
|
||||||
name="waveform",
|
name="waveform",
|
||||||
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
value=np.empty(SHAPE, dtype=BIT_DEPTH),
|
||||||
|
dtype=BIT_DEPTH,
|
||||||
|
shape=SHAPE,
|
||||||
compute_readback=True,
|
compute_readback=True,
|
||||||
kind=Kind.normal,
|
kind=Kind.normal,
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user