diff --git a/src/artemis/experiment_plans/fast_grid_scan_plan.py b/src/artemis/experiment_plans/fast_grid_scan_plan.py index 9d9f474e2..346e907b1 100755 --- a/src/artemis/experiment_plans/fast_grid_scan_plan.py +++ b/src/artemis/experiment_plans/fast_grid_scan_plan.py @@ -224,18 +224,11 @@ def run_gridscan( @bpp.set_run_key_decorator("do_fgs") @bpp.run_decorator(md={"subplan_name": "do_fgs"}) + @bpp.stage_decorator([fgs_composite.eiger]) def do_fgs(): - try: - yield from bps.wait() # Wait for all moves to complete - yield from bps.kickoff(fgs_motors) - yield from bps.complete(fgs_motors, wait=True) - finally: - yield from bps.unstage(fgs_composite.eiger) - - # Wait for arming to finish - artemis.log.LOGGER.info("Waiting for arming...") - yield from bps.wait("arming") - artemis.log.LOGGER.info("Arming finished") + yield from bps.wait() # Wait for all moves to complete + yield from bps.kickoff(fgs_motors) + yield from bps.complete(fgs_motors, wait=True) with TRACER.start_span("do_fgs"): yield from do_fgs() diff --git a/src/artemis/experiment_plans/tests/conftest.py b/src/artemis/experiment_plans/tests/conftest.py index f70c69ab9..0495848b3 100644 --- a/src/artemis/experiment_plans/tests/conftest.py +++ b/src/artemis/experiment_plans/tests/conftest.py @@ -4,6 +4,7 @@ from bluesky.run_engine import RunEngine from dodal.beamlines import i03 from dodal.devices.aperturescatterguard import AperturePositions +from dodal.devices.smargon import Smargon from artemis.experiment_plans.fast_grid_scan_plan import FGSComposite from artemis.external_interaction.callbacks.fgs.fgs_callback_collection import ( @@ -44,7 +45,7 @@ def eiger(): @pytest.fixture -def smargon(): +def smargon() -> Smargon: smargon = i03.smargon(fake_with_ophyd_sim=True) smargon.x.user_setpoint._use_limits = False smargon.y.user_setpoint._use_limits = False @@ -104,7 +105,7 @@ def test_full_grid_scan_params(): @pytest.fixture -def fake_fgs_composite(test_fgs_params: InternalParameters): +def fake_fgs_composite(smargon: Smargon, test_fgs_params: InternalParameters): fake_composite = FGSComposite( aperture_positions=AperturePositions( LARGE=(1, 2, 3, 4, 5), @@ -128,6 +129,8 @@ def fake_fgs_composite(test_fgs_params: InternalParameters): fake_composite.fast_grid_scan.scan_invalid.sim_put(False) fake_composite.fast_grid_scan.position_counter.sim_put(0) + fake_composite.sample_motors = smargon + return fake_composite diff --git a/src/artemis/experiment_plans/tests/test_fast_grid_scan_plan.py b/src/artemis/experiment_plans/tests/test_fast_grid_scan_plan.py index 26af0d871..807ef97ae 100644 --- a/src/artemis/experiment_plans/tests/test_fast_grid_scan_plan.py +++ b/src/artemis/experiment_plans/tests/test_fast_grid_scan_plan.py @@ -380,28 +380,18 @@ def test_when_exception_occurs_during_running_then_eiger_disarmed( fake_fgs_composite.eiger.disarm_detector.assert_called_once() -# Eiger is armed if eiger.armed_status is complete and fan ready is called. This test is very slow - could mocking more functions could speed it up +@patch("artemis.experiment_plans.fast_grid_scan_plan.bps.wait") +@patch("artemis.experiment_plans.fast_grid_scan_plan.bps.complete") def test_fgs_arms_eiger_without_grid_detect( + mock_complete, + mock_wait, fake_fgs_composite: FGSComposite, test_fgs_params: FGSInternalParameters, - mock_subscriptions: FGSCallbackCollection, RE: RunEngine, ): - def get_good_status(): - status = Status() - status.set_finished() - return status - - fake_fgs_composite.eiger.odin.check_odin_state = MagicMock(return_value=True) - fake_fgs_composite.eiger.odin.check_odin_initialised = MagicMock( - return_value=[True, True] - ) - fake_fgs_composite.eiger.set_odin_pvs = MagicMock(return_value=get_good_status()) - fake_fgs_composite.eiger.stale_params.sim_put(0) - fake_fgs_composite.eiger._wait_fan_ready = MagicMock(return_value=get_good_status()) - fake_fgs_composite.eiger._wait_for_odin_status = MagicMock( - return_value=get_good_status() - ) + fake_fgs_composite.eiger.stage = MagicMock() + fake_fgs_composite.eiger.unstage = MagicMock() - RE(bps.stage(fake_fgs_composite.eiger)) - fake_fgs_composite.eiger._wait_fan_ready.assert_called_once() + RE(run_gridscan(fake_fgs_composite, test_fgs_params)) + fake_fgs_composite.eiger.stage.assert_called_once() + fake_fgs_composite.eiger.unstage.assert_called_once()