From 019195633297d8ad3b2fb882b0af7b45e79e5a01 Mon Sep 17 00:00:00 2001 From: yannachen Date: Mon, 8 Jul 2024 11:33:17 -0500 Subject: [PATCH] Updated camera support to use single image mode for scanning. --- src/haven/instrument/area_detector.py | 36 +++++++++++++++++++-------- src/haven/instrument/camera.py | 3 ++- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/haven/instrument/area_detector.py b/src/haven/instrument/area_detector.py index 36d9f2ca..830ed527 100644 --- a/src/haven/instrument/area_detector.py +++ b/src/haven/instrument/area_detector.py @@ -39,6 +39,23 @@ __all__ = ["Eiger500K", "Lambda250K", "SimDetector", "AsyncCamMixin"] +class WriteModes(IntEnum): + SINGLE = 0 + CAPTURE = 1 + STREAM = 2 + + +class Capture(IntEnum): + STOP = 0 + START = 1 + + +class ImageMode(IntEnum): + SINGLE = 0 + MULTIPLE = 1 + CONTINUOUS = 2 + + class AsyncCamMixin(OphydObject): """A mixin that allows for delayed evaluation of the connection status. @@ -55,6 +72,14 @@ class AsyncCamMixin(OphydObject): acquire = ADCpt(SignalWithRBV, "Acquire") +class SingleImageModeTrigger(SingleTrigger_V34): + """A trigger mixin for cameras that don't support "Multiple" image mode.""" + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if "cam.image_mode" in self.stage_sigs: + self.stage_sigs['cam.image_mode'] = ImageMode.SINGLE + + class SimDetectorCam_V34(CamMixin_V34, SimDetectorCam): ... @@ -64,17 +89,6 @@ class EigerCam(AsyncCamMixin, EigerDetectorCam): ... class LambdaCam(AsyncCamMixin, Lambda750kCam): ... -class WriteModes(IntEnum): - SINGLE = 0 - CAPTURE = 1 - STREAM = 2 - - -class Capture(IntEnum): - STOP = 0 - START = 1 - - class StageCapture: """Mixin to prepare NDPlugin file capture mode. diff --git a/src/haven/instrument/camera.py b/src/haven/instrument/camera.py index bd49eba9..5af343c0 100644 --- a/src/haven/instrument/camera.py +++ b/src/haven/instrument/camera.py @@ -17,6 +17,7 @@ DetectorBase, SimDetector, StatsPlugin_V34, + SingleImageModeTrigger, ) from .device import make_device @@ -31,7 +32,7 @@ class AravisCam(AsyncCamMixin, CamBase): acquire_time_auto = ADCpt(EpicsSignal, "ExposureAuto") -class AravisDetector(SingleTrigger, DetectorBase): +class AravisDetector(SingleImageModeTrigger, DetectorBase): """ A gige-vision camera described by EPICS. """