From 9938ba74a03e47c4ced6688d9f7de1019e26cfe8 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Thu, 23 Apr 2026 10:57:14 +0200 Subject: [PATCH] DAQ: added initialisation for auto exposure in DAQ devices --- src/aare/devices/area_detector.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/aare/devices/area_detector.py b/src/aare/devices/area_detector.py index 1f6ac594..07d70a5e 100644 --- a/src/aare/devices/area_detector.py +++ b/src/aare/devices/area_detector.py @@ -1,3 +1,4 @@ +import dataclasses from enum import Enum import epics @@ -8,6 +9,15 @@ class AutoEnum(Enum): ONCE = 1 AUTO = 2 +@dataclasses.dataclass +class AutoExposureSettings: + aoi_offset_x: int = 500 + aoi_offset_y: int = 500 + aoi_size_x: int = 1000 + aoi_size_y: int = 1000 + gain_max: float = 10.000 + exp_max: float = 100000.000 + class epicsAD(object): def __init__(self, prefix, cam="cam1:", image="image1:"): self.img = None @@ -37,11 +47,28 @@ class epicsAD(object): self.counter = epics.PV(prefix + cam + "ArrayCounter_RBV") self.busy = epics.PV(prefix + cam + "AcquireBusy", auto_monitor=True) + self.aoi_start_x = epics.PV(prefix + image + "GC_AutFunAOIOffsetX") + self.aoi_start_y = epics.PV(prefix + image + "GC_AutFunAOIOffsetY") + self.aoi_size_x = epics.PV(prefix + image + "GC_AutFunAOIWidth") + self.aoi_size_y = epics.PV(prefix + image + "GC_AutFunAOIHeight") + + self.gain_max = epics.PV(prefix + cam + "GC_AutGainUpperLimit") + self.exp_max = epics.PV(prefix + cam + "GC_AutExpTimUppLimit") + self.__init_auto_exp() + try: epics.ca.pend_io() except: pass + def __init_auto_exp(self, settings: AutoExposureSettings = AutoExposureSettings()): + self.aoi_start_x.put(settings.aoi_offset_x) + self.aoi_start_y.put(settings.aoi_offset_y) + self.aoi_size_x.put(settings.aoi_size_x) + self.aoi_size_y.put(settings.aoi_size_y) + self.gain_max.put(settings.gain_max) + self.exp_max.put(settings.exp_max) + def monitorCB(self, epicsArgs, userArgs): self.img = epicsArgs["pv_value"] self.img.dtype = np.uint8