Source code for pyobs.robotic.scripts.darkbias

from __future__ import annotations
import logging
from typing import TYPE_CHECKING

from pyobs.interfaces import IBinning, ICamera, IWindow, IExposureTime, IImageType, IData
from pyobs.robotic.scripts import Script
from pyobs.utils.enums import ImageType

if TYPE_CHECKING:
    from pyobs.robotic.task import TaskData

log = logging.getLogger(__name__)


[docs] class DarkBias(Script): """Script for running darks or biases.""" camera: str count: int = 20 exptime: float = 0 binning: tuple[int, int] = (1, 1)
[docs] async def can_run(self, data: TaskData | None) -> bool: """Whether this config can currently run. Returns: True if script can run now. """ # we need a camera try: await self.comm.proxy(self.camera, IData) except ValueError: return False # seems alright return True
[docs] async def run(self, data: TaskData | None) -> None: """Run script. Raises: InterruptedError: If interrupted """ image_type = ImageType.BIAS if self.exptime == 0 else ImageType.DARK # get modules camera = await self.comm.proxy(self.camera, ICamera) if isinstance(camera, IBinning): await camera.set_binning(*self.binning) # set full frame if isinstance(camera, IWindow): full_frame = await camera.get_full_frame() await camera.set_window(*full_frame) # take image if isinstance(camera, IExposureTime): await camera.set_exposure_time(self.exptime) if isinstance(camera, IImageType): await camera.set_image_type(image_type) # image type for logger if self.exptime == 0: im_type = "%d biases" % self.count else: im_type = "%d darks (%d s)" % (self.count, self.exptime) log.info("Starting a series of %s with %s..." % (im_type, self.camera)) for i in range(self.count): await camera.grab_data() log.info("Finished series of %s with %s." % (im_type, self.camera)) return
__all__ = ["DarkBias"]