Source code for ophyd_async.epics.areadetector.aravis
from typing import get_args
from bluesky.protocols import HasHints, Hints
from ophyd_async.core import PathProvider, StandardDetector
from ophyd_async.epics.areadetector.controllers.aravis_controller import (
AravisController,
)
from ophyd_async.epics.areadetector.drivers import ADBaseShapeProvider
from ophyd_async.epics.areadetector.drivers.aravis_driver import AravisDriver
from ophyd_async.epics.areadetector.writers import HDFWriter, NDFileHDF
[docs]
class AravisDetector(StandardDetector, HasHints):
"""
Ophyd-async implementation of an ADAravis Detector.
The detector may be configured for an external trigger on a GPIO port,
which must be done prior to preparing the detector
"""
_controller: AravisController
_writer: HDFWriter
def __init__(
self,
prefix: str,
path_provider: PathProvider,
drv_suffix="cam1:",
hdf_suffix="HDF1:",
name="",
gpio_number: AravisController.GPIO_NUMBER = 1,
):
self.drv = AravisDriver(prefix + drv_suffix)
self.hdf = NDFileHDF(prefix + hdf_suffix)
super().__init__(
AravisController(self.drv, gpio_number=gpio_number),
HDFWriter(
self.hdf,
path_provider,
lambda: self.name,
ADBaseShapeProvider(self.drv),
),
config_sigs=(self.drv.acquire_time,),
name=name,
)
[docs]
def get_external_trigger_gpio(self):
return self._controller.gpio_number
[docs]
def set_external_trigger_gpio(self, gpio_number: AravisController.GPIO_NUMBER):
supported_gpio_numbers = get_args(AravisController.GPIO_NUMBER)
if gpio_number not in supported_gpio_numbers:
raise ValueError(
f"{self.__class__.__name__} only supports the following GPIO "
f"indices: {supported_gpio_numbers} but was asked to "
f"use {gpio_number}"
)
self._controller.gpio_number = gpio_number
@property
def hints(self) -> Hints:
return self._writer.hints