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

Commit

Permalink
Merge pull request #793 from DiamondLightSource/686_stage_detector_in…
Browse files Browse the repository at this point in the history
…_fast_grid_scan

Fast grid scan without grid detect arms detector
  • Loading branch information
DominicOram authored Jul 14, 2023
2 parents f8cb2d0 + cc78c45 commit c0bbb0c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 32 deletions.
15 changes: 4 additions & 11 deletions src/artemis/experiment_plans/fast_grid_scan_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
7 changes: 5 additions & 2 deletions src/artemis/experiment_plans/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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),
Expand All @@ -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


Expand Down
28 changes: 9 additions & 19 deletions src/artemis/experiment_plans/tests/test_fast_grid_scan_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

0 comments on commit c0bbb0c

Please sign in to comment.