Source code for pyaml.magnet.identity_model
import numpy as np
from pydantic import BaseModel, ConfigDict
from .. import PyAMLException
from ..common.element import __pyaml_repr__
from ..control.deviceaccess import DeviceAccess
from .model import MagnetModel
# Define the main class name for this module
PYAMLCLASS = "IdentityMagnetModel"
[docs]
class ConfigModel(BaseModel):
"""
Configuration model for identity magnet model
Parameters
----------
powerconverter : DeviceAccess, optional
Power converter device to apply current
physics : DeviceAccess, optional
Magnet device to apply strength
unit : str
Unit of the strength (i.e. 1/m or m-1)
"""
model_config = ConfigDict(arbitrary_types_allowed=True, extra="forbid")
powerconverter: DeviceAccess | None = None
physics: DeviceAccess | None = None
unit: str
[docs]
class IdentityMagnetModel(MagnetModel):
"""
Class that map value to underlying device without conversion
"""
def __init__(self, cfg: ConfigModel):
self._cfg = cfg
self.__unit = cfg.unit
if cfg.physics is None and cfg.powerconverter is None:
raise PyAMLException("Invalid IdentityMagnetModel configuration,physics or powerconverter device required")
if cfg.physics is not None and cfg.powerconverter is not None:
raise PyAMLException(
"Invalid IdentityMagnetModel configuration,physics or powerconverter device required but not both"
)
if cfg.physics:
self.__device = cfg.physics
else:
self.__device = cfg.powerconverter
[docs]
def compute_hardware_values(self, strengths: np.array) -> np.array:
return strengths
[docs]
def compute_strengths(self, currents: np.array) -> np.array:
return currents
[docs]
def get_strength_units(self) -> list[str]:
return [self.__unit]
[docs]
def get_hardware_units(self) -> list[str]:
return [self.__unit]
[docs]
def get_devices(self) -> list[DeviceAccess]:
return [self.__device]
[docs]
def set_magnet_rigidity(self, brho: np.double):
pass
[docs]
def has_physics(self) -> bool:
return self._cfg.physics is not None
[docs]
def has_hardware(self) -> bool:
return self._cfg.powerconverter is not None
def __repr__(self):
return __pyaml_repr__(self)