Source code for dodal.devices.beamlines.i15_1.laue
from daq_config_server import ConfigClient
from daq_config_server.models.i15_1 import XpdfCrystalLookupTable
from ophyd_async.core import StandardReadable, StandardReadableFormat, derived_signal_r
from ophyd_async.epics.motor import Motor
[docs]
class LaueMonochrometer(StandardReadable):
def __init__(
self,
prefix: str,
config_client: ConfigClient,
crystal_lut_path: str,
name: str = "",
):
with self.add_children_as_readables():
self.bend = Motor(prefix + "BENDER")
self.bragg = Motor(prefix + "PITCH")
self.roll = Motor(prefix + "ROLL")
self.yaw = Motor(prefix + "YAW")
self.y = Motor(prefix + "Y")
with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
self.energy_kev = derived_signal_r(self._get_energy, y=self.y)
self._config_client = config_client
self._crystal_lut_path = crystal_lut_path
super().__init__(name)
def _get_xtal_config(self) -> XpdfCrystalLookupTable:
return self._config_client.get_file_contents(
self._crystal_lut_path,
XpdfCrystalLookupTable,
# Remove once https://github.com/DiamondLightSource/daq-config-server/pull/183 is released + deployed
force_parser=XpdfCrystalLookupTable.from_contents,
)
def _get_energy(self, y: float) -> float:
xtal_lut = self._get_xtal_config()
return xtal_lut.get_energy(y)