Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace-ad_rw #274

Merged
merged 7 commits into from
May 9, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions src/ophyd_async/epics/areadetector/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
ImageMode,
NDAttributeDataType,
NDAttributesXML,
ad_r,
ad_rw,
)
from .vimba import VimbaDetector

Expand All @@ -19,8 +17,6 @@
"SingleTriggerDet",
"FileWriteMode",
"ImageMode",
"ad_r",
"ad_rw",
"NDAttributeDataType",
"NDAttributesXML",
"PilatusDetector",
Expand Down
22 changes: 12 additions & 10 deletions src/ophyd_async/epics/areadetector/drivers/ad_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
set_and_wait_for_value,
)

from ...signal.signal import epics_signal_rw
from ..utils import ImageMode, ad_r, ad_rw
from ...signal.signal import epics_signal_r, epics_signal_rw, epics_signal_rw_rbv
from ..utils import ImageMode
from ..writers.nd_plugin import NDArrayBase


Expand Down Expand Up @@ -43,14 +43,16 @@ class DetectorState(str, Enum):
class ADBase(NDArrayBase):
def __init__(self, prefix: str, name: str = "") -> None:
# Define some signals
self.acquire = ad_rw(bool, prefix + "Acquire")
self.acquire_time = ad_rw(float, prefix + "AcquireTime")
self.num_images = ad_rw(int, prefix + "NumImages")
self.image_mode = ad_rw(ImageMode, prefix + "ImageMode")
self.array_counter = ad_rw(int, prefix + "ArrayCounter")
self.array_size_x = ad_r(int, prefix + "ArraySizeX")
self.array_size_y = ad_r(int, prefix + "ArraySizeY")
self.detector_state = ad_r(DetectorState, prefix + "DetectorState")
self.acquire = epics_signal_rw_rbv(bool, prefix + "Acquire_RBV")
coretl marked this conversation as resolved.
Show resolved Hide resolved
self.acquire_time = epics_signal_rw_rbv(float, prefix + "AcquireTime_RBV")
self.num_images = epics_signal_rw_rbv(int, prefix + "NumImages_RBV")
self.image_mode = epics_signal_rw_rbv(ImageMode, prefix + "ImageMode_RBV")
self.array_counter = epics_signal_rw_rbv(int, prefix + "ArrayCounter_RBV")
self.array_size_x = epics_signal_r(int, prefix + "ArraySizeX_RBV")
self.array_size_y = epics_signal_r(int, prefix + "ArraySizeY_RBV")
self.detector_state = epics_signal_r(
DetectorState, prefix + "DetectorState_RBV"
)
# There is no _RBV for this one
self.wait_for_plugins = epics_signal_rw(bool, prefix + "WaitForPlugins")
super().__init__(prefix, name=name)
Expand Down
12 changes: 7 additions & 5 deletions src/ophyd_async/epics/areadetector/drivers/aravis_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from typing import Callable, Dict, Literal, Optional, Tuple

from ophyd_async.epics.areadetector.drivers import ADBase
from ophyd_async.epics.areadetector.utils import ad_r, ad_rw
from ophyd_async.epics.signal.signal import epics_signal_r, epics_signal_rw_rbv


