Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Rotation scan moves aperture to LARGE by default #1546

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion src/hyperion/parameters/rotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@
from typing import Annotated

from annotated_types import Len
from dodal.devices.aperturescatterguard import AperturePositionGDANames
from dodal.devices.detector import DetectorParams
from dodal.devices.detector.det_dist_to_beam_converter import (
DetectorDistanceToBeamXYConverter,
)
from dodal.devices.zebra import (
RotationDirection,
)
from pydantic import Field, root_validator
from dodal.log import LOGGER
from pydantic import Field, root_validator, validator
from scanspec.core import AxesPoints
from scanspec.core import Path as ScanPath
from scanspec.specs import Line
Expand All @@ -31,6 +33,8 @@
)
from hyperion.parameters.constants import CONST, I03Constants

DEFAULT_APERTURE_POSITION = AperturePositionGDANames.LARGE_APERTURE


class RotationScanPerSweep(OptionalGonioAngleStarts, OptionalXyzStarts):
omega_start_deg: float = Field(default=0) # type: ignore
Expand Down Expand Up @@ -77,6 +81,18 @@ def _detector_params(self, omega_start_deg: float):
**optional_args,
)

@validator("selected_aperture")
def _set_default_aperture_position(
cls, aperture_position: AperturePositionGDANames | None
):
if not aperture_position:
LOGGER.warn(
f"No aperture position selected. Defaulting to {DEFAULT_APERTURE_POSITION}"
)
return DEFAULT_APERTURE_POSITION
else:
return aperture_position


class RotationScan(WithScan, RotationScanPerSweep, RotationExperiment):
@property
Expand Down
23 changes: 16 additions & 7 deletions tests/unit_tests/device_setup_plans/test_manipulate_sample.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from unittest.mock import patch

import pytest
from bluesky.run_engine import RunEngine
from dodal.devices.aperturescatterguard import (
AperturePosition,
Expand All @@ -10,17 +11,25 @@
from hyperion.device_setup_plans.manipulate_sample import move_aperture_if_required


@pytest.mark.parametrize(
"gda_position, set_position",
[
(AperturePositionGDANames.SMALL_APERTURE, AperturePosition.SMALL),
(AperturePositionGDANames.MEDIUM_APERTURE, AperturePosition.MEDIUM),
(AperturePositionGDANames.ROBOT_LOAD, AperturePosition.ROBOT_LOAD),
(AperturePositionGDANames.LARGE_APERTURE, AperturePosition.LARGE),
],
)
async def test_move_aperture_goes_to_correct_position(
aperture_scatterguard: ApertureScatterguard, RE: RunEngine
aperture_scatterguard: ApertureScatterguard,
RE: RunEngine,
gda_position,
set_position,
):
with patch.object(aperture_scatterguard, "set") as mock_set:
RE(
move_aperture_if_required(
aperture_scatterguard, AperturePositionGDANames.LARGE_APERTURE
)
)
RE(move_aperture_if_required(aperture_scatterguard, gda_position))
mock_set.assert_called_once_with(
AperturePosition.LARGE,
set_position,
)


Expand Down
10 changes: 10 additions & 0 deletions tests/unit_tests/parameters/test_parameter_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from pathlib import Path

import pytest
from dodal.devices.aperturescatterguard import AperturePositionGDANames
from pydantic import ValidationError

from hyperion.parameters.gridscan import (
Expand Down Expand Up @@ -110,3 +111,12 @@ def test_osc_is_used():
params = RotationScan(**raw_params)
assert params.rotation_increment_deg == osc
assert params.num_images == int(params.scan_width_deg / osc)


def test_selected_aperture_uses_default():
raw_params = raw_params_from_file(
"tests/test_data/parameter_json_files/good_test_rotation_scan_parameters.json"
)
raw_params["selected_aperture"] = None
params = RotationScan(**raw_params)
assert params.selected_aperture == AperturePositionGDANames.LARGE_APERTURE
Loading