From ccb35be76ea35d5df052790b58d42dcf9bd8a696 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Mon, 11 Mar 2024 18:29:42 +0000 Subject: [PATCH 1/4] (#1234) Do robot load as part of the plan --- .../wait_for_robot_load_then_centre_plan.py | 15 +++++++++++++++ .../wait_for_robot_load_then_center_params.py | 4 ++++ tests/conftest.py | 4 +++- .../good_test_wait_for_robot_load_params.json | 4 +++- ...test_wait_for_robot_load_params_no_energy.json | 4 +++- .../test_wait_for_robot_load_then_centre.py | 7 +++++-- 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py b/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py index 5f2e3e714..6f1acd7fd 100644 --- a/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py +++ b/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py @@ -19,6 +19,7 @@ from dodal.devices.oav.oav_detector import OAV from dodal.devices.oav.pin_image_recognition import PinTipDetection from dodal.devices.panda_fast_grid_scan import PandAFastGridScan +from dodal.devices.robot import BartRobot, SampleLocation from dodal.devices.s4_slit_gaps import S4SlitGaps from dodal.devices.smargon import Smargon from dodal.devices.synchrotron import Synchrotron @@ -83,6 +84,9 @@ class WaitForRobotLoadThenCentreComposite: dcm: DCM undulator_dcm: UndulatorDCM + # RobotLoad fields + robot: BartRobot + def create_devices(context: BlueskyContext) -> WaitForRobotLoadThenCentreComposite: from hyperion.utils.context import device_composite_from_context @@ -113,12 +117,23 @@ def wait_for_robot_load_then_centre_plan( composite: WaitForRobotLoadThenCentreComposite, parameters: WaitForRobotLoadThenCentreInternalParameters, ): + yield from bps.abs_set( + composite.robot, + SampleLocation( + parameters.experiment_params.sample_puck, + parameters.experiment_params.sample_pin, + ), + group="robot_load", + ) + if parameters.experiment_params.requested_energy_kev: yield from set_energy_plan( parameters.experiment_params.requested_energy_kev, cast(SetEnergyComposite, composite), ) + yield from bps.wait("robot_load") + yield from wait_for_smargon_not_disabled(composite.smargon) params_json = json.loads(parameters.json()) diff --git a/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py b/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py index 9ce5357e8..9c0400aa6 100644 --- a/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py +++ b/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py @@ -44,6 +44,10 @@ class WaitForRobotLoadThenCentreParams(AbstractExperimentParameterBase): detector_distance: float omega_start: float snapshot_dir: str + + sample_puck: int + sample_pin: int + requested_energy_kev: Optional[float] = None # Distance for the smargon to accelerate into the grid and decelerate out of the grid when using the panda diff --git a/tests/conftest.py b/tests/conftest.py index 326f470f3..5c6a51d45 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -309,9 +309,11 @@ def ophyd_pin_tip_detection(): @pytest.fixture -def robot(): +def robot(done_status): + RunEngine() # A RE is needed to start the bluesky loop robot = i03.robot(fake_with_ophyd_sim=True) set_sim_value(robot.barcode.bare_signal, ["BARCODE"]) + robot.set = MagicMock(return_value=done_status) return robot diff --git a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json b/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json index 5a7a848f4..64dd46fc9 100644 --- a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json +++ b/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json @@ -38,6 +38,8 @@ "detector_distance": 255, "snapshot_dir": "/tmp", "use_ophyd_pin_tip_detect": true, - "requested_energy_kev": 11.1 + "requested_energy_kev": 11.1, + "sample_puck": 40, + "sample_pin": 3 } } \ No newline at end of file diff --git a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json b/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json index 516896b4b..53cb124c8 100644 --- a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json +++ b/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json @@ -37,6 +37,8 @@ "omega_start": 0, "exposure_time": 0.004, "detector_distance": 255, - "snapshot_dir": "/tmp" + "snapshot_dir": "/tmp", + "sample_puck": 40, + "sample_pin": 3 } } \ No newline at end of file diff --git a/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py b/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py index bb1baf6c8..75acefc4f 100644 --- a/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py +++ b/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py @@ -22,11 +22,14 @@ @pytest.fixture -def wait_for_robot_load_composite(smargon, dcm): - composite = MagicMock() +def wait_for_robot_load_composite( + smargon, dcm, robot +) -> WaitForRobotLoadThenCentreComposite: + composite: WaitForRobotLoadThenCentreComposite = MagicMock() composite.smargon = smargon composite.dcm = dcm composite.dcm.energy_in_kev.user_readback.sim_put(11.105) + composite.robot = robot return composite From 4e054c9bbbad7ea41407ec719b76bc0b4cb762b4 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Mon, 11 Mar 2024 19:14:23 +0000 Subject: [PATCH 2/4] (#1234) Rename plan to reflect that it now does the robot load --- src/hyperion/experiment_plans/__init__.py | 8 +- .../experiment_plans/experiment_registry.py | 20 +-- ...plan.py => robot_load_then_centre_plan.py} | 24 ++-- .../ispyb/ispyb_dataclass.py | 4 +- ...ms.py => robot_load_then_center_params.py} | 20 ++- .../full_external_parameters_schema.json | 2 +- ....json => good_test_robot_load_params.json} | 2 +- ...ood_test_robot_load_params_no_energy.json} | 2 +- .../test_wait_for_robot_load_then_centre.py | 124 ++++++++---------- tests/unit_tests/hyperion/test_main_system.py | 2 +- 10 files changed, 96 insertions(+), 112 deletions(-) rename src/hyperion/experiment_plans/{wait_for_robot_load_then_centre_plan.py => robot_load_then_centre_plan.py} (88%) rename src/hyperion/parameters/plan_specific/{wait_for_robot_load_then_center_params.py => robot_load_then_center_params.py} (84%) rename tests/test_data/parameter_json_files/{good_test_wait_for_robot_load_params.json => good_test_robot_load_params.json} (95%) rename tests/test_data/parameter_json_files/{good_test_wait_for_robot_load_params_no_energy.json => good_test_robot_load_params_no_energy.json} (95%) diff --git a/src/hyperion/experiment_plans/__init__.py b/src/hyperion/experiment_plans/__init__.py index 766fd54be..32a3e3448 100644 --- a/src/hyperion/experiment_plans/__init__.py +++ b/src/hyperion/experiment_plans/__init__.py @@ -13,16 +13,16 @@ from hyperion.experiment_plans.pin_centre_then_xray_centre_plan import ( pin_tip_centre_then_xray_centre, ) -from hyperion.experiment_plans.rotation_scan_plan import rotation_scan -from hyperion.experiment_plans.wait_for_robot_load_then_centre_plan import ( - wait_for_robot_load_then_centre, +from hyperion.experiment_plans.robot_load_then_centre_plan import ( + robot_load_then_centre, ) +from hyperion.experiment_plans.rotation_scan_plan import rotation_scan __all__ = [ "flyscan_xray_centre", "grid_detect_then_xray_centre", "rotation_scan", "pin_tip_centre_then_xray_centre", - "wait_for_robot_load_then_centre", + "robot_load_then_centre", "panda_flyscan_xray_centre", ] diff --git a/src/hyperion/experiment_plans/experiment_registry.py b/src/hyperion/experiment_plans/experiment_registry.py index f33be4d5c..ef1c34e72 100644 --- a/src/hyperion/experiment_plans/experiment_registry.py +++ b/src/hyperion/experiment_plans/experiment_registry.py @@ -12,7 +12,7 @@ from hyperion.experiment_plans import ( grid_detect_then_xray_centre_plan, pin_centre_then_xray_centre_plan, - wait_for_robot_load_then_centre_plan, + robot_load_then_centre_plan, ) from hyperion.external_interaction.callbacks.abstract_plan_callback_collection import ( AbstractPlanCallbackCollection, @@ -37,14 +37,14 @@ PinCentreThenXrayCentreInternalParameters, PinCentreThenXrayCentreParams, ) +from hyperion.parameters.plan_specific.robot_load_then_center_params import ( + RobotLoadThenCentreInternalParameters, + RobotLoadThenCentreParams, +) from hyperion.parameters.plan_specific.rotation_scan_internal_params import ( RotationInternalParameters, RotationScanParams, ) -from hyperion.parameters.plan_specific.wait_for_robot_load_then_center_params import ( - WaitForRobotLoadThenCentreInternalParameters, - WaitForRobotLoadThenCentreParams, -) def not_implemented(): @@ -62,7 +62,7 @@ class ExperimentRegistryEntry(TypedDict): | GridScanWithEdgeDetectInternalParameters | RotationInternalParameters | PinCentreThenXrayCentreInternalParameters - | WaitForRobotLoadThenCentreInternalParameters + | RobotLoadThenCentreInternalParameters | PandAGridscanInternalParameters ] experiment_param_type: type[AbstractExperimentParameterBase] @@ -101,10 +101,10 @@ class ExperimentRegistryEntry(TypedDict): "experiment_param_type": PinCentreThenXrayCentreParams, "callback_collection_type": XrayCentreCallbackCollection, }, - "wait_for_robot_load_then_centre": { - "setup": wait_for_robot_load_then_centre_plan.create_devices, - "internal_param_type": WaitForRobotLoadThenCentreInternalParameters, - "experiment_param_type": WaitForRobotLoadThenCentreParams, + "robot_load_then_centre": { + "setup": robot_load_then_centre_plan.create_devices, + "internal_param_type": RobotLoadThenCentreInternalParameters, + "experiment_param_type": RobotLoadThenCentreParams, "callback_collection_type": XrayCentreCallbackCollection, }, } diff --git a/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py b/src/hyperion/experiment_plans/robot_load_then_centre_plan.py similarity index 88% rename from src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py rename to src/hyperion/experiment_plans/robot_load_then_centre_plan.py index 6f1acd7fd..289b04394 100644 --- a/src/hyperion/experiment_plans/wait_for_robot_load_then_centre_plan.py +++ b/src/hyperion/experiment_plans/robot_load_then_centre_plan.py @@ -48,14 +48,14 @@ from hyperion.parameters.plan_specific.pin_centre_then_xray_centre_params import ( PinCentreThenXrayCentreInternalParameters, ) -from hyperion.parameters.plan_specific.wait_for_robot_load_then_center_params import ( - WaitForRobotLoadThenCentreInternalParameters, +from hyperion.parameters.plan_specific.robot_load_then_center_params import ( + RobotLoadThenCentreInternalParameters, ) from hyperion.utils.utils import convert_eV_to_angstrom @dataclasses.dataclass -class WaitForRobotLoadThenCentreComposite: +class RobotLoadThenCentreComposite: # common fields xbpm_feedback: XBPMFeedback attenuator: Attenuator @@ -88,10 +88,10 @@ class WaitForRobotLoadThenCentreComposite: robot: BartRobot -def create_devices(context: BlueskyContext) -> WaitForRobotLoadThenCentreComposite: +def create_devices(context: BlueskyContext) -> RobotLoadThenCentreComposite: from hyperion.utils.context import device_composite_from_context - return device_composite_from_context(context, WaitForRobotLoadThenCentreComposite) + return device_composite_from_context(context, RobotLoadThenCentreComposite) def wait_for_smargon_not_disabled(smargon: Smargon, timeout=60): @@ -113,9 +113,9 @@ def wait_for_smargon_not_disabled(smargon: Smargon, timeout=60): ) -def wait_for_robot_load_then_centre_plan( - composite: WaitForRobotLoadThenCentreComposite, - parameters: WaitForRobotLoadThenCentreInternalParameters, +def robot_load_then_centre_plan( + composite: RobotLoadThenCentreComposite, + parameters: RobotLoadThenCentreInternalParameters, ): yield from bps.abs_set( composite.robot, @@ -144,9 +144,9 @@ def wait_for_robot_load_then_centre_plan( ) -def wait_for_robot_load_then_centre( - composite: WaitForRobotLoadThenCentreComposite, - parameters: WaitForRobotLoadThenCentreInternalParameters, +def robot_load_then_centre( + composite: RobotLoadThenCentreComposite, + parameters: RobotLoadThenCentreInternalParameters, ) -> MsgGenerator: eiger: EigerDetector = composite.eiger @@ -175,5 +175,5 @@ def wait_for_robot_load_then_centre( eiger, composite.detector_motion, parameters.experiment_params.detector_distance, - wait_for_robot_load_then_centre_plan(composite, parameters), + robot_load_then_centre_plan(composite, parameters), ) diff --git a/src/hyperion/external_interaction/ispyb/ispyb_dataclass.py b/src/hyperion/external_interaction/ispyb/ispyb_dataclass.py index 44cba23ff..e551552bd 100644 --- a/src/hyperion/external_interaction/ispyb/ispyb_dataclass.py +++ b/src/hyperion/external_interaction/ispyb/ispyb_dataclass.py @@ -42,14 +42,14 @@ class IspybParams(BaseModel): position: np.ndarray transmission_fraction: float - # populated by wait_for_robot_load_then_centre + # populated by robot_load_then_centre current_energy_ev: Optional[float] beam_size_x: float beam_size_y: float focal_spot_size_x: float focal_spot_size_y: float comment: str - # populated by wait_for_robot_load_then_centre + # populated by robot_load_then_centre resolution: Optional[float] sample_id: Optional[str] = None diff --git a/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py b/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py similarity index 84% rename from src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py rename to src/hyperion/parameters/plan_specific/robot_load_then_center_params.py index 9c0400aa6..fea4b2fb5 100644 --- a/src/hyperion/parameters/plan_specific/wait_for_robot_load_then_center_params.py +++ b/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py @@ -20,7 +20,7 @@ ) -class WaitForRobotLoadThenCentreHyperionParameters(HyperionParameters): +class RobotLoadThenCentreHyperionParameters(HyperionParameters): ispyb_params: RobotLoadIspybParams = RobotLoadIspybParams( **GRIDSCAN_ISPYB_PARAM_DEFAULTS ) @@ -34,7 +34,7 @@ class Config: @dataclass -class WaitForRobotLoadThenCentreParams(AbstractExperimentParameterBase): +class RobotLoadThenCentreParams(AbstractExperimentParameterBase): """ Holder class for the parameters of a plan that waits for robot load then does a centre. @@ -64,9 +64,9 @@ def get_num_images(self): return 0 -class WaitForRobotLoadThenCentreInternalParameters(InternalParameters): - experiment_params: WaitForRobotLoadThenCentreParams - hyperion_params: WaitForRobotLoadThenCentreHyperionParameters +class RobotLoadThenCentreInternalParameters(InternalParameters): + experiment_params: RobotLoadThenCentreParams + hyperion_params: RobotLoadThenCentreHyperionParameters class Config: arbitrary_types_allowed = True @@ -89,9 +89,9 @@ def _preprocess_experiment_params( cls, experiment_params: dict[str, Any], ): - return WaitForRobotLoadThenCentreParams( + return RobotLoadThenCentreParams( **extract_experiment_params_from_flat_dict( - WaitForRobotLoadThenCentreParams, experiment_params + RobotLoadThenCentreParams, experiment_params ) ) @@ -99,9 +99,7 @@ def _preprocess_experiment_params( def _preprocess_hyperion_params( cls, all_params: dict[str, Any], values: dict[str, Any] ): - experiment_params: WaitForRobotLoadThenCentreParams = values[ - "experiment_params" - ] + experiment_params: RobotLoadThenCentreParams = values["experiment_params"] all_params["num_images"] = 0 all_params["exposure_time"] = experiment_params.exposure_time all_params["position"] = np.array(all_params["position"]) @@ -111,7 +109,7 @@ def _preprocess_hyperion_params( all_params["trigger_mode"] = TriggerMode.FREE_RUN all_params["upper_left"] = np.zeros(3, dtype=np.int32) all_params["expected_energy_ev"] = None - return WaitForRobotLoadThenCentreHyperionParameters( + return RobotLoadThenCentreHyperionParameters( **extract_hyperion_params_from_flat_dict( all_params, cls._hyperion_param_key_definitions() ) diff --git a/src/hyperion/parameters/schemas/full_external_parameters_schema.json b/src/hyperion/parameters/schemas/full_external_parameters_schema.json index a90809f23..7e4b0bde2 100644 --- a/src/hyperion/parameters/schemas/full_external_parameters_schema.json +++ b/src/hyperion/parameters/schemas/full_external_parameters_schema.json @@ -24,7 +24,7 @@ "$ref": "experiment_schemas/grid_scan_with_edge_detect_params_schema.json" }, { - "$ref": "experiment_schemas/wait_for_robot_load_then_centre_schema.json" + "$ref": "experiment_schemas/robot_load_then_centre_schema.json" } ] } diff --git a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json b/tests/test_data/parameter_json_files/good_test_robot_load_params.json similarity index 95% rename from tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json rename to tests/test_data/parameter_json_files/good_test_robot_load_params.json index 64dd46fc9..80a581da4 100644 --- a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json +++ b/tests/test_data/parameter_json_files/good_test_robot_load_params.json @@ -4,7 +4,7 @@ "zocalo_environment": "artemis", "beamline": "BL03I", "insertion_prefix": "SR03S", - "experiment_type": "wait_for_robot_load_then_centre", + "experiment_type": "robot_load_then_centre", "detector_params": { "directory": "/tmp/", "prefix": "file_name", diff --git a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json b/tests/test_data/parameter_json_files/good_test_robot_load_params_no_energy.json similarity index 95% rename from tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json rename to tests/test_data/parameter_json_files/good_test_robot_load_params_no_energy.json index 53cb124c8..ca6f9c3e5 100644 --- a/tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json +++ b/tests/test_data/parameter_json_files/good_test_robot_load_params_no_energy.json @@ -4,7 +4,7 @@ "zocalo_environment": "artemis", "beamline": "BL03I", "insertion_prefix": "SR03S", - "experiment_type": "wait_for_robot_load_then_centre", + "experiment_type": "robot_load_then_centre", "detector_params": { "directory": "/tmp/", "prefix": "file_name", diff --git a/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py b/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py index 75acefc4f..890d58ecf 100644 --- a/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py +++ b/tests/unit_tests/experiment_plans/test_wait_for_robot_load_then_centre.py @@ -8,24 +8,22 @@ from numpy import isclose from ophyd.sim import instantiate_fake_device -from hyperion.experiment_plans.wait_for_robot_load_then_centre_plan import ( - WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre, +from hyperion.experiment_plans.robot_load_then_centre_plan import ( + RobotLoadThenCentreComposite, + robot_load_then_centre, ) from hyperion.parameters.external_parameters import from_file as raw_params_from_file from hyperion.parameters.plan_specific.pin_centre_then_xray_centre_params import ( PinCentreThenXrayCentreInternalParameters, ) -from hyperion.parameters.plan_specific.wait_for_robot_load_then_center_params import ( - WaitForRobotLoadThenCentreInternalParameters, +from hyperion.parameters.plan_specific.robot_load_then_center_params import ( + RobotLoadThenCentreInternalParameters, ) @pytest.fixture -def wait_for_robot_load_composite( - smargon, dcm, robot -) -> WaitForRobotLoadThenCentreComposite: - composite: WaitForRobotLoadThenCentreComposite = MagicMock() +def robot_load_composite(smargon, dcm, robot) -> RobotLoadThenCentreComposite: + composite: RobotLoadThenCentreComposite = MagicMock() composite.smargon = smargon composite.dcm = dcm composite.dcm.energy_in_kev.user_readback.sim_put(11.105) @@ -34,19 +32,19 @@ def wait_for_robot_load_composite( @pytest.fixture -def wait_for_robot_load_then_centre_params_no_energy(): +def robot_load_then_centre_params_no_energy(): params = raw_params_from_file( - "tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params_no_energy.json" + "tests/test_data/parameter_json_files/good_test_robot_load_params_no_energy.json" ) - return WaitForRobotLoadThenCentreInternalParameters(**params) + return RobotLoadThenCentreInternalParameters(**params) @pytest.fixture -def wait_for_robot_load_then_centre_params(): +def robot_load_then_centre_params(): params = raw_params_from_file( - "tests/test_data/parameter_json_files/good_test_wait_for_robot_load_params.json" + "tests/test_data/parameter_json_files/good_test_robot_load_params.json" ) - return WaitForRobotLoadThenCentreInternalParameters(**params) + return RobotLoadThenCentreInternalParameters(**params) def dummy_set_energy_plan(energy, composite): @@ -54,31 +52,27 @@ def dummy_set_energy_plan(energy, composite): @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(return_value=iter([])), ) def test_when_plan_run_then_centring_plan_run_with_expected_parameters( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params: RobotLoadThenCentreInternalParameters, ): RE = RunEngine() - RE( - wait_for_robot_load_then_centre( - wait_for_robot_load_composite, wait_for_robot_load_then_centre_params - ) - ) + RE(robot_load_then_centre(robot_load_composite, robot_load_then_centre_params)) composite_passed = mock_centring_plan.call_args[0][0] params_passed: PinCentreThenXrayCentreInternalParameters = ( mock_centring_plan.call_args[0][1] ) for name, value in vars(composite_passed).items(): - assert value == getattr(wait_for_robot_load_composite, name) + assert value == getattr(robot_load_composite, name) assert isinstance(params_passed, PinCentreThenXrayCentreInternalParameters) assert params_passed.hyperion_params.detector_params.expected_energy_ev == 11100 @@ -89,16 +83,16 @@ def test_when_plan_run_then_centring_plan_run_with_expected_parameters( @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(side_effect=dummy_set_energy_plan), ) def test_when_plan_run_with_requested_energy_specified_energy_change_executes( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params: RobotLoadThenCentreInternalParameters, sim_run_engine, ): sim_run_engine.add_handler( @@ -107,9 +101,7 @@ def test_when_plan_run_with_requested_energy_specified_energy_change_executes( lambda msg: {"dcm_energy_in_kev": {"value": 11.105}}, ) messages = sim_run_engine.simulate_plan( - wait_for_robot_load_then_centre( - wait_for_robot_load_composite, wait_for_robot_load_then_centre_params - ) + robot_load_then_centre(robot_load_composite, robot_load_then_centre_params) ) sim_run_engine.assert_message_and_return_remaining( messages, lambda msg: msg.command == "set_energy_plan" @@ -122,16 +114,16 @@ def test_when_plan_run_with_requested_energy_specified_energy_change_executes( @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(return_value=iter([Msg("set_energy_plan")])), ) -def test_wait_for_robot_load_then_centre_doesnt_set_energy_if_not_specified( +def test_robot_load_then_centre_doesnt_set_energy_if_not_specified( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params_no_energy: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params_no_energy: RobotLoadThenCentreInternalParameters, sim_run_engine, ): sim_run_engine.add_handler( @@ -140,9 +132,9 @@ def test_wait_for_robot_load_then_centre_doesnt_set_energy_if_not_specified( lambda msg: {"dcm_energy_in_kev": {"value": 11.105}}, ) messages = sim_run_engine.simulate_plan( - wait_for_robot_load_then_centre( - wait_for_robot_load_composite, - wait_for_robot_load_then_centre_params_no_energy, + robot_load_then_centre( + robot_load_composite, + robot_load_then_centre_params_no_energy, ) ) assert not any(msg for msg in messages if msg.command == "set_energy_plan") @@ -154,17 +146,13 @@ def test_wait_for_robot_load_then_centre_doesnt_set_energy_if_not_specified( def run_simulating_smargon_wait( - wait_for_robot_load_then_centre_params, - wait_for_robot_load_composite, + robot_load_then_centre_params, + robot_load_composite, total_disabled_reads, sim_run_engine, ): - wait_for_robot_load_composite.smargon = instantiate_fake_device( - Smargon, name="smargon" - ) - wait_for_robot_load_composite.eiger = instantiate_fake_device( - EigerDetector, name="eiger" - ) + robot_load_composite.smargon = instantiate_fake_device(Smargon, name="smargon") + robot_load_composite.eiger = instantiate_fake_device(EigerDetector, name="eiger") num_of_reads = 0 @@ -185,30 +173,28 @@ def return_not_disabled_after_reads(_): ) return sim_run_engine.simulate_plan( - wait_for_robot_load_then_centre( - wait_for_robot_load_composite, wait_for_robot_load_then_centre_params - ) + robot_load_then_centre(robot_load_composite, robot_load_then_centre_params) ) @pytest.mark.parametrize("total_disabled_reads", [5, 3, 14]) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(return_value=iter([])), ) def test_given_smargon_disabled_when_plan_run_then_waits_on_smargon( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params: RobotLoadThenCentreInternalParameters, total_disabled_reads: int, sim_run_engine, ): messages = run_simulating_smargon_wait( - wait_for_robot_load_then_centre_params, - wait_for_robot_load_composite, + robot_load_then_centre_params, + robot_load_composite, total_disabled_reads, sim_run_engine, ) @@ -226,43 +212,43 @@ def test_given_smargon_disabled_when_plan_run_then_waits_on_smargon( @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(return_value=iter([])), ) def test_given_smargon_disabled_for_longer_than_timeout_when_plan_run_then_throws_exception( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params: RobotLoadThenCentreInternalParameters, sim_run_engine, ): with pytest.raises(TimeoutError): run_simulating_smargon_wait( - wait_for_robot_load_then_centre_params, - wait_for_robot_load_composite, + robot_load_then_centre_params, + robot_load_composite, 1000, sim_run_engine, ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" + "hyperion.experiment_plans.robot_load_then_centre_plan.pin_centre_then_xray_centre_plan" ) @patch( - "hyperion.experiment_plans.wait_for_robot_load_then_centre_plan.set_energy_plan", + "hyperion.experiment_plans.robot_load_then_centre_plan.set_energy_plan", MagicMock(return_value=iter([])), ) def test_when_plan_run_then_detector_arm_started_before_wait_on_robot_load( mock_centring_plan: MagicMock, - wait_for_robot_load_composite: WaitForRobotLoadThenCentreComposite, - wait_for_robot_load_then_centre_params: WaitForRobotLoadThenCentreInternalParameters, + robot_load_composite: RobotLoadThenCentreComposite, + robot_load_then_centre_params: RobotLoadThenCentreInternalParameters, sim_run_engine, ): messages = run_simulating_smargon_wait( - wait_for_robot_load_then_centre_params, - wait_for_robot_load_composite, + robot_load_then_centre_params, + robot_load_composite, 1, sim_run_engine, ) diff --git a/tests/unit_tests/hyperion/test_main_system.py b/tests/unit_tests/hyperion/test_main_system.py index 1ac5dea59..5d76eac90 100644 --- a/tests/unit_tests/hyperion/test_main_system.py +++ b/tests/unit_tests/hyperion/test_main_system.py @@ -552,4 +552,4 @@ def test_when_context_created_then_contains_expected_number_of_plans( assert "rotation_scan" in plan_names assert "flyscan_xray_centre" in plan_names assert "pin_tip_centre_then_xray_centre" in plan_names - assert "wait_for_robot_load_then_centre" in plan_names + assert "robot_load_then_centre" in plan_names From 15ea41300728e3b83c886594bc83e4ec475848f6 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Mon, 11 Mar 2024 19:15:47 +0000 Subject: [PATCH 3/4] (#1234) Update dodal dependency --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 5bd19db51..ae46df72f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,7 +35,7 @@ install_requires = xarray doct databroker - dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@ca9d6df8f17f88ce0128af9cbdfd40d0cfc44a26 + dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@ad9cb4469f84b35501e5fe4b37a2047641eca6d2 pydantic<2.0 # See https://github.com/DiamondLightSource/hyperion/issues/774 scipy pyzmq<25 # See https://github.com/DiamondLightSource/hyperion/issues/1103 From 1ba8ac2eb40b9017ba70c2c69f814a6f6c9b2dc7 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Tue, 12 Mar 2024 13:50:42 +0000 Subject: [PATCH 4/4] (#1234) Ignore type on ispyb params as they're soon to be removed --- .../parameters/plan_specific/robot_load_then_center_params.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py b/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py index fea4b2fb5..a6607c1e4 100644 --- a/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py +++ b/src/hyperion/parameters/plan_specific/robot_load_then_center_params.py @@ -21,7 +21,7 @@ class RobotLoadThenCentreHyperionParameters(HyperionParameters): - ispyb_params: RobotLoadIspybParams = RobotLoadIspybParams( + ispyb_params: RobotLoadIspybParams = RobotLoadIspybParams( # type: ignore **GRIDSCAN_ISPYB_PARAM_DEFAULTS )