Source code for pyaml.magnet.model

from abc import ABCMeta, abstractmethod

import numpy as np
import numpy.typing as npt

from ..control.deviceaccess import DeviceAccess


[docs] class MagnetModel(metaclass=ABCMeta): """ Abstract class providing strength to coil current conversion and access to underlying power supplies """
[docs] @abstractmethod def compute_hardware_values(self, strengths: npt.NDArray[np.float64]) -> npt.NDArray[np.float64]: """ Compute hardware value(s) from magnet strength(s) Parameters ---------- strengths : npt.NDArray[np.float64] Array of strengths. For a single multipole, strengths is an array of 1 item. Returns ------- npt.NDArray[np.float64] Array of hardware values (i.e. currents or voltages). """ pass
[docs] @abstractmethod def compute_strengths(self, hardware_values: npt.NDArray[np.float64]) -> npt.NDArray[np.float64]: """ Compute magnet strength(s) from hardware value(s) Parameters ---------- hardware_values : npt.NDArray[np.float64] Array of hardware values (i.e. currents or voltages) Returns ------- npt.NDArray[np.float64] Array of strengths. For a single multipole, returns an array of 1 item """ pass
[docs] @abstractmethod def get_strength_units(self) -> list[str]: """ Get strength units Returns ------- list[str] Array of strength units. For a single multipole, returns a list of 1 item """ pass
[docs] @abstractmethod def get_hardware_units(self) -> list[str]: """ Get hardware units Returns ------- list[str] Array of hardware units. For a single multipole, returns a list of 1 item """ pass
[docs] @abstractmethod def get_devices(self) -> list[DeviceAccess | None]: """ Get device handles Returns ------- list[DeviceAccess] Array of DeviceAcess """ pass
[docs] @abstractmethod def set_magnet_rigidity(self, brho: np.double): """ Set magnet rigidity Parameters ---------- brho: np.double Magnet rigidity used to calculate power supply setpoints """ pass
[docs] def has_hardware(self) -> bool: """ Tells if the model allows to work in hardware unit. Returns ---------- bool True if the model supports hardware unit """ return True
[docs] def has_physics(self) -> bool: """ Tells if the model allows to work in physics unit. Returns ---------- bool True if the model supports physics unit """ return True