mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-06 20:00:41 +02:00
refactor(dxp): remove _default_read_attrs from base integration
This commit is contained in:
parent
540742696a
commit
19a1d84186
@ -10,6 +10,16 @@ An example usage for a 4-element FalconX system. ::
|
|||||||
from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin
|
from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin
|
||||||
|
|
||||||
class FalconX4(Falcon):
|
class FalconX4(Falcon):
|
||||||
|
|
||||||
|
# Attributes needed to be set for the ADBase class
|
||||||
|
# Otherwise, ADBase will overwrite read_attrs and configuration_attrs
|
||||||
|
# and as a result a .read() will return an empty dictionary
|
||||||
|
# This is a shortcoming of the ADBase class and has to be fixed
|
||||||
|
# on the highest level of the class hierarchy, one may also include specific signals of the Falcon
|
||||||
|
# in the read_attrs and configuration_attrs, i.e. elapsed_real_time, elapsed_live_time, etc.
|
||||||
|
_default_read_attrs = ("dxp1", "dxp2", "dxp3", "dxp4", "mca1", "mca2", "mca3", "mca4", "hdf")
|
||||||
|
_default_configuration_attrs = ("dxp1", "dxp2", "dxp3", "dxp4", "mca1", "mca2", "mca3", "mca4", "hdf")
|
||||||
|
|
||||||
# DXP parameters
|
# DXP parameters
|
||||||
dxp1 = Cpt(EpicsDXPFalcon, "dxp1:")
|
dxp1 = Cpt(EpicsDXPFalcon, "dxp1:")
|
||||||
dxp2 = Cpt(EpicsDXPFalcon, "dxp2:")
|
dxp2 = Cpt(EpicsDXPFalcon, "dxp2:")
|
||||||
@ -52,7 +62,7 @@ __all__ = ("EpicsMCARecord", "EpicsDXP", "EpicsDXPFalcon", "Falcon", "Mercury",
|
|||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
|
|
||||||
|
|
||||||
class ROIFalcon(ROI):
|
class PSIROI(ROI):
|
||||||
"""ROI for FalconX DXP system with proper Kind settings."""
|
"""ROI for FalconX DXP system with proper Kind settings."""
|
||||||
|
|
||||||
# normal Components
|
# normal Components
|
||||||
@ -77,7 +87,7 @@ def add_rois(range_, **kwargs):
|
|||||||
raise ValueError("roi must be in the set [0,31]")
|
raise ValueError("roi must be in the set [0,31]")
|
||||||
|
|
||||||
attr = f"roi{roi}"
|
attr = f"roi{roi}"
|
||||||
defn[attr] = (ROIFalcon, f".R{roi}", kwargs)
|
defn[attr] = (PSIROI, f".R{roi}", kwargs)
|
||||||
|
|
||||||
return defn
|
return defn
|
||||||
|
|
||||||
@ -210,34 +220,6 @@ class EpicsDxpFalconMapping(EpicsDXPMapping):
|
|||||||
class Falcon(EpicsDXPFalconMultiElementSystem, EpicsDxpFalconMapping, ADBase):
|
class Falcon(EpicsDXPFalconMultiElementSystem, EpicsDxpFalconMapping, ADBase):
|
||||||
"""Falcon base device"""
|
"""Falcon base device"""
|
||||||
|
|
||||||
_default_read_attrs = (
|
|
||||||
ADBase._default_read_attrs
|
|
||||||
+ (
|
|
||||||
EpicsDXPFalconMultiElementSystem._default_read_attrs
|
|
||||||
if EpicsDXPFalconMultiElementSystem._default_read_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
+ (
|
|
||||||
EpicsDxpFalconMapping._default_read_attrs
|
|
||||||
if EpicsDxpFalconMapping._default_read_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
+ ("port_name",)
|
|
||||||
)
|
|
||||||
_default_configuration_attrs = (
|
|
||||||
ADBase._default_configuration_attrs
|
|
||||||
+ (
|
|
||||||
EpicsDXPFalconMultiElementSystem._default_configuration_attrs
|
|
||||||
if EpicsDXPFalconMultiElementSystem._default_configuration_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
+ (
|
|
||||||
EpicsDxpFalconMapping._default_configuration_attrs
|
|
||||||
if EpicsDxpFalconMapping._default_configuration_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# attribute required by ADBase
|
# attribute required by ADBase
|
||||||
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
||||||
|
|
||||||
@ -260,17 +242,6 @@ class EpicsDXPMultiElementSystem(_EpicsDXPMultiElementSystem):
|
|||||||
class Mercury(EpicsDXPMultiElementSystem, ADBase):
|
class Mercury(EpicsDXPMultiElementSystem, ADBase):
|
||||||
"""Mercury base device"""
|
"""Mercury base device"""
|
||||||
|
|
||||||
_default_read_attrs = ADBase._default_read_attrs + (
|
|
||||||
EpicsDXPMultiElementSystem._default_read_attrs
|
|
||||||
if EpicsDXPMultiElementSystem._default_read_attrs
|
|
||||||
else () + ("port_name",)
|
|
||||||
)
|
|
||||||
_default_configuration_attrs = ADBase._default_configuration_attrs + (
|
|
||||||
EpicsDXPMultiElementSystem._default_configuration_attrs
|
|
||||||
if EpicsDXPMultiElementSystem._default_configuration_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
|
|
||||||
# attribute required by ADBase
|
# attribute required by ADBase
|
||||||
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
||||||
|
|
||||||
@ -278,24 +249,5 @@ class Mercury(EpicsDXPMultiElementSystem, ADBase):
|
|||||||
class xMAP(EpicsDXPMultiElementSystem, EpicsDXPMapping, ADBase):
|
class xMAP(EpicsDXPMultiElementSystem, EpicsDXPMapping, ADBase):
|
||||||
"""xMAP base device"""
|
"""xMAP base device"""
|
||||||
|
|
||||||
_default_read_attrs = ADBase._default_read_attrs + (
|
|
||||||
EpicsDXPMultiElementSystem._default_read_attrs
|
|
||||||
if EpicsDXPMultiElementSystem._default_read_attrs
|
|
||||||
else (
|
|
||||||
() + EpicsDXPMapping._default_read_attrs
|
|
||||||
if EpicsDXPMapping._default_read_attrs
|
|
||||||
else () + ("port_name",)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
_default_configuration_attrs = ADBase._default_configuration_attrs + (
|
|
||||||
EpicsDXPMultiElementSystem._default_configuration_attrs
|
|
||||||
if EpicsDXPMultiElementSystem._default_configuration_attrs
|
|
||||||
else (
|
|
||||||
() + EpicsDXPMapping._default_configuration_attrs
|
|
||||||
if EpicsDXPMapping._default_configuration_attrs
|
|
||||||
else ()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# attribute required by ADBase
|
# attribute required by ADBase
|
||||||
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
port_name = ADCpt(EpicsSignalRO, "Asyn.PORT", string=True)
|
||||||
|
@ -86,9 +86,6 @@ def test_falcon(mock_falcon):
|
|||||||
assert isinstance(mock_falcon, EpicsDxpFalconMapping)
|
assert isinstance(mock_falcon, EpicsDxpFalconMapping)
|
||||||
assert isinstance(mock_falcon, ADBase)
|
assert isinstance(mock_falcon, ADBase)
|
||||||
|
|
||||||
assert mock_falcon.read_attrs == ["port_name"]
|
|
||||||
assert mock_falcon.configuration_attrs == []
|
|
||||||
|
|
||||||
assert mock_falcon.hints == {"fields": []}
|
assert mock_falcon.hints == {"fields": []}
|
||||||
|
|
||||||
assert mock_falcon.mca1.rois.roi0.read_attrs == ["count", "net_count"]
|
assert mock_falcon.mca1.rois.roi0.read_attrs == ["count", "net_count"]
|
||||||
@ -111,9 +108,6 @@ def test_xmap(mock_xmap):
|
|||||||
assert isinstance(mock_xmap, EpicsDXPMultiElementSystem)
|
assert isinstance(mock_xmap, EpicsDXPMultiElementSystem)
|
||||||
assert isinstance(mock_xmap, ADBase)
|
assert isinstance(mock_xmap, ADBase)
|
||||||
|
|
||||||
assert mock_xmap.read_attrs == ["port_name"]
|
|
||||||
assert mock_xmap.configuration_attrs == []
|
|
||||||
|
|
||||||
|
|
||||||
def test_mercury(mock_mercury):
|
def test_mercury(mock_mercury):
|
||||||
"""Test the Mercury device."""
|
"""Test the Mercury device."""
|
||||||
@ -124,6 +118,3 @@ def test_mercury(mock_mercury):
|
|||||||
assert isinstance(mock_mercury, EpicsDXPMultiElementSystem)
|
assert isinstance(mock_mercury, EpicsDXPMultiElementSystem)
|
||||||
# assert isinstance(mock_mercury, EpicsDXPMapping) # Not sure why this fails
|
# assert isinstance(mock_mercury, EpicsDXPMapping) # Not sure why this fails
|
||||||
assert isinstance(mock_mercury, ADBase)
|
assert isinstance(mock_mercury, ADBase)
|
||||||
|
|
||||||
assert mock_mercury.read_attrs == ["port_name"]
|
|
||||||
assert mock_mercury.configuration_attrs == []
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user