diff --git a/pyproject.toml b/pyproject.toml index 7cbd20ad..e4fa9460 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ dependencies = [ "aarecommon>=0.5.1", "pydantic>=2.11", "numpy", - "jfjoch_client==1.0.0rc146", + "jfjoch_client>=1.0.0rc146", "pyJWT", "pyzmq", "opencv-python-headless", diff --git a/src/aare/beamline_dispatch/protocols.py b/src/aare/beamline_dispatch/protocols.py index 1d9b54cd..b833dda8 100644 --- a/src/aare/beamline_dispatch/protocols.py +++ b/src/aare/beamline_dispatch/protocols.py @@ -38,6 +38,11 @@ class Geometry(ABC): @abstractmethod def beam_centre_model(self) -> BeamCenterFromDetectorStage: ... + @property + @abstractmethod + def detector_tilt(self) -> tuple[float, float]: + """A tuple of PONI rot1 and rot2 in radians""" + class BeamlineDispatch(ABC): @property diff --git a/src/aare/beamline_dispatch/x06da/beamline_dispatch.py b/src/aare/beamline_dispatch/x06da/beamline_dispatch.py index 8bb334ff..89cec67c 100644 --- a/src/aare/beamline_dispatch/x06da/beamline_dispatch.py +++ b/src/aare/beamline_dispatch/x06da/beamline_dispatch.py @@ -2,7 +2,7 @@ from typing import Any from aarecommon.config.beamline import MXBeamline -from aare.beamline_dispatch.default.beamline_dispatch import DefaultDispatch +from aare.beamline_dispatch.default.beamline_dispatch import DefaultDispatch, DefaultGeometry from aare.beamline_dispatch.protocols import BecMacros @@ -52,9 +52,17 @@ class X06daBecMacros(BecMacros): def auto_exposure(): ... +class X06daGeometry(DefaultGeometry): + @property + def detector_tilt(self) -> tuple[float, float]: + poni_rot1_rad = -0.001396263 + poni_rot2_rad = -0.003839724 + return poni_rot1_rad, poni_rot2_rad + + class X06daDispatch(DefaultDispatch): def __init__(self, beamline: MXBeamline) -> None: - super().__init__(beamline=beamline) + super().__init__(beamline=beamline, geo_class=X06daGeometry) self._bec_macros = X06daBecMacros() @property diff --git a/src/aare/beamline_dispatch/x10sa/beamline_dispatch.py b/src/aare/beamline_dispatch/x10sa/beamline_dispatch.py index cc9c1a9f..c721a7cb 100644 --- a/src/aare/beamline_dispatch/x10sa/beamline_dispatch.py +++ b/src/aare/beamline_dispatch/x10sa/beamline_dispatch.py @@ -97,6 +97,10 @@ class X10saGeometry(DefaultGeometry): def beam_centre_model(self) -> BeamCenterModel: return self._model + @property + def detector_tilt(self) -> tuple[float, float]: + return 0, 0 + class X10saDispatch(DefaultDispatch): def __init__(self, beamline: MXBeamline) -> None: diff --git a/src/aare/daq/daq.py b/src/aare/daq/daq.py index 57dfd103..b23975d8 100644 --- a/src/aare/daq/daq.py +++ b/src/aare/daq/daq.py @@ -3154,6 +3154,7 @@ class AareDAQ: detector_serial_number = str(metadata.get("detector_serial_number", "unavailable")) energy = self._devs.energy_kev dtz = self._devs.dtz + poni_rot1_rad, poni_rot2_rad = self._dispatch.geo.detector_tilt return DiffractionGeometry( energy_keV=energy, dtz_mm=dtz, @@ -3162,8 +3163,8 @@ class AareDAQ: beam_center_pxl=self._devs.detector_beam_centre_px, detector_description=detector_description, detector_serial_number=detector_serial_number, - poni_rot1_rad=-0.001396263, - poni_rot2_rad=-0.003839724, + poni_rot1_rad=poni_rot1_rad, + poni_rot2_rad=poni_rot2_rad, ) @property diff --git a/src/aare/gui/main_window.py b/src/aare/gui/main_window.py index ea6a1bc7..aafb3bb9 100644 --- a/src/aare/gui/main_window.py +++ b/src/aare/gui/main_window.py @@ -322,8 +322,8 @@ class MainWindow(QMainWindow): beam_center_pxl=(750, 750), detector_description="PILATUS 4", detector_serial_number="1", - poni_rot1_rad=-0.001396263, - poni_rot2_rad=-0.003839724, + poni_rot1_rad=-0, + poni_rot2_rad=-0, ) geom = SampleGeometryModel( diff --git a/tests/unit/utils/test_beamline_dispatch.py b/tests/unit/utils/test_beamline_dispatch.py index 91ad8812..65b8474d 100644 --- a/tests/unit/utils/test_beamline_dispatch.py +++ b/tests/unit/utils/test_beamline_dispatch.py @@ -49,6 +49,15 @@ def test_pxii_dispatch_beam_center(): assert np.isclose(beam_center[1][0], 2242.05, atol=1) +@pytest.mark.skipif( + importlib.util.find_spec("pxii_bec") is None, reason="run only for pxii flavour" +) +def test_poni_rot_is_0(): + with patch.dict("os.environ", {"BEAMLINE": "X10SA"}): + dispatch = get_beamline_dispatch() + assert dispatch.geo.detector_tilt == (0, 0) + + @pytest.mark.skipif( importlib.util.find_spec("pxiii_bec") is None, reason="run only for pxiii flavour" ) @@ -56,3 +65,12 @@ def test_pxiii_dispatch_can_be_instantiated(): with patch.dict("os.environ", {"BEAMLINE": "X06DA"}): dispatch = get_beamline_dispatch() assert isinstance(dispatch, X06daDispatch) + + +@pytest.mark.skipif( + importlib.util.find_spec("pxiii_bec") is None, reason="run only for pxiii flavour" +) +def test_poni_rot_is_not_0(): + with patch.dict("os.environ", {"BEAMLINE": "X06DA"}): + dispatch = get_beamline_dispatch() + assert dispatch.geo.detector_tilt != (0, 0)