Source code for mxcubeweb.core.adapter.wavelength_adapter

import logging

from mxcubeweb.core.adapter.adapter_base import ActuatorAdapterBase
from mxcubeweb.core.models.adaptermodels import (
    FloatValueModel,
    HOActuatorValueChangeModel,
)
from mxcubeweb.core.util.networkutils import RateLimited

hwr_logger = logging.getLogger("MX3.HWR")


[docs]class WavelengthAdapter(ActuatorAdapterBase): """Adapter for wavelength Hardware Object. A web socket is used to communicate information on longer running processes. """ def __init__( # noqa: D417 self, ho, *args ): """Initialize. Args: ho (object): Hardware object. """ super().__init__(ho, *args) self._type = "MOTOR" try: ho.connect("energyChanged", self._value_change) ho.connect("stateChanged", self.state_change) except Exception: msg = f"Could not connect signal: {ho.name}" hwr_logger.exception(msg) @RateLimited(6) def _value_change(self, pos, wl, *args, **kwargs): self.value_change(wl)
[docs] def set_value(self, value: HOActuatorValueChangeModel): """Execute the sequence to set the value. Args: value (float): Target wavelength [Å]. Returns: (float as str): The actual value set. Raises: ValueError: Value not valid or attemp to set read only value. RuntimeError: Timeout while setting the value. StopItteration: When a value change was interrupted (abort/cancel). """ try: self._ho.set_wavelength(float(value.value)) return self.get_value() except Exception: msg = "Could not set value the wavelength: {ho.name}" hwr_logger.exception(msg)
[docs] def get_value(self) -> FloatValueModel: """Read the wavelength value. Returns: (float as str): Wavelength [Å]. Raises: ValueError: When value for any reason can't be retrieved. """ try: return FloatValueModel(value=self._ho.get_wavelength()) except (AttributeError, TypeError) as ex: msg = "Could not get value" raise ValueError(msg) from ex
[docs] def state(self): """Get the state. Returns: (str): The state """ # The state is an enum, return the name only return self._ho.get_state().name
[docs] def stop(self): """Stop the execution.""" self._ho.abort()
[docs] def limits(self): """Read the wavelengt limits. Returns: (tuple): Two floats (min, max) limits. Raises: ValueError: When limits for any reason can't be retrieved. """ try: return self._ho.get_wavelength_limits() except (AttributeError, TypeError) as ex: msg = "Could not get limits" raise ValueError(msg) from ex
[docs] def read_only(self): """Check if the wavelength is read only or not. Returns: (bool): ``True`` if read only, ``False`` if not. """ return self._ho.read_only