diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index ef1ef5fdbb4..782dd4357cc 100644 --- a/src/dodal/beamlines/i04.py +++ b/src/dodal/beamlines/i04.py @@ -12,7 +12,6 @@ from dodal.devices.backlight import Backlight from dodal.devices.baton import Baton from dodal.devices.beamlines.i03.dcm import DCM -from dodal.devices.beamlines.i04.beam_centre import CentreEllipseMethod from dodal.devices.beamlines.i04.beamsize import Beamsize from dodal.devices.beamlines.i04.constants import RedisConstants from dodal.devices.beamlines.i04.max_pixel import MaxPixel @@ -26,6 +25,7 @@ from dodal.devices.ipin import IPin from dodal.devices.motors import XYZStage from dodal.devices.mx_phase1.beamstop import Beamstop +from dodal.devices.oav.beam_centre.beam_centre import CentreEllipseMethod from dodal.devices.oav.oav_detector import ( OAVBeamCentrePV, ZoomControllerWithBeamCentres, diff --git a/src/dodal/beamlines/i19_1.py b/src/dodal/beamlines/i19_1.py index 3e8ef966622..e67ab3eb6ad 100644 --- a/src/dodal/beamlines/i19_1.py +++ b/src/dodal/beamlines/i19_1.py @@ -15,6 +15,7 @@ ) from dodal.devices.beamlines.i19.beamstop import BeamStop from dodal.devices.beamlines.i19.pin_tip import PinTipCentreHolder +from dodal.devices.oav.beam_centre.beam_centre import CentreEllipseMethod from dodal.devices.oav.oav_detector import OAVBeamCentreFile from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre from dodal.devices.oav.pin_image_recognition import PinTipDetection @@ -60,6 +61,14 @@ def beamstop() -> BeamStop: return BeamStop(prefix=f"{PREFIX.beamline_prefix}-RS-ABSB-01:") +@devices.factory() +def beam_centre() -> CentreEllipseMethod: + return CentreEllipseMethod( + prefix=f"{PREFIX.beamline_prefix}-EA-OAV-01:", + overlay_channel=7, + ) + + @devices.fixture def oav_config() -> OAVConfigBeamCentre: return OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG) diff --git a/src/dodal/devices/oav/beam_centre/__init__.py b/src/dodal/devices/oav/beam_centre/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/dodal/devices/beamlines/i04/beam_centre.py b/src/dodal/devices/oav/beam_centre/beam_centre.py similarity index 98% rename from src/dodal/devices/beamlines/i04/beam_centre.py rename to src/dodal/devices/oav/beam_centre/beam_centre.py index c1948830c98..daddd9ba470 100644 --- a/src/dodal/devices/beamlines/i04/beam_centre.py +++ b/src/dodal/devices/oav/beam_centre/beam_centre.py @@ -146,6 +146,7 @@ async def trigger(self): ellipse_fit = self._fit_ellipse(roi_binary) roi_centre_x = ellipse_fit[0][0] roi_centre_y = ellipse_fit[0][1] + LOGGER.info(f"Beam centre founf at ({roi_centre_x}, {roi_centre_y})") # convert back to full screen image coords and set beam centre self._center_x_val_setter(roi_centre_x + top_left_corner[0]) self._center_y_val_setter(roi_centre_y + top_left_corner[1]) diff --git a/tests/devices/beamlines/i04/test_beam_centre.py b/tests/devices/oav/test_beam_centre.py similarity index 91% rename from tests/devices/beamlines/i04/test_beam_centre.py rename to tests/devices/oav/test_beam_centre.py index 5454e735f11..ec9f37ee573 100644 --- a/tests/devices/beamlines/i04/test_beam_centre.py +++ b/tests/devices/oav/test_beam_centre.py @@ -5,7 +5,7 @@ import pytest from ophyd_async.core import init_devices, set_mock_value -from dodal.devices.beamlines.i04.beam_centre import ( +from dodal.devices.oav.beam_centre.beam_centre import ( CentreEllipseMethod, convert_image_to_binary, get_roi, @@ -35,8 +35,8 @@ def test_image_array(): ) -@patch("dodal.devices.beamlines.i04.beam_centre.cv2.threshold") -@patch("dodal.devices.beamlines.i04.beam_centre.convert_to_gray_and_blur") +@patch("dodal.devices.oav.beam_centre.beam_centre.cv2.threshold") +@patch("dodal.devices.oav.beam_centre.beam_centre.convert_to_gray_and_blur") async def test_convert_image_to_binary_calls_threshold_twice( mock_convert, mock_threshold ): @@ -60,8 +60,8 @@ async def test_convert_image_to_binary_calls_threshold_twice( assert second_call_args[1] == 147 -@patch("dodal.devices.beamlines.i04.beam_centre.cv2.findContours") -@patch("dodal.devices.beamlines.i04.beam_centre.cv2.fitEllipse") +@patch("dodal.devices.oav.beam_centre.beam_centre.cv2.findContours") +@patch("dodal.devices.oav.beam_centre.beam_centre.cv2.fitEllipse") async def test_fit_ellipse_good_params( fit_ellipse: MagicMock, find_contours_mock: MagicMock, @@ -95,7 +95,7 @@ async def test_fit_ellipse_raises_error_if_not_enough_image_points( ], # 4 points (square) ], ) -@patch("dodal.devices.beamlines.i04.beam_centre.cv2.findContours") +@patch("dodal.devices.oav.beam_centre.beam_centre.cv2.findContours") async def test_fit_ellipse_raises_error_if_not_enough_contour_points( find_contours_mock: MagicMock, centre_device: CentreEllipseMethod, @@ -108,8 +108,8 @@ async def test_fit_ellipse_raises_error_if_not_enough_contour_points( await centre_device.trigger() -@patch("dodal.devices.beamlines.i04.beam_centre.CentreEllipseMethod._fit_ellipse") -@patch("dodal.devices.beamlines.i04.beam_centre.convert_image_to_binary") +@patch("dodal.devices.oav.beam_centre.beam_centre.CentreEllipseMethod._fit_ellipse") +@patch("dodal.devices.oav.beam_centre.beam_centre.convert_image_to_binary") async def test_trigger_converts_to_binary_then_finds_ellipse( mock_convert_to_binary: MagicMock, mock_fit_ellipse: MagicMock,