Source code for pyaml.bpm.bpm_model

from abc import ABCMeta, abstractmethod

import numpy as np
from numpy.typing import NDArray

from ..control.deviceaccess import DeviceAccess


[docs] class BPMModel(metaclass=ABCMeta): """ Abstract class providing interface to accessing BPM positions, offsets, tilts. """
[docs] @abstractmethod def get_pos_devices(self) -> list[DeviceAccess | None]: """ Get device handles used for position reading Returns ------- list[DeviceAccess] h and v position devices """ pass
[docs] @abstractmethod def get_tilt_device(self) -> DeviceAccess | None: """ Get device handle used for tilt access Returns ------- list[DeviceAccess] tilt device """ pass
[docs] @abstractmethod def get_offset_devices(self) -> list[DeviceAccess | None]: """ Get device handles used for offset access Returns ------- list[DeviceAccess] h and v offset devices """ pass
[docs] def x_pos_index(self) -> int | None: """ Returns the index of the horizontal position in an array, otherwise a scalar value is expected from the corresponding DeviceAccess Returns ------- int Index in the array, None for a scalar value """ return None
[docs] def y_pos_index(self) -> int | None: """ Returns the index of the veritcal position in an array, otherwise a scalar value is expected from the corresponding DeviceAccess Returns ------- int Index in the array, None for a scalar value """ return None
[docs] def is_pos_indexed(self) -> bool: """ Check if position values are indexed (array-based). Returns ------- bool True if both x and y positions are indexed, False otherwise """ return self.x_pos_index() is not None and self.y_pos_index() is not None
[docs] def tilt_index(self) -> int | None: """ Returns the index of the tilt angle in an array, otherwise a scalar value is expected from the corresponding DeviceAccess Returns ------- int Index in the array, None for a scalar value """ return None
[docs] def is_tilt_indexed(self) -> bool: """ Check if tilt value is indexed (array-based). Returns ------- bool True if tilt is indexed, False otherwise """ return self.tilt_index() is not None
[docs] def x_offset_index(self) -> int | None: """ Returns the index of the horizontal offset in an array, otherwise a scalar value is expected from the corresponding DeviceAccess Returns ------- int Index in the array, None for a scalar value """ return None
[docs] def y_offset_index(self) -> int | None: """ Returns the index of the veritcal offset in an array, otherwise a scalar value is expected from the corresponding DeviceAccess Returns ------- int Index in the array, None for a scalar value """ return None
[docs] def is_offset_indexed(self) -> bool: """ Check if offset values are indexed (array-based). Returns ------- bool True if both x and y offsets are indexed, False otherwise """ return self.x_offset_index() is not None and self.y_offset_index() is not None