diff --git a/pxiii_bec/devices/SamCamDetector.py b/pxiii_bec/devices/SamCamDetector.py index 75da5b1..947e569 100644 --- a/pxiii_bec/devices/SamCamDetector.py +++ b/pxiii_bec/devices/SamCamDetector.py @@ -11,42 +11,74 @@ Created on Thu Jan 30 2025 @author: mohacsi_i """ -from ophyd import ADComponent -from ophyd_devices.devices.areadetector.cam import GenICam +from __future__ import annotations -# from ophyd_devices.devices.areadetector.plugins import ImagePlugin_V35 -from ophyd_devices.interfaces.base_classes.psi_detector_base import ( - PSIDetectorBase, - CustomDetectorMixin, -) +from typing import TYPE_CHECKING from bec_lib import bec_logger +from ophyd import ADComponent +from ophyd_devices.devices.areadetector.cam import GenICam +from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase + +if TYPE_CHECKING: + from ophyd import DeviceStatus, StatusBase + logger = bec_logger.logger -class SamCamSetup(CustomDetectorMixin): - """Simple camera mixin class, the SAMCAM is usually streaming""" - - def on_stage(self): - """Just make sure it's running continously""" - self.parent.cam.acquire.put(1, wait=True) - - def on_unstage(self): - """Should run continously""" - - def on_stop(self): - """Should run continously""" - - -class SamCamDetector(PSIDetectorBase): +class SamCamDetector(PSIDeviceBase): """Sample camera device The SAMCAM continously streams images to the GUI and sample alignment scripts via ZMQ. """ - custom_prepare_cls = SamCamSetup - cam = ADComponent(GenICam, "cam1:") - # image = ADComponent(ImagePlugin_V35, "image1:") + + ######################################## + # Beamline Specific Implementations # + ######################################## + + def on_init(self) -> None: + """ + Called when the device is initialized. + + No signals are connected at this point. If you like to + set default values on signals, please use on_connected instead. + """ + + def on_connected(self) -> None: + """ + Called after the device is connected and its signals are connected. + Default values for signals should be set here. + """ + + def on_stage(self) -> DeviceStatus | StatusBase | None: + """ + Called while staging the device. + + Information about the upcoming scan can be accessed from the scan_info (self.scan_info.msg) object. + """ + self.parent.cam.acquire.put(1, wait=True) + + def on_unstage(self) -> DeviceStatus | StatusBase | None: + """Called while unstaging the device.""" + + def on_pre_scan(self) -> DeviceStatus | StatusBase | None: + """Called right before the scan starts on all devices automatically.""" + + def on_trigger(self) -> DeviceStatus | StatusBase | None: + """Called when the device is triggered.""" + + def on_complete(self) -> DeviceStatus | StatusBase | None: + """Called to inquire if a device has completed a scans.""" + + def on_kickoff(self) -> DeviceStatus | StatusBase | None: + """Called to kickoff a device for a fly scan. Has to be called explicitly.""" + + def on_stop(self) -> None: + """Called when the device is stopped.""" + + def on_destroy(self) -> None: + """Called when the device is destroyed. Cleanup resources here."""