mx-bluesky 1.4.9__py3-none-any.whl → 1.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mx_bluesky/_version.py +2 -2
- mx_bluesky/beamlines/i24/serial/__init__.py +4 -2
- mx_bluesky/beamlines/i24/serial/blueapi_config.yaml +4 -0
- mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +32 -0
- mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py +2 -1
- mx_bluesky/beamlines/i24/serial/web_gui_plans/general_plans.py +77 -8
- mx_bluesky/common/device_setup_plans/manipulate_sample.py +4 -1
- mx_bluesky/common/device_setup_plans/utils.py +49 -0
- mx_bluesky/common/{plans → experiment_plans}/common_flyscan_xray_centre_plan.py +11 -19
- mx_bluesky/{hyperion/experiment_plans/grid_detect_then_xray_centre_plan.py → common/experiment_plans/common_grid_detect_then_xray_centre_plan.py} +108 -136
- mx_bluesky/common/{plans → experiment_plans}/inner_plans/do_fgs.py +1 -1
- mx_bluesky/common/experiment_plans/oav_grid_detection_plan.py +5 -13
- mx_bluesky/{hyperion → common}/experiment_plans/oav_snapshot_plan.py +5 -2
- mx_bluesky/common/parameters/components.py +1 -1
- mx_bluesky/common/parameters/device_composites.py +65 -0
- mx_bluesky/common/utils/__init__.py +0 -0
- mx_bluesky/hyperion/device_setup_plans/utils.py +0 -48
- mx_bluesky/hyperion/experiment_plans/__init__.py +3 -3
- mx_bluesky/hyperion/experiment_plans/experiment_registry.py +3 -3
- mx_bluesky/hyperion/experiment_plans/hyperion_flyscan_xray_centre_plan.py +40 -41
- mx_bluesky/hyperion/experiment_plans/hyperion_grid_detect_then_xray_centre_plan.py +60 -0
- mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py +26 -15
- mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py +8 -6
- mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py +11 -11
- mx_bluesky/hyperion/parameters/constants.py +0 -1
- mx_bluesky/hyperion/parameters/device_composites.py +5 -27
- mx_bluesky/hyperion/utils/validation.py +1 -1
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/METADATA +3 -3
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/RECORD +37 -33
- /mx_bluesky/common/{plans → experiment_plans}/__init__.py +0 -0
- /mx_bluesky/common/{plans → experiment_plans}/inner_plans/__init__ .py +0 -0
- /mx_bluesky/common/{plans → experiment_plans}/read_hardware.py +0 -0
- /mx_bluesky/common/{plans → experiment_plans}/write_sample_status.py +0 -0
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/WHEEL +0 -0
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/entry_points.txt +0 -0
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/licenses/LICENSE +0 -0
- {mx_bluesky-1.4.9.dist-info → mx_bluesky-1.5.0.dist-info}/top_level.txt +0 -0
mx_bluesky/_version.py
CHANGED
|
@@ -2,7 +2,8 @@ from mx_bluesky.beamlines.i24.serial.web_gui_plans.general_plans import (
|
|
|
2
2
|
gui_gonio_move_on_click,
|
|
3
3
|
gui_move_backlight,
|
|
4
4
|
gui_move_detector,
|
|
5
|
-
|
|
5
|
+
gui_run_chip_collection,
|
|
6
|
+
gui_set_zoom_level,
|
|
6
7
|
gui_sleep,
|
|
7
8
|
gui_stage_move_on_click,
|
|
8
9
|
)
|
|
@@ -57,6 +58,7 @@ __all__ = [
|
|
|
57
58
|
"gui_gonio_move_on_click",
|
|
58
59
|
"gui_sleep",
|
|
59
60
|
"gui_move_detector",
|
|
60
|
-
"
|
|
61
|
+
"gui_run_chip_collection",
|
|
61
62
|
"gui_move_backlight",
|
|
63
|
+
"gui_set_zoom_level",
|
|
62
64
|
]
|
|
@@ -684,6 +684,38 @@ def run_fixed_target_plan(
|
|
|
684
684
|
# DCID instance - do not create yet
|
|
685
685
|
dcid = DCID(emit_errors=False, expt_params=parameters)
|
|
686
686
|
|
|
687
|
+
yield from run_plan_in_wrapper(
|
|
688
|
+
zebra,
|
|
689
|
+
pmac,
|
|
690
|
+
aperture,
|
|
691
|
+
backlight,
|
|
692
|
+
beamstop,
|
|
693
|
+
detector_stage,
|
|
694
|
+
shutter,
|
|
695
|
+
dcm,
|
|
696
|
+
mirrors,
|
|
697
|
+
beam_center_device,
|
|
698
|
+
parameters,
|
|
699
|
+
dcid,
|
|
700
|
+
pilatus_metadata,
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
def run_plan_in_wrapper(
|
|
705
|
+
zebra: Zebra,
|
|
706
|
+
pmac: PMAC,
|
|
707
|
+
aperture: Aperture,
|
|
708
|
+
backlight: DualBacklight,
|
|
709
|
+
beamstop: Beamstop,
|
|
710
|
+
detector_stage: DetectorMotion,
|
|
711
|
+
shutter: HutchShutter,
|
|
712
|
+
dcm: DCM,
|
|
713
|
+
mirrors: FocusMirrorsMode,
|
|
714
|
+
beam_center_device: DetectorBeamCenter,
|
|
715
|
+
parameters: FixedTargetParameters,
|
|
716
|
+
dcid: DCID,
|
|
717
|
+
pilatus_metadata: PilatusMetadata,
|
|
718
|
+
) -> MsgGenerator:
|
|
687
719
|
yield from bpp.contingency_wrapper(
|
|
688
720
|
main_fixed_target_plan(
|
|
689
721
|
zebra,
|
|
@@ -256,6 +256,7 @@ def upload_chip_map_to_geobrick(pmac: PMAC, chip_map: list[int]) -> MsgGenerator
|
|
|
256
256
|
"""
|
|
257
257
|
SSX_LOGGER.info("Uploading Parameters for Oxford Chip to the GeoBrick")
|
|
258
258
|
SSX_LOGGER.info(f"Chipid {ChipType.Oxford}, width {OXFORD_CHIP_WIDTH}")
|
|
259
|
+
SSX_LOGGER.warning(f"MAP TO UPLOAD: {chip_map}")
|
|
259
260
|
for block in range(1, 65):
|
|
260
261
|
value = 1 if block in chip_map else 0
|
|
261
262
|
pvar = PVAR_TEMPLATE % block
|
|
@@ -264,7 +265,7 @@ def upload_chip_map_to_geobrick(pmac: PMAC, chip_map: list[int]) -> MsgGenerator
|
|
|
264
265
|
yield from bps.abs_set(pmac.pmac_string, pvar_str, wait=True)
|
|
265
266
|
# Wait for PMAC to be done processing PVAR string
|
|
266
267
|
yield from bps.sleep(0.02)
|
|
267
|
-
SSX_LOGGER.
|
|
268
|
+
SSX_LOGGER.info("Upload parameters done.")
|
|
268
269
|
|
|
269
270
|
|
|
270
271
|
@log_on_entry
|
|
@@ -3,19 +3,34 @@ from typing import Literal
|
|
|
3
3
|
|
|
4
4
|
import bluesky.plan_stubs as bps
|
|
5
5
|
import bluesky.preprocessors as bpp
|
|
6
|
-
from
|
|
6
|
+
from bluesky.utils import MsgGenerator
|
|
7
7
|
from dodal.beamlines import i24
|
|
8
8
|
from dodal.common import inject
|
|
9
|
+
from dodal.devices.hutch_shutter import HutchShutter
|
|
10
|
+
from dodal.devices.i24.aperture import Aperture
|
|
11
|
+
from dodal.devices.i24.beam_center import DetectorBeamCenter
|
|
12
|
+
from dodal.devices.i24.beamstop import Beamstop
|
|
13
|
+
from dodal.devices.i24.dcm import DCM
|
|
9
14
|
from dodal.devices.i24.dual_backlight import BacklightPositions, DualBacklight
|
|
15
|
+
from dodal.devices.i24.focus_mirrors import FocusMirrorsMode
|
|
10
16
|
from dodal.devices.i24.i24_detector_motion import DetectorMotion
|
|
17
|
+
from dodal.devices.i24.pilatus_metadata import PilatusMetadata
|
|
11
18
|
from dodal.devices.i24.pmac import PMAC
|
|
12
|
-
from dodal.devices.oav.oav_detector import
|
|
19
|
+
from dodal.devices.oav.oav_detector import OAVBeamCentreFile
|
|
20
|
+
from dodal.devices.zebra.zebra import Zebra
|
|
13
21
|
|
|
22
|
+
from mx_bluesky.beamlines.i24.serial.dcid import DCID
|
|
14
23
|
from mx_bluesky.beamlines.i24.serial.fixed_target.ft_utils import (
|
|
15
24
|
ChipType,
|
|
16
25
|
MappingType,
|
|
17
26
|
PumpProbeSetting,
|
|
18
27
|
)
|
|
28
|
+
from mx_bluesky.beamlines.i24.serial.fixed_target.i24ssx_Chip_Collect_py3v1 import (
|
|
29
|
+
run_plan_in_wrapper,
|
|
30
|
+
)
|
|
31
|
+
from mx_bluesky.beamlines.i24.serial.fixed_target.i24ssx_Chip_Manager_py3v1 import (
|
|
32
|
+
upload_chip_map_to_geobrick,
|
|
33
|
+
)
|
|
19
34
|
from mx_bluesky.beamlines.i24.serial.fixed_target.i24ssx_moveonclick import (
|
|
20
35
|
_move_on_mouse_click_plan,
|
|
21
36
|
)
|
|
@@ -24,6 +39,7 @@ from mx_bluesky.beamlines.i24.serial.log import (
|
|
|
24
39
|
_read_visit_directory_from_file,
|
|
25
40
|
)
|
|
26
41
|
from mx_bluesky.beamlines.i24.serial.parameters import (
|
|
42
|
+
DetectorName,
|
|
27
43
|
FixedTargetParameters,
|
|
28
44
|
get_chip_format,
|
|
29
45
|
)
|
|
@@ -46,9 +62,19 @@ def gui_move_backlight(
|
|
|
46
62
|
SSX_LOGGER.debug(f"Backlight moved to {bl_pos.value}")
|
|
47
63
|
|
|
48
64
|
|
|
65
|
+
@bpp.run_decorator()
|
|
66
|
+
def gui_set_zoom_level(
|
|
67
|
+
position: str, oav: OAVBeamCentreFile = inject("oav")
|
|
68
|
+
) -> MsgGenerator:
|
|
69
|
+
yield from bps.abs_set(oav.zoom_controller, position, wait=True)
|
|
70
|
+
SSX_LOGGER.debug(f"Setting zoom level to {position}")
|
|
71
|
+
|
|
72
|
+
|
|
49
73
|
@bpp.run_decorator()
|
|
50
74
|
def gui_stage_move_on_click(
|
|
51
|
-
position_px: tuple[int, int],
|
|
75
|
+
position_px: tuple[int, int],
|
|
76
|
+
oav: OAVBeamCentreFile = inject("oav"),
|
|
77
|
+
pmac: PMAC = inject("pmac"),
|
|
52
78
|
) -> MsgGenerator:
|
|
53
79
|
yield from _move_on_mouse_click_plan(oav, pmac, position_px)
|
|
54
80
|
|
|
@@ -88,7 +114,7 @@ def gui_move_detector(
|
|
|
88
114
|
|
|
89
115
|
|
|
90
116
|
@bpp.run_decorator()
|
|
91
|
-
def
|
|
117
|
+
def gui_run_chip_collection(
|
|
92
118
|
sub_dir: str,
|
|
93
119
|
chip_name: str,
|
|
94
120
|
exp_time: float,
|
|
@@ -103,6 +129,18 @@ def gui_set_parameters(
|
|
|
103
129
|
laser_dwell: float,
|
|
104
130
|
laser_delay: float,
|
|
105
131
|
pre_pump: float,
|
|
132
|
+
pmac: PMAC = inject("pmac"),
|
|
133
|
+
zebra: Zebra = inject("zebra"),
|
|
134
|
+
aperture: Aperture = inject("aperture"),
|
|
135
|
+
backlight: DualBacklight = inject("backlight"),
|
|
136
|
+
beamstop: Beamstop = inject("beamstop"),
|
|
137
|
+
detector_stage: DetectorMotion = inject("detector_motion"),
|
|
138
|
+
shutter: HutchShutter = inject("shutter"),
|
|
139
|
+
dcm: DCM = inject("dcm"),
|
|
140
|
+
mirrors: FocusMirrorsMode = inject("focus_mirrors"),
|
|
141
|
+
beam_center_pilatus: DetectorBeamCenter = inject("pilatus_bc"),
|
|
142
|
+
beam_center_eiger: DetectorBeamCenter = inject("eiger_bc"),
|
|
143
|
+
pilatus_metadata: PilatusMetadata = inject("pilatus_meta"),
|
|
106
144
|
) -> MsgGenerator:
|
|
107
145
|
"""Set the parameter model for the data collection.
|
|
108
146
|
|
|
@@ -132,7 +170,6 @@ def gui_set_parameters(
|
|
|
132
170
|
"""
|
|
133
171
|
# NOTE still a work in progress, adding to it as the ui grows
|
|
134
172
|
# See progression of https://github.com/DiamondLightSource/mx-daq-ui/issues/3
|
|
135
|
-
detector_stage = i24.detector_motion()
|
|
136
173
|
det_type = yield from get_detector_type(detector_stage)
|
|
137
174
|
_format = chip_format if ChipType[chip_type] is ChipType.Custom else None
|
|
138
175
|
chip_params = get_chip_format(ChipType[chip_type], _format)
|
|
@@ -164,6 +201,38 @@ def gui_set_parameters(
|
|
|
164
201
|
"checker_pattern": checker_pattern,
|
|
165
202
|
"pre_pump_exposure_s": pre_pump,
|
|
166
203
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
204
|
+
|
|
205
|
+
parameters = FixedTargetParameters(**params)
|
|
206
|
+
|
|
207
|
+
# Create collection directory
|
|
208
|
+
parameters.collection_directory.mkdir(parents=True, exist_ok=True)
|
|
209
|
+
|
|
210
|
+
if parameters.chip_map:
|
|
211
|
+
yield from upload_chip_map_to_geobrick(pmac, parameters.chip_map)
|
|
212
|
+
|
|
213
|
+
beam_center_device = (
|
|
214
|
+
beam_center_eiger
|
|
215
|
+
if parameters.detector_name is DetectorName.EIGER
|
|
216
|
+
else beam_center_pilatus
|
|
217
|
+
)
|
|
218
|
+
SSX_LOGGER.info("Beam center device ready")
|
|
219
|
+
|
|
220
|
+
# DCID instance - do not create yet
|
|
221
|
+
dcid = DCID(emit_errors=False, expt_params=parameters) # noqa
|
|
222
|
+
SSX_LOGGER.info("DCID created")
|
|
223
|
+
|
|
224
|
+
yield from run_plan_in_wrapper(
|
|
225
|
+
zebra,
|
|
226
|
+
pmac,
|
|
227
|
+
aperture,
|
|
228
|
+
backlight,
|
|
229
|
+
beamstop,
|
|
230
|
+
detector_stage,
|
|
231
|
+
shutter,
|
|
232
|
+
dcm,
|
|
233
|
+
mirrors,
|
|
234
|
+
beam_center_device,
|
|
235
|
+
parameters,
|
|
236
|
+
dcid,
|
|
237
|
+
pilatus_metadata,
|
|
238
|
+
)
|
|
@@ -10,6 +10,7 @@ from dodal.devices.detector.detector_motion import DetectorMotion
|
|
|
10
10
|
from dodal.devices.smargon import CombinedMove, Smargon
|
|
11
11
|
|
|
12
12
|
from mx_bluesky.common.utils.log import LOGGER
|
|
13
|
+
from mx_bluesky.hyperion.parameters.constants import CONST
|
|
13
14
|
|
|
14
15
|
LOWER_DETECTOR_SHUTTER_AFTER_SCAN = True
|
|
15
16
|
|
|
@@ -21,6 +22,8 @@ def setup_sample_environment(
|
|
|
21
22
|
group="setup_senv",
|
|
22
23
|
):
|
|
23
24
|
"""Move the aperture into required position, move out the backlight."""
|
|
25
|
+
yield from bps.abs_set(backlight, BacklightPosition.OUT, group=group)
|
|
26
|
+
|
|
24
27
|
aperture_value = (
|
|
25
28
|
None
|
|
26
29
|
if not aperture_position_gda_name
|
|
@@ -29,7 +32,6 @@ def setup_sample_environment(
|
|
|
29
32
|
yield from move_aperture_if_required(
|
|
30
33
|
aperture_scatterguard, aperture_value, group=group
|
|
31
34
|
)
|
|
32
|
-
yield from bps.abs_set(backlight, BacklightPosition.OUT, group=group)
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
def move_aperture_if_required(
|
|
@@ -46,6 +48,7 @@ def move_aperture_if_required(
|
|
|
46
48
|
|
|
47
49
|
else:
|
|
48
50
|
LOGGER.info(f"Setting aperture position to {aperture_value}")
|
|
51
|
+
yield from bps.wait(CONST.WAIT.PREPARE_APERTURE)
|
|
49
52
|
yield from bps.abs_set(
|
|
50
53
|
aperture_scatterguard.selected_aperture,
|
|
51
54
|
aperture_value,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from collections.abc import Generator
|
|
2
|
+
|
|
3
|
+
from bluesky import plan_stubs as bps
|
|
4
|
+
from bluesky import preprocessors as bpp
|
|
5
|
+
from bluesky.utils import Msg
|
|
6
|
+
from dodal.devices.detector.detector_motion import DetectorMotion, ShutterState
|
|
7
|
+
from dodal.devices.eiger import EigerDetector
|
|
8
|
+
from dodal.devices.mx_phase1.beamstop import Beamstop, BeamstopPositions
|
|
9
|
+
|
|
10
|
+
from mx_bluesky.common.device_setup_plans.position_detector import (
|
|
11
|
+
set_detector_z_position,
|
|
12
|
+
set_shutter,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def start_preparing_data_collection_then_do_plan(
|
|
17
|
+
beamstop: Beamstop,
|
|
18
|
+
eiger: EigerDetector,
|
|
19
|
+
detector_motion: DetectorMotion,
|
|
20
|
+
detector_distance_mm: float | None,
|
|
21
|
+
plan_to_run: Generator[Msg, None, None],
|
|
22
|
+
group="ready_for_data_collection",
|
|
23
|
+
) -> Generator[Msg, None, None]:
|
|
24
|
+
"""Starts preparing for the next data collection and then runs the
|
|
25
|
+
given plan.
|
|
26
|
+
|
|
27
|
+
Preparation consists of:
|
|
28
|
+
* Arming the Eiger
|
|
29
|
+
* Moving the detector to the specified position
|
|
30
|
+
* Opening the detect shutter
|
|
31
|
+
If the plan fails it will disarm the eiger.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def wrapped_plan():
|
|
35
|
+
yield from bps.abs_set(eiger.do_arm, 1, group=group) # type: ignore # Fix types in ophyd-async (https://github.com/DiamondLightSource/mx-bluesky/issues/855)
|
|
36
|
+
yield from bps.abs_set(
|
|
37
|
+
beamstop.selected_pos, BeamstopPositions.DATA_COLLECTION, group=group
|
|
38
|
+
)
|
|
39
|
+
if detector_distance_mm:
|
|
40
|
+
yield from set_detector_z_position(
|
|
41
|
+
detector_motion, detector_distance_mm, group
|
|
42
|
+
)
|
|
43
|
+
yield from set_shutter(detector_motion, ShutterState.OPEN, group)
|
|
44
|
+
yield from plan_to_run
|
|
45
|
+
|
|
46
|
+
yield from bpp.contingency_wrapper(
|
|
47
|
+
wrapped_plan(),
|
|
48
|
+
except_plan=lambda e: (yield from bps.stop(eiger)), # type: ignore # Fix types in ophyd-async (https://github.com/DiamondLightSource/mx-bluesky/issues/855)
|
|
49
|
+
)
|
|
@@ -7,35 +7,32 @@ from functools import partial
|
|
|
7
7
|
import bluesky.plan_stubs as bps
|
|
8
8
|
import bluesky.preprocessors as bpp
|
|
9
9
|
import numpy as np
|
|
10
|
-
import pydantic
|
|
11
10
|
from bluesky.protocols import Readable
|
|
12
11
|
from bluesky.utils import MsgGenerator
|
|
13
|
-
from dodal.devices.eiger import EigerDetector
|
|
14
12
|
from dodal.devices.fast_grid_scan import (
|
|
15
13
|
FastGridScanCommon,
|
|
16
14
|
)
|
|
17
|
-
from dodal.devices.smargon import Smargon
|
|
18
|
-
from dodal.devices.synchrotron import Synchrotron
|
|
19
15
|
from dodal.devices.zocalo import ZocaloResults
|
|
20
16
|
from dodal.devices.zocalo.zocalo_results import (
|
|
21
17
|
XrcResult,
|
|
22
18
|
get_full_processing_results,
|
|
23
19
|
)
|
|
24
20
|
|
|
21
|
+
from mx_bluesky.common.experiment_plans.inner_plans.do_fgs import (
|
|
22
|
+
ZOCALO_STAGE_GROUP,
|
|
23
|
+
kickoff_and_complete_gridscan,
|
|
24
|
+
)
|
|
25
|
+
from mx_bluesky.common.experiment_plans.read_hardware import (
|
|
26
|
+
read_hardware_plan,
|
|
27
|
+
)
|
|
25
28
|
from mx_bluesky.common.parameters.constants import (
|
|
26
29
|
DocDescriptorNames,
|
|
27
30
|
GridscanParamConstants,
|
|
28
31
|
PlanGroupCheckpointConstants,
|
|
29
32
|
PlanNameConstants,
|
|
30
33
|
)
|
|
34
|
+
from mx_bluesky.common.parameters.device_composites import FlyScanEssentialDevices
|
|
31
35
|
from mx_bluesky.common.parameters.gridscan import SpecifiedThreeDGridScan
|
|
32
|
-
from mx_bluesky.common.plans.inner_plans.do_fgs import (
|
|
33
|
-
ZOCALO_STAGE_GROUP,
|
|
34
|
-
kickoff_and_complete_gridscan,
|
|
35
|
-
)
|
|
36
|
-
from mx_bluesky.common.plans.read_hardware import (
|
|
37
|
-
read_hardware_plan,
|
|
38
|
-
)
|
|
39
36
|
from mx_bluesky.common.utils.exceptions import (
|
|
40
37
|
CrystalNotFoundException,
|
|
41
38
|
SampleException,
|
|
@@ -45,14 +42,6 @@ from mx_bluesky.common.utils.tracing import TRACER
|
|
|
45
42
|
from mx_bluesky.common.xrc_result import XRayCentreResult
|
|
46
43
|
|
|
47
44
|
|
|
48
|
-
@pydantic.dataclasses.dataclass(config={"arbitrary_types_allowed": True})
|
|
49
|
-
class FlyScanEssentialDevices:
|
|
50
|
-
eiger: EigerDetector
|
|
51
|
-
synchrotron: Synchrotron
|
|
52
|
-
zocalo: ZocaloResults
|
|
53
|
-
smargon: Smargon
|
|
54
|
-
|
|
55
|
-
|
|
56
45
|
@dataclasses.dataclass
|
|
57
46
|
class BeamlineSpecificFGSFeatures:
|
|
58
47
|
setup_trigger_plan: Callable[..., MsgGenerator]
|
|
@@ -251,6 +240,9 @@ def run_gridscan(
|
|
|
251
240
|
parameters.scan_indices,
|
|
252
241
|
plan_during_collection=beamline_specific.read_during_collection_plan,
|
|
253
242
|
)
|
|
243
|
+
|
|
244
|
+
# GDA's gridscans requires Z steps to be at 0, so make sure we leave this device
|
|
245
|
+
# in a GDA-happy state.
|
|
254
246
|
yield from bps.abs_set(beamline_specific.fgs_motors.z_steps, 0, wait=False)
|
|
255
247
|
|
|
256
248
|
|