class AravisTriggerMode(str, Enum):
Expand Down Expand Up @@ -138,10 +138,12 @@ class AravisDriver(ADBase):
"""

def __init__(self, prefix: str, name: str = "") -> None:
self.trigger_mode = ad_rw(AravisTriggerMode, prefix + "TriggerMode")
self.trigger_source = ad_rw(str, prefix + "TriggerSource")
self.model = ad_r(str, prefix + "Model")
self.pixel_format = ad_rw(str, prefix + "PixelFormat")
self.trigger_mode = epics_signal_rw_rbv(
AravisTriggerMode, prefix + "TriggerMode_RBV"
)
self.trigger_source = epics_signal_rw_rbv(str, prefix + "TriggerSource_RBV")
self.model = epics_signal_r(str, prefix + "Model_RBV")
self.pixel_format = epics_signal_rw_rbv(str, prefix + "PixelFormat_RBV")
self.dead_time: Optional[float] = None
super().__init__(prefix, name=name)

Expand Down
13 changes: 9 additions & 4 deletions src/ophyd_async/epics/areadetector/drivers/kinetix_driver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from enum import Enum

from ..utils import ad_rw
from ophyd_async.epics.signal.signal import epics_signal_rw_rbv

from .ad_base import ADBase


Expand All @@ -18,7 +19,11 @@ class KinetixReadoutMode(str, Enum):

class KinetixDriver(ADBase):
def __init__(self, prefix: str, name: str = "") -> None:
# self.pixel_format = ad_rw(PixelFormat, prefix + "PixelFormat")
self.trigger_mode = ad_rw(KinetixTriggerMode, prefix + "TriggerMode")
self.mode = ad_rw(KinetixReadoutMode, prefix + "ReadoutPortIdx")
# self.pixel_format = epics_signal_rw_rbv(PixelFormat, prefix + "PixelFormat")
self.trigger_mode = epics_signal_rw_rbv(
KinetixTriggerMode, prefix + "TriggerMode_RBV"
)
self.mode = epics_signal_rw_rbv(
KinetixReadoutMode, prefix + "ReadoutPortIdx_RBV"
)
super().__init__(prefix, name)
7 changes: 5 additions & 2 deletions src/ophyd_async/epics/areadetector/drivers/pilatus_driver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from enum import Enum

from ..utils import ad_rw
from ophyd_async.epics.signal.signal import epics_signal_rw_rbv

from .ad_base import ADBase


Expand All @@ -14,5 +15,7 @@ class PilatusTriggerMode(str, Enum):

class PilatusDriver(ADBase):
def __init__(self, prefix: str, name: str = "") -> None:
self.trigger_mode = ad_rw(PilatusTriggerMode, prefix + "TriggerMode")
self.trigger_mode = epics_signal_rw_rbv(
PilatusTriggerMode, prefix + "TriggerMode_RBV"
)
super().__init__(prefix, name)
19 changes: 12 additions & 7 deletions src/ophyd_async/epics/areadetector/drivers/vimba_driver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from enum import Enum

from ..utils import ad_rw
from ophyd_async.epics.signal.signal import epics_signal_rw_rbv

from .ad_base import ADBase


Expand Down Expand Up @@ -47,12 +48,16 @@ class VimbaExposeOutMode(str, Enum):

class VimbaDriver(ADBase):
def __init__(self, prefix: str, name: str = "") -> None:
# self.pixel_format = ad_rw(PixelFormat, prefix + "PixelFormat")
self.convert_format = ad_rw(
# self.pixel_format = epics_signal_rw_rbv(PixelFormat, prefix + "PixelFormat")
self.convert_format = epics_signal_rw_rbv(
VimbaConvertFormat, prefix + "ConvertPixelFormat"
) # Pixel format of data outputted to AD
self.trig_source = ad_rw(VimbaTriggerSource, prefix + "TriggerSource")
self.trigger_mode = ad_rw(VimbaOnOff, prefix + "TriggerMode")
self.overlap = ad_rw(VimbaOverlap, prefix + "TriggerOverlap")
self.expose_mode = ad_rw(VimbaExposeOutMode, prefix + "ExposureMode")
self.trig_source = epics_signal_rw_rbv(
VimbaTriggerSource, prefix + "TriggerSource"
)
self.trigger_mode = epics_signal_rw_rbv(VimbaOnOff, prefix + "TriggerMode")
self.overlap = epics_signal_rw_rbv(VimbaOverlap, prefix + "TriggerOverlap")
self.expose_mode = epics_signal_rw_rbv(
VimbaExposeOutMode, prefix + "ExposureMode"
)
super().__init__(prefix, name)
14 changes: 2 additions & 12 deletions src/ophyd_async/epics/areadetector/utils.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,8 @@
from enum import Enum
from typing import Optional, Type
from typing import Optional
from xml.etree import cElementTree as ET

from ophyd_async.core import DEFAULT_TIMEOUT, SignalR, SignalRW, T, wait_for_value

from ..signal.signal import epics_signal_r, epics_signal_rw


def ad_rw(datatype: Type[T], prefix: str) -> SignalRW[T]:
return epics_signal_rw(datatype, prefix + "_RBV", prefix)


def ad_r(datatype: Type[T], prefix: str) -> SignalR[T]:
return epics_signal_r(datatype, prefix + "_RBV")
from ophyd_async.core import DEFAULT_TIMEOUT, SignalRW, T, wait_for_value


class FileWriteMode(str, Enum):
Expand Down
40 changes: 21 additions & 19 deletions src/ophyd_async/epics/areadetector/writers/nd_file_hdf.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from enum import Enum

from ...signal.signal import epics_signal_rw
from ..utils import FileWriteMode, ad_r, ad_rw
from ...signal.signal import epics_signal_r, epics_signal_rw, epics_signal_rw_rbv
from ..utils import FileWriteMode
from .nd_plugin import NDPluginBase


Expand All @@ -19,22 +19,24 @@ class Compression(str, Enum):
class NDFileHDF(NDPluginBase):
def __init__(self, prefix: str, name="") -> None:
# Define some signals
self.position_mode = ad_rw(bool, prefix + "PositionMode")
self.compression = ad_rw(Compression, prefix + "Compression")
self.num_extra_dims = ad_rw(int, prefix + "NumExtraDims")
self.file_path = ad_rw(str, prefix + "FilePath")
self.file_name = ad_rw(str, prefix + "FileName")
self.file_path_exists = ad_r(bool, prefix + "FilePathExists")
self.file_template = ad_rw(str, prefix + "FileTemplate")
self.full_file_name = ad_r(str, prefix + "FullFileName")
self.file_write_mode = ad_rw(FileWriteMode, prefix + "FileWriteMode")
self.num_capture = ad_rw(int, prefix + "NumCapture")
self.num_captured = ad_r(int, prefix + "NumCaptured")
self.swmr_mode = ad_rw(bool, prefix + "SWMRMode")
self.lazy_open = ad_rw(bool, prefix + "LazyOpen")
self.capture = ad_rw(bool, prefix + "Capture")
self.position_mode = epics_signal_rw_rbv(bool, prefix + "PositionMode_RBV")
self.compression = epics_signal_rw_rbv(Compression, prefix + "Compression_RBV")
self.num_extra_dims = epics_signal_rw_rbv(int, prefix + "NumExtraDims_RBV")
self.file_path = epics_signal_rw_rbv(str, prefix + "FilePath_RBV")
self.file_name = epics_signal_rw_rbv(str, prefix + "FileName_RBV")
self.file_path_exists = epics_signal_r(bool, prefix + "FilePathExists_RBV")
self.file_template = epics_signal_rw_rbv(str, prefix + "FileTemplate_RBV")
self.full_file_name = epics_signal_r(str, prefix + "FullFileName_RBV")
self.file_write_mode = epics_signal_rw_rbv(
FileWriteMode, prefix + "FileWriteMode_RBV"
)
self.num_capture = epics_signal_rw_rbv(int, prefix + "NumCapture_RBV")
self.num_captured = epics_signal_r(int, prefix + "NumCaptured_RBV")
self.swmr_mode = epics_signal_rw_rbv(bool, prefix + "SWMRMode_RBV")
self.lazy_open = epics_signal_rw_rbv(bool, prefix + "LazyOpen_RBV")
self.capture = epics_signal_rw_rbv(bool, prefix + "Capture_RBV")
self.flush_now = epics_signal_rw(bool, prefix + "FlushNow")
self.array_size0 = ad_r(int, prefix + "ArraySize0")
self.array_size1 = ad_r(int, prefix + "ArraySize1")
self.xml_file_name = ad_rw(str, prefix + "XMLFileName")
self.array_size0 = epics_signal_r(int, prefix + "ArraySize0_RBV")
self.array_size1 = epics_signal_r(int, prefix + "ArraySize1_RBV")
self.xml_file_name = epics_signal_rw_rbv(str, prefix + "XMLFileName_RBV")
super().__init__(prefix, name)
13 changes: 7 additions & 6 deletions src/ophyd_async/epics/areadetector/writers/nd_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

from ophyd_async.core import Device
from ophyd_async.epics.signal import epics_signal_rw

from ..utils import ad_r, ad_rw
from ophyd_async.epics.signal.signal import epics_signal_r, epics_signal_rw_rbv


class Callback(str, Enum):
Expand All @@ -13,16 +12,18 @@ class Callback(str, Enum):

class NDArrayBase(Device):
def __init__(self, prefix: str, name: str = "") -> None:
self.unique_id = ad_r(int, prefix + "UniqueId")
self.unique_id = epics_signal_r(int, prefix + "UniqueId_RBV")
self.nd_attributes_file = epics_signal_rw(str, prefix + "NDAttributesFile")
super().__init__(name)


class NDPluginBase(NDArrayBase):
def __init__(self, prefix: str, name: str = "") -> None:
self.nd_array_port = ad_rw(str, prefix + "NDArrayPort")
self.enable_callback = ad_rw(Callback, prefix + "EnableCallbacks")
self.nd_array_address = ad_rw(int, prefix + "NDArrayAddress")
self.nd_array_port = epics_signal_rw_rbv(str, prefix + "NDArrayPort_RBV")
self.enable_callback = epics_signal_rw_rbv(
Callback, prefix + "EnableCallbacks_RBV"
)
self.nd_array_address = epics_signal_rw_rbv(int, prefix + "NDArrayAddress_RBV")
super().__init__(prefix, name)


Expand Down
Loading