mx-bluesky 1.5.9__py3-none-any.whl → 1.5.10__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/i04/experiment_plans/i04_grid_detect_then_xray_centre_plan.py +2 -2
- mx_bluesky/beamlines/i24/jungfrau_commissioning/experiment_plans/do_darks.py +78 -0
- mx_bluesky/beamlines/i24/jungfrau_commissioning/plan_stubs/__init__.py +1 -0
- mx_bluesky/beamlines/i24/jungfrau_commissioning/{do_external_acquisition.py → plan_stubs/do_external_acquisition.py} +7 -6
- mx_bluesky/beamlines/i24/jungfrau_commissioning/{do_internal_acquisition.py → plan_stubs/do_internal_acquisition.py} +4 -3
- mx_bluesky/beamlines/i24/jungfrau_commissioning/{plan_utils.py → plan_stubs/plan_utils.py} +21 -28
- mx_bluesky/common/device_setup_plans/robot_load_unload.py +2 -2
- mx_bluesky/common/device_setup_plans/setup_oav.py +1 -1
- mx_bluesky/common/device_setup_plans/xbpm_feedback.py +4 -4
- mx_bluesky/common/experiment_plans/common_flyscan_xray_centre_plan.py +3 -3
- mx_bluesky/common/experiment_plans/inner_plans/do_fgs.py +1 -1
- mx_bluesky/common/experiment_plans/inner_plans/read_hardware.py +3 -3
- mx_bluesky/common/experiment_plans/oav_grid_detection_plan.py +2 -2
- mx_bluesky/common/parameters/device_composites.py +2 -2
- mx_bluesky/hyperion/experiment_plans/hyperion_flyscan_xray_centre_plan.py +6 -7
- mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py +52 -38
- mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py +2 -2
- mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py +1 -1
- mx_bluesky/hyperion/parameters/device_composites.py +2 -2
- mx_bluesky/hyperion/parameters/rotation.py +4 -6
- mx_bluesky/hyperion/utils/context.py +6 -1
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/METADATA +4 -4
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/RECORD +29 -27
- /mx_bluesky/beamlines/i24/jungfrau_commissioning/{__init__.py → experiment_plans/__init__.py} +0 -0
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/WHEEL +0 -0
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/entry_points.txt +0 -0
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/licenses/LICENSE +0 -0
- {mx_bluesky-1.5.9.dist-info → mx_bluesky-1.5.10.dist-info}/top_level.txt +0 -0
mx_bluesky/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.5.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 5,
|
|
31
|
+
__version__ = version = '1.5.10'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 5, 10)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -9,7 +9,7 @@ from dodal.common import inject
|
|
|
9
9
|
from dodal.devices.aperturescatterguard import ApertureScatterguard, ApertureValue
|
|
10
10
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
11
11
|
from dodal.devices.backlight import Backlight
|
|
12
|
-
from dodal.devices.common_dcm import
|
|
12
|
+
from dodal.devices.common_dcm import DoubleCrystalMonochromator
|
|
13
13
|
from dodal.devices.detector.detector_motion import DetectorMotion
|
|
14
14
|
from dodal.devices.eiger import EigerDetector
|
|
15
15
|
from dodal.devices.fast_grid_scan import (
|
|
@@ -97,7 +97,7 @@ def i04_grid_detect_then_xray_centre(
|
|
|
97
97
|
attenuator: BinaryFilterAttenuator = inject("attenuator"),
|
|
98
98
|
backlight: Backlight = inject("backlight"),
|
|
99
99
|
beamstop: Beamstop = inject("beamstop"),
|
|
100
|
-
dcm:
|
|
100
|
+
dcm: DoubleCrystalMonochromator = inject("dcm"),
|
|
101
101
|
zebra_fast_grid_scan: ZebraFastGridScanThreeD = inject("zebra_fast_grid_scan"),
|
|
102
102
|
flux: Flux = inject("flux"),
|
|
103
103
|
oav: OAV = inject("oav"),
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import bluesky.preprocessors as bpp
|
|
2
|
+
from bluesky import plan_stubs as bps
|
|
3
|
+
from bluesky.utils import MsgGenerator
|
|
4
|
+
from dodal.common import inject
|
|
5
|
+
from dodal.devices.i24.commissioning_jungfrau import CommissioningJungfrau
|
|
6
|
+
from ophyd_async.core import WatchableAsyncStatus
|
|
7
|
+
from ophyd_async.fastcs.jungfrau import (
|
|
8
|
+
AcquisitionType,
|
|
9
|
+
GainMode,
|
|
10
|
+
create_jungfrau_pedestal_triggering_info,
|
|
11
|
+
)
|
|
12
|
+
from pydantic import PositiveInt
|
|
13
|
+
|
|
14
|
+
from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_stubs.plan_utils import (
|
|
15
|
+
fly_jungfrau,
|
|
16
|
+
override_file_path,
|
|
17
|
+
)
|
|
18
|
+
from mx_bluesky.common.utils.log import LOGGER
|
|
19
|
+
|
|
20
|
+
PEDESTAL_DARKS_RUN = "PEDESTAL DARKS RUN"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def do_pedestal_darks(
|
|
24
|
+
exp_time_s: float = 0.001,
|
|
25
|
+
pedestal_frames: PositiveInt = 20,
|
|
26
|
+
pedestal_loops: PositiveInt = 200,
|
|
27
|
+
jungfrau: CommissioningJungfrau = inject("jungfrau"),
|
|
28
|
+
path_of_output_file: str | None = None,
|
|
29
|
+
) -> MsgGenerator[WatchableAsyncStatus]:
|
|
30
|
+
"""Acquire darks in pedestal mode, using dynamic gain mode. This calibrates the offsets
|
|
31
|
+
for the jungfrau, and must be performed before acquiring real data in dynamic gain mode.
|
|
32
|
+
|
|
33
|
+
When Bluesky triggers the detector in pedestal mode, with pedestal frames F and pedestal loops L,
|
|
34
|
+
the acquisition is managed at the driver level to:
|
|
35
|
+
1. Acquire F-1 frames in dynamic gain mode
|
|
36
|
+
2. Acquire 1 frame in ForceSwitchG1 gain mode
|
|
37
|
+
3. Repeat steps 1-2 L times
|
|
38
|
+
4. Do the first three steps a second time, except use ForceSwitchG2 instead of ForceSwitchG1
|
|
39
|
+
during step 2.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
exp_time_s: Length of detector exposure for each frame.
|
|
43
|
+
pedestal_frames: Number of frames acquired per pedestal loop.
|
|
44
|
+
pedestal_loops: Number of times to acquire a set of pedestal_frames
|
|
45
|
+
jungfrau: Jungfrau device
|
|
46
|
+
path_of_output_file: Absolute path of the detector file output, including file name. If None, then use the PathProvider
|
|
47
|
+
set during Jungfrau device instantiation
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
@bpp.set_run_key_decorator(PEDESTAL_DARKS_RUN)
|
|
51
|
+
@bpp.run_decorator(md={"subplan_name": PEDESTAL_DARKS_RUN})
|
|
52
|
+
@bpp.stage_decorator([jungfrau])
|
|
53
|
+
def _do_decorated_plan():
|
|
54
|
+
if path_of_output_file:
|
|
55
|
+
override_file_path(jungfrau, path_of_output_file)
|
|
56
|
+
|
|
57
|
+
trigger_info = create_jungfrau_pedestal_triggering_info(
|
|
58
|
+
exp_time_s, pedestal_frames, pedestal_loops
|
|
59
|
+
)
|
|
60
|
+
LOGGER.info(
|
|
61
|
+
"Jungfrau will be triggered in pedestal mode and in dynamic gain mode"
|
|
62
|
+
)
|
|
63
|
+
yield from bps.mv(
|
|
64
|
+
jungfrau.drv.acquisition_type,
|
|
65
|
+
AcquisitionType.PEDESTAL,
|
|
66
|
+
jungfrau.drv.gain_mode,
|
|
67
|
+
GainMode.DYNAMIC,
|
|
68
|
+
)
|
|
69
|
+
return (
|
|
70
|
+
yield from fly_jungfrau(
|
|
71
|
+
jungfrau,
|
|
72
|
+
trigger_info,
|
|
73
|
+
wait=True,
|
|
74
|
+
log_on_percentage_prefix="Jungfrau pedestal dynamic gain mode darks triggers recieved",
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return (yield from _do_decorated_plan())
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Jungfrau plan stubs should be used as part of Jungfrau experiment plans, and should not be run in isolation."""
|
|
@@ -9,7 +9,7 @@ from ophyd_async.fastcs.jungfrau import (
|
|
|
9
9
|
)
|
|
10
10
|
from pydantic import PositiveInt
|
|
11
11
|
|
|
12
|
-
from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_utils import (
|
|
12
|
+
from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_stubs.plan_utils import (
|
|
13
13
|
fly_jungfrau,
|
|
14
14
|
override_file_path,
|
|
15
15
|
)
|
|
@@ -18,14 +18,15 @@ from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_utils import (
|
|
|
18
18
|
def do_external_acquisition(
|
|
19
19
|
exp_time_s: float,
|
|
20
20
|
total_triggers: PositiveInt = 1,
|
|
21
|
-
|
|
21
|
+
output_file_path: str | None = None,
|
|
22
22
|
wait: bool = False,
|
|
23
23
|
jungfrau: CommissioningJungfrau = inject("commissioning_jungfrau"),
|
|
24
24
|
) -> MsgGenerator[WatchableAsyncStatus]:
|
|
25
25
|
"""
|
|
26
26
|
Kickoff external triggering on the Jungfrau, and optionally wait for completion.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Any plan using this stub MUST stage the Jungfrau with the stage_decorator and open a run,
|
|
29
|
+
ideally using the run_decorator.
|
|
29
30
|
|
|
30
31
|
Args:
|
|
31
32
|
exp_time_s: Length of detector exposure for each frame.
|
|
@@ -36,9 +37,9 @@ def do_external_acquisition(
|
|
|
36
37
|
wait: Optionally block until data collection is complete.
|
|
37
38
|
"""
|
|
38
39
|
|
|
39
|
-
if
|
|
40
|
-
override_file_path(jungfrau,
|
|
40
|
+
if output_file_path:
|
|
41
|
+
override_file_path(jungfrau, output_file_path)
|
|
41
42
|
|
|
42
43
|
trigger_info = create_jungfrau_external_triggering_info(total_triggers, exp_time_s)
|
|
43
|
-
status = yield from fly_jungfrau(jungfrau, trigger_info, wait)
|
|
44
|
+
status = yield from fly_jungfrau(jungfrau, trigger_info, wait=wait)
|
|
44
45
|
return status
|
|
@@ -9,7 +9,7 @@ from ophyd_async.fastcs.jungfrau import (
|
|
|
9
9
|
)
|
|
10
10
|
from pydantic import PositiveInt
|
|
11
11
|
|
|
12
|
-
from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_utils import (
|
|
12
|
+
from mx_bluesky.beamlines.i24.jungfrau_commissioning.plan_stubs.plan_utils import (
|
|
13
13
|
fly_jungfrau,
|
|
14
14
|
override_file_path,
|
|
15
15
|
)
|
|
@@ -26,7 +26,8 @@ def do_internal_acquisition(
|
|
|
26
26
|
Kickoff internal triggering on the Jungfrau, and optionally wait for completion. Frames
|
|
27
27
|
per trigger will trigger as rapidly as possible according to the Jungfrau deadtime.
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Any plan using this stub MUST stage the Jungfrau with the stage_decorator and open a run,
|
|
30
|
+
ideally using the run_decorator.
|
|
30
31
|
|
|
31
32
|
Args:
|
|
32
33
|
exp_time_s: Length of detector exposure for each frame.
|
|
@@ -42,5 +43,5 @@ def do_internal_acquisition(
|
|
|
42
43
|
override_file_path(jungfrau, path_of_output_file)
|
|
43
44
|
|
|
44
45
|
trigger_info = create_jungfrau_internal_triggering_info(total_frames, exp_time_s)
|
|
45
|
-
status = yield from fly_jungfrau(jungfrau, trigger_info, wait)
|
|
46
|
+
status = yield from fly_jungfrau(jungfrau, trigger_info, wait=wait)
|
|
46
47
|
return status
|
|
@@ -2,7 +2,6 @@ from pathlib import PurePath
|
|
|
2
2
|
from typing import cast
|
|
3
3
|
|
|
4
4
|
import bluesky.plan_stubs as bps
|
|
5
|
-
import bluesky.preprocessors as bpp
|
|
6
5
|
from bluesky.utils import MsgGenerator
|
|
7
6
|
from dodal.common.watcher_utils import log_on_percentage_complete
|
|
8
7
|
from dodal.devices.i24.commissioning_jungfrau import CommissioningJungfrau
|
|
@@ -19,44 +18,38 @@ JF_COMPLETE_GROUP = "JF complete"
|
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
def fly_jungfrau(
|
|
22
|
-
jungfrau: CommissioningJungfrau,
|
|
21
|
+
jungfrau: CommissioningJungfrau,
|
|
22
|
+
trigger_info: TriggerInfo,
|
|
23
|
+
wait: bool = False,
|
|
24
|
+
log_on_percentage_prefix="Jungfrau data collection triggers recieved",
|
|
23
25
|
) -> MsgGenerator[WatchableAsyncStatus]:
|
|
24
26
|
"""Stage, prepare, and kickoff Jungfrau with a configured TriggerInfo. Optionally wait
|
|
25
27
|
for completion.
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
Any plan using this stub MUST stage the Jungfrau with the stage_decorator and open a run,
|
|
30
|
+
ideally using the run_decorator.
|
|
29
31
|
|
|
30
32
|
Args:
|
|
31
33
|
jungfrau: Jungfrau device.
|
|
32
|
-
trigger_info: TriggerInfo which should be acquired using jungfrau util functions
|
|
33
|
-
or create_jungfrau_external_triggering_info.
|
|
34
|
+
trigger_info: TriggerInfo which should be acquired using jungfrau util functions.
|
|
34
35
|
wait: Optionally block until data collection is complete.
|
|
36
|
+
log_on_percentage_prefix: String that will be appended to the "percentage completion" logging message.
|
|
35
37
|
"""
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
yield from bps.prepare(jungfrau, trigger_info, wait=True)
|
|
44
|
-
LOGGER.info("Detector prepared. Starting acquisition")
|
|
45
|
-
yield from bps.kickoff(jungfrau, wait=True)
|
|
46
|
-
LOGGER.info("Waiting for acquisition to complete...")
|
|
47
|
-
status = yield from bps.complete(jungfrau, group=JF_COMPLETE_GROUP)
|
|
48
|
-
|
|
49
|
-
# StandardDetector.complete converts regular status to watchable status,
|
|
50
|
-
# but bluesky plan stubs can't see this currently
|
|
51
|
-
status = cast(WatchableAsyncStatus, status)
|
|
52
|
-
log_on_percentage_complete(
|
|
53
|
-
status, "Jungfrau data collection triggers recieved", 10
|
|
54
|
-
)
|
|
55
|
-
if wait:
|
|
56
|
-
yield from bps.wait(JF_COMPLETE_GROUP)
|
|
57
|
-
return status
|
|
39
|
+
LOGGER.info("Preparing detector...")
|
|
40
|
+
yield from bps.prepare(jungfrau, trigger_info, wait=True)
|
|
41
|
+
LOGGER.info("Detector prepared. Starting acquisition")
|
|
42
|
+
yield from bps.kickoff(jungfrau, wait=True)
|
|
43
|
+
LOGGER.info("Waiting for acquisition to complete...")
|
|
44
|
+
status = yield from bps.complete(jungfrau, group=JF_COMPLETE_GROUP)
|
|
58
45
|
|
|
59
|
-
|
|
46
|
+
# StandardDetector.complete converts regular status to watchable status,
|
|
47
|
+
# but bluesky plan stubs can't see this currently
|
|
48
|
+
status = cast(WatchableAsyncStatus, status)
|
|
49
|
+
log_on_percentage_complete(status, log_on_percentage_prefix, 10)
|
|
50
|
+
if wait:
|
|
51
|
+
yield from bps.wait(JF_COMPLETE_GROUP)
|
|
52
|
+
return status
|
|
60
53
|
|
|
61
54
|
|
|
62
55
|
def override_file_path(jungfrau: CommissioningJungfrau, path_of_output_file: str):
|
|
@@ -7,7 +7,7 @@ from dodal.devices.aperturescatterguard import ApertureScatterguard, ApertureVal
|
|
|
7
7
|
from dodal.devices.motors import XYZStage
|
|
8
8
|
from dodal.devices.robot import BartRobot
|
|
9
9
|
from dodal.devices.smargon import CombinedMove, Smargon, StubPosition
|
|
10
|
-
from dodal.plan_stubs.motor_utils import
|
|
10
|
+
from dodal.plan_stubs.motor_utils import MoveTooLargeError, home_and_reset_wrapper
|
|
11
11
|
|
|
12
12
|
from mx_bluesky.common.parameters.constants import (
|
|
13
13
|
DocDescriptorNames,
|
|
@@ -39,7 +39,7 @@ def wait_for_smargon_not_disabled(smargon: Smargon, timeout=60):
|
|
|
39
39
|
|
|
40
40
|
def _raise_exception_if_moved_out_of_cryojet(exception):
|
|
41
41
|
yield from bps.null()
|
|
42
|
-
if isinstance(exception,
|
|
42
|
+
if isinstance(exception, MoveTooLargeError):
|
|
43
43
|
raise Exception(
|
|
44
44
|
f"Moving {exception.axis} back to {exception.position} after \
|
|
45
45
|
robot load would move it out of the cryojet. The max safe \
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from functools import partial
|
|
2
2
|
|
|
3
3
|
import bluesky.plan_stubs as bps
|
|
4
|
-
from dodal.devices.areadetector.plugins.
|
|
4
|
+
from dodal.devices.areadetector.plugins.cam import ColorMode
|
|
5
5
|
from dodal.devices.oav.oav_detector import OAV
|
|
6
6
|
from dodal.devices.oav.oav_parameters import OAVParameters
|
|
7
7
|
from dodal.devices.oav.pin_image_recognition import PinTipDetection
|
|
@@ -16,7 +16,7 @@ def unpause_xbpm_feedback_and_set_transmission_to_1(
|
|
|
16
16
|
the beam in position
|
|
17
17
|
attenuator (BinaryFilterAttenuator): The attenuator used to set transmission
|
|
18
18
|
"""
|
|
19
|
-
yield from bps.mv(xbpm_feedback.pause_feedback, Pause.RUN, attenuator, 1.0)
|
|
19
|
+
yield from bps.mv(xbpm_feedback.pause_feedback, Pause.RUN, attenuator, 1.0)
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def check_and_pause_feedback(
|
|
@@ -35,11 +35,11 @@ def check_and_pause_feedback(
|
|
|
35
35
|
turning XBPM feedback off.
|
|
36
36
|
|
|
37
37
|
"""
|
|
38
|
-
yield from bps.mv(attenuator, 1.0)
|
|
38
|
+
yield from bps.mv(attenuator, 1.0)
|
|
39
39
|
LOGGER.info("Waiting for XBPM feedback to be stable")
|
|
40
40
|
yield from bps.trigger(xbpm_feedback, wait=True)
|
|
41
41
|
LOGGER.info(
|
|
42
42
|
f"XPBM feedback in position, pausing and setting transmission to {desired_transmission_fraction}"
|
|
43
43
|
)
|
|
44
|
-
yield from bps.mv(xbpm_feedback.pause_feedback, Pause.PAUSE)
|
|
45
|
-
yield from bps.mv(attenuator, desired_transmission_fraction)
|
|
44
|
+
yield from bps.mv(xbpm_feedback.pause_feedback, Pause.PAUSE)
|
|
45
|
+
yield from bps.mv(attenuator, desired_transmission_fraction)
|
|
@@ -13,7 +13,7 @@ from dodal.common.beamlines.commissioning_mode import read_commissioning_mode
|
|
|
13
13
|
from dodal.devices.fast_grid_scan import (
|
|
14
14
|
FastGridScanCommon,
|
|
15
15
|
FastGridScanThreeD,
|
|
16
|
-
|
|
16
|
+
GridScanInvalidError,
|
|
17
17
|
)
|
|
18
18
|
from dodal.devices.zocalo import ZocaloResults
|
|
19
19
|
from dodal.devices.zocalo.zocalo_results import (
|
|
@@ -275,14 +275,14 @@ def run_gridscan(
|
|
|
275
275
|
try:
|
|
276
276
|
yield from beamline_specific.set_flyscan_params_plan()
|
|
277
277
|
except FailedStatus as e:
|
|
278
|
-
if isinstance(e.__cause__,
|
|
278
|
+
if isinstance(e.__cause__, GridScanInvalidError):
|
|
279
279
|
raise SampleException(
|
|
280
280
|
"Scan invalid - gridscan not valid for detected pin position"
|
|
281
281
|
) from e
|
|
282
282
|
|
|
283
283
|
LOGGER.info("Waiting for arming to finish")
|
|
284
284
|
yield from bps.wait(PlanGroupCheckpointConstants.GRID_READY_FOR_DC)
|
|
285
|
-
yield from bps.stage(fgs_composite.eiger)
|
|
285
|
+
yield from bps.stage(fgs_composite.eiger, wait=True)
|
|
286
286
|
|
|
287
287
|
yield from kickoff_and_complete_gridscan(
|
|
288
288
|
beamline_specific.fgs_motors,
|
|
@@ -103,7 +103,7 @@ def kickoff_and_complete_gridscan(
|
|
|
103
103
|
)
|
|
104
104
|
@bpp.contingency_decorator(
|
|
105
105
|
except_plan=lambda e: (yield from bps.stop(detector)), # type: ignore # Fix types in ophyd-async (https://github.com/DiamondLightSource/mx-bluesky/issues/855)
|
|
106
|
-
else_plan=lambda: (yield from bps.unstage(detector)),
|
|
106
|
+
else_plan=lambda: (yield from bps.unstage(detector, wait=True)),
|
|
107
107
|
)
|
|
108
108
|
def _decorated_do_fgs():
|
|
109
109
|
yield from _wait_for_zocalo_to_stage_then_do_fgs(
|
|
@@ -4,7 +4,7 @@ import bluesky.plan_stubs as bps
|
|
|
4
4
|
from bluesky.protocols import Readable
|
|
5
5
|
from dodal.devices.aperturescatterguard import ApertureScatterguard
|
|
6
6
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
7
|
-
from dodal.devices.common_dcm import
|
|
7
|
+
from dodal.devices.common_dcm import DoubleCrystalMonochromator
|
|
8
8
|
from dodal.devices.eiger import EigerDetector
|
|
9
9
|
from dodal.devices.flux import Flux
|
|
10
10
|
from dodal.devices.s4_slit_gaps import S4SlitGaps
|
|
@@ -43,7 +43,7 @@ def standard_read_hardware_pre_collection(
|
|
|
43
43
|
undulator: Undulator,
|
|
44
44
|
synchrotron: Synchrotron,
|
|
45
45
|
s4_slit_gaps: S4SlitGaps,
|
|
46
|
-
dcm:
|
|
46
|
+
dcm: DoubleCrystalMonochromator,
|
|
47
47
|
smargon: Smargon,
|
|
48
48
|
):
|
|
49
49
|
LOGGER.info("Reading status of beamline for callbacks, pre collection.")
|
|
@@ -63,7 +63,7 @@ def standard_read_hardware_during_collection(
|
|
|
63
63
|
aperture_scatterguard: ApertureScatterguard,
|
|
64
64
|
attenuator: BinaryFilterAttenuator,
|
|
65
65
|
flux: Flux,
|
|
66
|
-
dcm:
|
|
66
|
+
dcm: DoubleCrystalMonochromator,
|
|
67
67
|
detector: EigerDetector,
|
|
68
68
|
):
|
|
69
69
|
signals_to_read_during_collection = [
|
|
@@ -10,7 +10,7 @@ from bluesky.utils import MsgGenerator
|
|
|
10
10
|
from dodal.devices.oav.oav_detector import OAV
|
|
11
11
|
from dodal.devices.oav.pin_image_recognition import PinTipDetection
|
|
12
12
|
from dodal.devices.oav.pin_image_recognition.utils import NONE_VALUE
|
|
13
|
-
from dodal.devices.oav.utils import
|
|
13
|
+
from dodal.devices.oav.utils import PinNotFoundError, wait_for_tip_to_be_found
|
|
14
14
|
from dodal.devices.smargon import Smargon
|
|
15
15
|
|
|
16
16
|
from mx_bluesky.common.device_setup_plans.setup_oav import (
|
|
@@ -108,7 +108,7 @@ def grid_detection_plan(
|
|
|
108
108
|
yield from bps.sleep(HardwareConstants.OAV_REFRESH_DELAY)
|
|
109
109
|
|
|
110
110
|
tip_x_px, tip_y_px = yield from catch_exception_and_warn(
|
|
111
|
-
|
|
111
|
+
PinNotFoundError, wait_for_tip_to_be_found, pin_tip_detection
|
|
112
112
|
)
|
|
113
113
|
|
|
114
114
|
LOGGER.info(f"Tip is at x,y: {tip_x_px},{tip_y_px}")
|
|
@@ -4,7 +4,7 @@ from dodal.devices.aperturescatterguard import (
|
|
|
4
4
|
)
|
|
5
5
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
6
6
|
from dodal.devices.backlight import Backlight
|
|
7
|
-
from dodal.devices.common_dcm import
|
|
7
|
+
from dodal.devices.common_dcm import DoubleCrystalMonochromator
|
|
8
8
|
from dodal.devices.detector.detector_motion import DetectorMotion
|
|
9
9
|
from dodal.devices.eiger import EigerDetector
|
|
10
10
|
from dodal.devices.fast_grid_scan import (
|
|
@@ -51,7 +51,7 @@ class GridDetectThenXRayCentreComposite(FlyScanEssentialDevices):
|
|
|
51
51
|
attenuator: BinaryFilterAttenuator
|
|
52
52
|
backlight: Backlight
|
|
53
53
|
beamstop: Beamstop
|
|
54
|
-
dcm:
|
|
54
|
+
dcm: DoubleCrystalMonochromator
|
|
55
55
|
detector_motion: DetectorMotion
|
|
56
56
|
zebra_fast_grid_scan: ZebraFastGridScanThreeD
|
|
57
57
|
flux: Flux
|
|
@@ -112,8 +112,8 @@ def _panda_tidy(xrc_composite: HyperionFlyScanXRayCentreComposite):
|
|
|
112
112
|
yield from tidy_up_zebra_after_gridscan(
|
|
113
113
|
xrc_composite.zebra, xrc_composite.sample_shutter, group=group, wait=False
|
|
114
114
|
)
|
|
115
|
+
yield from bps.unstage(xrc_composite.panda, group=group)
|
|
115
116
|
yield from bps.wait(group, timeout=10)
|
|
116
|
-
yield from bps.unstage(xrc_composite.panda)
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
def _panda_triggering_setup(
|
|
@@ -126,10 +126,9 @@ def _panda_triggering_setup(
|
|
|
126
126
|
xrc_composite.panda_fast_grid_scan.run_up_distance_mm
|
|
127
127
|
)
|
|
128
128
|
|
|
129
|
-
#
|
|
130
|
-
DEADTIME_S = 1e-6 # according to https://www.dectris.com/en/detectors/x-ray-detectors/eiger2/eiger2-for-synchrotrons/eiger2-x/
|
|
129
|
+
DETECTOR_DEADTIME_S = 1e-4 # This value was empirically found to be safer than the documented deadtime in the Eiger manual
|
|
131
130
|
|
|
132
|
-
time_between_x_steps_ms = (
|
|
131
|
+
time_between_x_steps_ms = (DETECTOR_DEADTIME_S + parameters.exposure_time_s) * 1e3
|
|
133
132
|
|
|
134
133
|
smargon_speed_limit_mm_per_s = yield from bps.rd(
|
|
135
134
|
xrc_composite.smargon.x.max_velocity
|
|
@@ -148,13 +147,13 @@ def _panda_triggering_setup(
|
|
|
148
147
|
)
|
|
149
148
|
else:
|
|
150
149
|
LOGGER.info(
|
|
151
|
-
f"Panda grid scan: Smargon speed set to {
|
|
150
|
+
f"Panda grid scan: Smargon speed set to {sample_velocity_mm_per_s} mm/s"
|
|
152
151
|
f" and using a run-up distance of {run_up_distance_mm}"
|
|
153
152
|
)
|
|
154
153
|
|
|
155
154
|
yield from bps.mv(
|
|
156
|
-
xrc_composite.panda_fast_grid_scan.time_between_x_steps_ms,
|
|
157
|
-
time_between_x_steps_ms,
|
|
155
|
+
xrc_composite.panda_fast_grid_scan.time_between_x_steps_ms,
|
|
156
|
+
time_between_x_steps_ms,
|
|
158
157
|
)
|
|
159
158
|
|
|
160
159
|
directory_provider_root = Path(parameters.storage_directory)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections.abc import Generator
|
|
3
|
+
from collections.abc import Generator, Sequence
|
|
4
4
|
|
|
5
5
|
import bluesky.plan_stubs as bps
|
|
6
6
|
import numpy as np
|
|
@@ -99,41 +99,12 @@ def load_centre_collect_full(
|
|
|
99
99
|
else:
|
|
100
100
|
raise
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if flyscan_event_handler.xray_centre_results:
|
|
106
|
-
selection_func = flyscan_result.resolve_selection_fn(
|
|
107
|
-
parameters.selection_params
|
|
108
|
-
)
|
|
109
|
-
hits = selection_func(flyscan_event_handler.xray_centre_results)
|
|
110
|
-
hits_to_collect = []
|
|
111
|
-
for hit in hits:
|
|
112
|
-
if hit.sample_id is None:
|
|
113
|
-
LOGGER.warning(
|
|
114
|
-
f"Diffracting centre {hit} not collected because no sample id was assigned."
|
|
115
|
-
)
|
|
116
|
-
else:
|
|
117
|
-
hits_to_collect.append(hit)
|
|
118
|
-
|
|
119
|
-
locations_to_collect_um = [
|
|
120
|
-
hit.centre_of_mass_mm * 1000 for hit in hits_to_collect
|
|
121
|
-
]
|
|
122
|
-
samples_to_collect = [hit.sample_id for hit in hits_to_collect]
|
|
123
|
-
LOGGER.info(
|
|
124
|
-
f"Selected hits {hits_to_collect} using {selection_func}, args={parameters.selection_params}"
|
|
102
|
+
sample_ids_and_locations = yield from (
|
|
103
|
+
_samples_and_locations_to_collect(
|
|
104
|
+
flyscan_event_handler.xray_centre_results, parameters, composite
|
|
125
105
|
)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
# means that we do not need to recentre and can collect where we are
|
|
129
|
-
initial_x_mm = yield from bps.rd(composite.smargon.x.user_readback)
|
|
130
|
-
initial_y_mm = yield from bps.rd(composite.smargon.y.user_readback)
|
|
131
|
-
initial_z_mm = yield from bps.rd(composite.smargon.z.user_readback)
|
|
132
|
-
|
|
133
|
-
locations_to_collect_um = [
|
|
134
|
-
np.array([initial_x_mm, initial_y_mm, initial_z_mm]) * 1000
|
|
135
|
-
]
|
|
136
|
-
samples_to_collect = [parameters.sample_id]
|
|
106
|
+
)
|
|
107
|
+
sample_ids_and_locations.sort(key=_x_coordinate)
|
|
137
108
|
|
|
138
109
|
multi_rotation = parameters.multi_rotation_scan
|
|
139
110
|
rotation_template = multi_rotation.rotation_scans.copy()
|
|
@@ -144,9 +115,7 @@ def load_centre_collect_full(
|
|
|
144
115
|
|
|
145
116
|
generator = rotation_scan_generator(is_alternating)
|
|
146
117
|
next(generator)
|
|
147
|
-
for
|
|
148
|
-
locations_to_collect_um, samples_to_collect, strict=True
|
|
149
|
-
):
|
|
118
|
+
for sample_id, location in sample_ids_and_locations:
|
|
150
119
|
for rot in rotation_template:
|
|
151
120
|
combination = generator.send((rot, location, sample_id))
|
|
152
121
|
multi_rotation.rotation_scans.append(combination)
|
|
@@ -161,6 +130,51 @@ def load_centre_collect_full(
|
|
|
161
130
|
yield from plan_with_callback_subs()
|
|
162
131
|
|
|
163
132
|
|
|
133
|
+
def _samples_and_locations_to_collect(
|
|
134
|
+
xrc_results: Sequence[flyscan_result.XRayCentreResult] | None,
|
|
135
|
+
parameters: LoadCentreCollect,
|
|
136
|
+
composite: LoadCentreCollectComposite,
|
|
137
|
+
) -> MsgGenerator[list[tuple[int, np.ndarray]]]:
|
|
138
|
+
if xrc_results:
|
|
139
|
+
selection_func = flyscan_result.resolve_selection_fn(
|
|
140
|
+
parameters.selection_params
|
|
141
|
+
)
|
|
142
|
+
hits = selection_func(xrc_results)
|
|
143
|
+
hits_to_collect = []
|
|
144
|
+
for hit in hits:
|
|
145
|
+
if hit.sample_id is None:
|
|
146
|
+
LOGGER.warning(
|
|
147
|
+
f"Diffracting centre {hit} not collected because no sample id was assigned."
|
|
148
|
+
)
|
|
149
|
+
else:
|
|
150
|
+
hits_to_collect.append(hit)
|
|
151
|
+
|
|
152
|
+
samples_and_locations = [
|
|
153
|
+
(hit.sample_id, hit.centre_of_mass_mm * 1000) for hit in hits_to_collect
|
|
154
|
+
]
|
|
155
|
+
LOGGER.info(
|
|
156
|
+
f"Selected hits {hits_to_collect} using {selection_func}, args={parameters.selection_params}"
|
|
157
|
+
)
|
|
158
|
+
return samples_and_locations
|
|
159
|
+
else:
|
|
160
|
+
# If the xray centring hasn't found a result but has not thrown an error it
|
|
161
|
+
# means that we do not need to recentre and can collect where we are
|
|
162
|
+
initial_x_mm = yield from bps.rd(composite.smargon.x.user_readback)
|
|
163
|
+
initial_y_mm = yield from bps.rd(composite.smargon.y.user_readback)
|
|
164
|
+
initial_z_mm = yield from bps.rd(composite.smargon.z.user_readback)
|
|
165
|
+
|
|
166
|
+
return [
|
|
167
|
+
(
|
|
168
|
+
parameters.sample_id,
|
|
169
|
+
np.array([initial_x_mm, initial_y_mm, initial_z_mm]) * 1000,
|
|
170
|
+
)
|
|
171
|
+
]
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _x_coordinate(sample_and_location: tuple[int, np.ndarray]) -> float:
|
|
175
|
+
return sample_and_location[1][0] # type: ignore
|
|
176
|
+
|
|
177
|
+
|
|
164
178
|
def rotation_scan_generator(
|
|
165
179
|
is_alternating: bool,
|
|
166
180
|
) -> Generator[
|
|
@@ -9,7 +9,7 @@ from dodal.devices.oav.oav_detector import OAV
|
|
|
9
9
|
from dodal.devices.oav.oav_parameters import OAV_CONFIG_JSON, OAVParameters
|
|
10
10
|
from dodal.devices.oav.pin_image_recognition import PinTipDetection, Tip
|
|
11
11
|
from dodal.devices.oav.utils import (
|
|
12
|
-
|
|
12
|
+
PinNotFoundError,
|
|
13
13
|
Pixel,
|
|
14
14
|
get_move_required_so_that_beam_is_at_pixel,
|
|
15
15
|
wait_for_tip_to_be_found,
|
|
@@ -161,6 +161,6 @@ def pin_tip_centre_plan(
|
|
|
161
161
|
# See #673 for improvements
|
|
162
162
|
yield from bps.sleep(0.3)
|
|
163
163
|
tip = yield from catch_exception_and_warn(
|
|
164
|
-
|
|
164
|
+
PinNotFoundError, wait_for_tip_to_be_found, pin_tip_detect
|
|
165
165
|
)
|
|
166
166
|
yield from offset_and_move(tip)
|
|
@@ -428,7 +428,7 @@ def rotation_scan_internal(
|
|
|
428
428
|
|
|
429
429
|
yield from rotation_scan_core(single_scan)
|
|
430
430
|
|
|
431
|
-
yield from bps.unstage(eiger)
|
|
431
|
+
yield from bps.unstage(eiger, wait=True)
|
|
432
432
|
|
|
433
433
|
LOGGER.info("setting up and staging eiger...")
|
|
434
434
|
yield from start_preparing_data_collection_then_do_plan(
|
|
@@ -6,7 +6,7 @@ from dodal.devices.aperturescatterguard import (
|
|
|
6
6
|
)
|
|
7
7
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
8
8
|
from dodal.devices.backlight import Backlight
|
|
9
|
-
from dodal.devices.common_dcm import
|
|
9
|
+
from dodal.devices.common_dcm import DoubleCrystalMonochromatorWithDSpacing
|
|
10
10
|
from dodal.devices.eiger import EigerDetector
|
|
11
11
|
from dodal.devices.fast_grid_scan import (
|
|
12
12
|
PandAFastGridScan,
|
|
@@ -37,7 +37,7 @@ class HyperionFlyScanXRayCentreComposite(FlyScanEssentialDevices):
|
|
|
37
37
|
|
|
38
38
|
aperture_scatterguard: ApertureScatterguard
|
|
39
39
|
attenuator: BinaryFilterAttenuator
|
|
40
|
-
dcm:
|
|
40
|
+
dcm: DoubleCrystalMonochromatorWithDSpacing
|
|
41
41
|
eiger: EigerDetector
|
|
42
42
|
flux: Flux
|
|
43
43
|
s4_slit_gaps: S4SlitGaps
|
|
@@ -150,14 +150,12 @@ class RotationScan(RotationExperiment, SplitScan):
|
|
|
150
150
|
return rotation_scan
|
|
151
151
|
|
|
152
152
|
@model_validator(mode="after")
|
|
153
|
-
|
|
154
|
-
def correct_start_vds(cls, values: Any) -> Any:
|
|
155
|
-
assert isinstance(values, RotationScan)
|
|
153
|
+
def correct_start_vds(self) -> Any:
|
|
156
154
|
start_img = 0.0
|
|
157
|
-
for scan in
|
|
155
|
+
for scan in self.rotation_scans:
|
|
158
156
|
scan.nexus_vds_start_img = int(start_img)
|
|
159
|
-
start_img += scan.scan_width_deg /
|
|
160
|
-
return
|
|
157
|
+
start_img += scan.scan_width_deg / self.rotation_increment_deg
|
|
158
|
+
return self
|
|
161
159
|
|
|
162
160
|
@model_validator(mode="after")
|
|
163
161
|
def _check_valid_for_single_arm_multiple_sweep(self) -> Self:
|
|
@@ -27,7 +27,12 @@ def clear_all_device_caches(context: BlueskyContext):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def setup_devices(context: BlueskyContext, dev_mode: bool):
|
|
30
|
-
context.with_dodal_module(
|
|
30
|
+
_, exceptions = context.with_dodal_module(
|
|
31
31
|
get_beamline_based_on_environment_variable(),
|
|
32
32
|
mock=dev_mode,
|
|
33
33
|
)
|
|
34
|
+
if exceptions:
|
|
35
|
+
raise ExceptionGroup(
|
|
36
|
+
f"Unable to connect to beamline devices {list(exceptions.keys())}",
|
|
37
|
+
list(exceptions.values()),
|
|
38
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mx-bluesky
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.10
|
|
4
4
|
Summary: Bluesky tools for MX Beamlines at DLS
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -237,11 +237,11 @@ Requires-Dist: deepdiff
|
|
|
237
237
|
Requires-Dist: matplotlib
|
|
238
238
|
Requires-Dist: cachetools
|
|
239
239
|
Requires-Dist: daq-config-server>=v1.0.0-rc.2
|
|
240
|
-
Requires-Dist: blueapi>=
|
|
240
|
+
Requires-Dist: blueapi>=1.5.0
|
|
241
241
|
Requires-Dist: ophyd>=1.10.5
|
|
242
242
|
Requires-Dist: ophyd-async>=0.10.0a2
|
|
243
|
-
Requires-Dist: bluesky>=1.
|
|
244
|
-
Requires-Dist: dls-dodal==1.
|
|
243
|
+
Requires-Dist: bluesky>=1.14.6
|
|
244
|
+
Requires-Dist: dls-dodal==1.63.0
|
|
245
245
|
Provides-Extra: dev
|
|
246
246
|
Requires-Dist: black; extra == "dev"
|
|
247
247
|
Requires-Dist: build; extra == "dev"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
mx_bluesky/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
|
|
2
2
|
mx_bluesky/__main__.py,sha256=RVqPnxDisFMIn_aoEi0drlThNHgKTJULnSrotouIKI0,480
|
|
3
|
-
mx_bluesky/_version.py,sha256=
|
|
3
|
+
mx_bluesky/_version.py,sha256=GHx1c9DDnT0tx1ian8L-pn_ij2Y5L7Dx0xAenE6ixKE,706
|
|
4
4
|
mx_bluesky/definitions.py,sha256=ULpEYAUzdQiEbBoTgYTMxfUf3DDDjhYtvDxofs7Qxqw,168
|
|
5
5
|
mx_bluesky/jupyter_example.ipynb,sha256=wpwvPrBvwtRMS5AIFk8F54cIlUoD0o4ji8tKK5cZHA4,1672
|
|
6
6
|
mx_bluesky/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -16,14 +16,16 @@ mx_bluesky/beamlines/i04/thawing_plan.py,sha256=eSqX3VKHKw_KDGxjpszDifRpdb_RkwQx
|
|
|
16
16
|
mx_bluesky/beamlines/i04/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
mx_bluesky/beamlines/i04/callbacks/murko_callback.py,sha256=C2KoIxwMIWxD46utmq1-69SIc8MspocXJ1sccO1lwAY,4458
|
|
18
18
|
mx_bluesky/beamlines/i04/experiment_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
mx_bluesky/beamlines/i04/experiment_plans/i04_grid_detect_then_xray_centre_plan.py,sha256=
|
|
19
|
+
mx_bluesky/beamlines/i04/experiment_plans/i04_grid_detect_then_xray_centre_plan.py,sha256=Z77NSnds9mFVRnea5z_aySgs7vJxKRvzbpNNit2AeZM,10206
|
|
20
20
|
mx_bluesky/beamlines/i23/__init__.py,sha256=7nwQiKBZAXLnvPhCqaI2VC1k4TOzQalOUvwF6SQ3Yd4,95
|
|
21
21
|
mx_bluesky/beamlines/i23/serial.py,sha256=XVbHM8NevnJMFAJD9jkxG-VnPaWX6t_k-wlipRw0pmY,2055
|
|
22
22
|
mx_bluesky/beamlines/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
mx_bluesky/beamlines/i24/jungfrau_commissioning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
mx_bluesky/beamlines/i24/jungfrau_commissioning/
|
|
25
|
-
mx_bluesky/beamlines/i24/jungfrau_commissioning/
|
|
26
|
-
mx_bluesky/beamlines/i24/jungfrau_commissioning/
|
|
23
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/experiment_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/experiment_plans/do_darks.py,sha256=la0jGZDHt48nsRAe8Gq6uL5LoQ1WszF4LmSo1tp03S8,2974
|
|
25
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/plan_stubs/__init__.py,sha256=yxc_V5DfWKXtOmuX-U9YEdkn05ZriD9My65lpEYTuRo,115
|
|
26
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/plan_stubs/do_external_acquisition.py,sha256=DmtGT_zS_bOKjOKCLypWh13sZUF-zp6PPZzky6MkPcc,1675
|
|
27
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/plan_stubs/do_internal_acquisition.py,sha256=_wmQExT0A-3k_6B8ghtfpspz9vZ2f6QLwcUZlW8jzE8,1846
|
|
28
|
+
mx_bluesky/beamlines/i24/jungfrau_commissioning/plan_stubs/plan_utils.py,sha256=q3KN2oN9k4IptL0vpjaH3l0NZobekPSsNUIJi736l9w,2514
|
|
27
29
|
mx_bluesky/beamlines/i24/serial/__init__.py,sha256=r8v9V48TMrNxOcwBZ6lzeCCuPulq5rg8m-mwH_KkOnI,1533
|
|
28
30
|
mx_bluesky/beamlines/i24/serial/blueapi_config.yaml,sha256=P0saF1bqt4ANU-2mtS_ZHO4NYr_ierUJN-gf6cspic8,350
|
|
29
31
|
mx_bluesky/beamlines/i24/serial/dcid.py,sha256=7NkpMFF3obTVt0aHBbw5J7DqhOEg-zz5otNjdgDMlFg,13819
|
|
@@ -80,21 +82,21 @@ mx_bluesky/common/xrc_result.py,sha256=tUJ6qkDTTB6H1F71IvVAKtmHCRyHSU_tj9GRzVmnE
|
|
|
80
82
|
mx_bluesky/common/device_setup_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
83
|
mx_bluesky/common/device_setup_plans/manipulate_sample.py,sha256=bKVWiXQnibXEjKjCNvy9PX4kUSh1CsBQCkqO5tUgrOU,3130
|
|
82
84
|
mx_bluesky/common/device_setup_plans/position_detector.py,sha256=S49ml0KNZ6wXPQqOxNJ2whKTCyRTcKdBXBhyeEyFDQQ,635
|
|
83
|
-
mx_bluesky/common/device_setup_plans/robot_load_unload.py,sha256=
|
|
84
|
-
mx_bluesky/common/device_setup_plans/setup_oav.py,sha256=
|
|
85
|
+
mx_bluesky/common/device_setup_plans/robot_load_unload.py,sha256=vbkH9pGu3ZHYrzsMJlEB38eLTP-eSNEbnB6svC_KP2Q,4503
|
|
86
|
+
mx_bluesky/common/device_setup_plans/setup_oav.py,sha256=10lo4c7k-OHI2i5F3OsC318ZXG3N8BtjKMFFSflVFR0,2692
|
|
85
87
|
mx_bluesky/common/device_setup_plans/setup_panda.py,sha256=OF-ZygZyAyQEUdrAWiIxWZ6QhAsVx4Mm9ngRYB1mzKI,433
|
|
86
88
|
mx_bluesky/common/device_setup_plans/setup_zebra_and_shutter.py,sha256=y83Szce7QxXdpLeGXpgyhceOr1HCE6fs6zmZr77IYAE,10066
|
|
87
89
|
mx_bluesky/common/device_setup_plans/utils.py,sha256=S_Us1KfLkyaRzWxmqnoVxHj2Suq-Vs0n5fMRygHgrTw,1859
|
|
88
|
-
mx_bluesky/common/device_setup_plans/xbpm_feedback.py,sha256=
|
|
90
|
+
mx_bluesky/common/device_setup_plans/xbpm_feedback.py,sha256=EY1CwACPfts4otAjF15uLrMDyRGwmHz2khh8WicK6cY,1873
|
|
89
91
|
mx_bluesky/common/experiment_plans/__init__.py,sha256=FMA-4VN1TJCPcyURKF0qPIQ8uo8YBbtHPRdJokVF4MA,129
|
|
90
92
|
mx_bluesky/common/experiment_plans/change_aperture_then_move_plan.py,sha256=407E9rp0yGWWIU1fJrgqK_hC19mVwRK-Und7fMlGNDc,3062
|
|
91
|
-
mx_bluesky/common/experiment_plans/common_flyscan_xray_centre_plan.py,sha256=
|
|
93
|
+
mx_bluesky/common/experiment_plans/common_flyscan_xray_centre_plan.py,sha256=2Ieb7156ujAGVuybPUMjJEm_7-Z77NYeIGyjDagi0Nw,13546
|
|
92
94
|
mx_bluesky/common/experiment_plans/common_grid_detect_then_xray_centre_plan.py,sha256=jspOKPc3uxvG-a5-LXs7Yfwy8HTvGXBj4snke9j5gYE,7033
|
|
93
|
-
mx_bluesky/common/experiment_plans/oav_grid_detection_plan.py,sha256=
|
|
95
|
+
mx_bluesky/common/experiment_plans/oav_grid_detection_plan.py,sha256=SOX6eyPNm7hLJaRJ8esd4DOE2nBjT_2gbmAz1Ozc57g,7154
|
|
94
96
|
mx_bluesky/common/experiment_plans/oav_snapshot_plan.py,sha256=8TRAvHG2W9bn1xb06bYZTWkfhT2q1EtfyxyiMMKmWcw,3623
|
|
95
97
|
mx_bluesky/common/experiment_plans/inner_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
-
mx_bluesky/common/experiment_plans/inner_plans/do_fgs.py,sha256=
|
|
97
|
-
mx_bluesky/common/experiment_plans/inner_plans/read_hardware.py,sha256=
|
|
98
|
+
mx_bluesky/common/experiment_plans/inner_plans/do_fgs.py,sha256=dTO9YuvbSzYaMUTs51x0Vuv9-jZ333jIcP51PS10JRw,4876
|
|
99
|
+
mx_bluesky/common/experiment_plans/inner_plans/read_hardware.py,sha256=jwGgzBPyUN4_FKNe5J8vmuLsvSGmEwk73LGBUu-Jy00,2408
|
|
98
100
|
mx_bluesky/common/experiment_plans/inner_plans/udc_default_state.py,sha256=TnO5hv1I_UWlB1Vz7dCQ-nGj4LLsu9nQgetaK6hc_YM,2704
|
|
99
101
|
mx_bluesky/common/experiment_plans/inner_plans/write_sample_status.py,sha256=pmS4Lsndp90CCIKzD_wssvbzt1qu7rEzfXgxvDwDrQ8,1313
|
|
100
102
|
mx_bluesky/common/external_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -128,7 +130,7 @@ mx_bluesky/common/external_interaction/nexus/write_nexus.py,sha256=s8xT05_Fn_s64
|
|
|
128
130
|
mx_bluesky/common/parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
131
|
mx_bluesky/common/parameters/components.py,sha256=wyejnv6DxSOrGzcMVRHZVHnund3pj6cTxTMU5v7JW5Q,8576
|
|
130
132
|
mx_bluesky/common/parameters/constants.py,sha256=iNv55VTv4QPu96z58pbnMiAE1RGsFKsTs4wahrlGihw,5139
|
|
131
|
-
mx_bluesky/common/parameters/device_composites.py,sha256=
|
|
133
|
+
mx_bluesky/common/parameters/device_composites.py,sha256=H-SEn1BNme7ucBRRoo90Qr5YdVX0ooPAQPtrzxB6ZAg,2303
|
|
132
134
|
mx_bluesky/common/parameters/gridscan.py,sha256=Y4xZpMhzWN58gnAYKZyVbtN8uW4pBVC68KTGGmYpb2A,7632
|
|
133
135
|
mx_bluesky/common/preprocessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
136
|
mx_bluesky/common/preprocessors/preprocessors.py,sha256=BNpSM7S9gxhVbG39rjH14k89sOmKiII0cqApH3pF_H0,4476
|
|
@@ -154,15 +156,15 @@ mx_bluesky/hyperion/device_setup_plans/smargon.py,sha256=eb3TCXg33SW6TlfElh5KjYw
|
|
|
154
156
|
mx_bluesky/hyperion/device_setup_plans/utils.py,sha256=96JlzyikMhWN7LzdiMx8URZInXoGR3OjoxYmCIp9tts,425
|
|
155
157
|
mx_bluesky/hyperion/experiment_plans/__init__.py,sha256=dJjwLk0EQP-1hKhbs8aRxTF_LxUXgB7kcgDlaP-tMnk,787
|
|
156
158
|
mx_bluesky/hyperion/experiment_plans/experiment_registry.py,sha256=bGp2c3nKutqHMnDxuqjp6yCF-JKykSzX-IUfxk3oVlM,1701
|
|
157
|
-
mx_bluesky/hyperion/experiment_plans/hyperion_flyscan_xray_centre_plan.py,sha256=
|
|
159
|
+
mx_bluesky/hyperion/experiment_plans/hyperion_flyscan_xray_centre_plan.py,sha256=CMy6NR0rrLeyS8SU0jN7xOthYcpxxy9n9XXi39s4is0,5910
|
|
158
160
|
mx_bluesky/hyperion/experiment_plans/hyperion_grid_detect_then_xray_centre_plan.py,sha256=e4w4226ONSGQF2dnXzxOfcJ9i57CZIJrqQ1YCLlaBNo,2153
|
|
159
|
-
mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py,sha256=
|
|
161
|
+
mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py,sha256=z-RS1MUf1A9aGkmJLcM9zF3G-c0wyI-MoVVXXGB0-lE,7957
|
|
160
162
|
mx_bluesky/hyperion/experiment_plans/optimise_attenuation_plan.py,sha256=5ZAH17F5T1YyVgA2ML0NEf4ufrD1G0jPRU0_5pINdTg,16195
|
|
161
163
|
mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py,sha256=oErbq4ffTZVNR_LeiSJP8_q4cwdZWB-bdbrO3ZwKg20,5397
|
|
162
|
-
mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py,sha256
|
|
164
|
+
mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py,sha256=-5iUaM6f4uaUrKQtcufcE_CLQf--zSJ6noGWHFK-6wI,6240
|
|
163
165
|
mx_bluesky/hyperion/experiment_plans/robot_load_and_change_energy.py,sha256=bqG4enP2bZQ6ND0c5XqwDySQTkQRBdK7gvWf61VEnWM,6051
|
|
164
166
|
mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py,sha256=samWAztWJU9sRo1FtIicWWQZ7TjUwg7Y9y9oqhkcb5o,6904
|
|
165
|
-
mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py,sha256=
|
|
167
|
+
mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py,sha256=LZv6QbBMNpC54mM8fYX7ZTzSxVP2quxpCNubfb8kuy4,15974
|
|
166
168
|
mx_bluesky/hyperion/experiment_plans/set_energy_plan.py,sha256=8FAqN-aJgRwZSiCX-hNdeGmaijt0l8owdShVBwNchfE,2643
|
|
167
169
|
mx_bluesky/hyperion/external_interaction/__init__.py,sha256=95DwXDmKsx36RgAL-AtLZl2LQoLPKbzeYdlkkP_4Coc,559
|
|
168
170
|
mx_bluesky/hyperion/external_interaction/agamemnon.py,sha256=B2Q7NR1VSRoCGg4hlCiZDrh2Fa0s4B4ZIws1H7oBfOk,12020
|
|
@@ -183,19 +185,19 @@ mx_bluesky/hyperion/parameters/__init__.py,sha256=kf2wfcILBUBpT0tJ8-W39BywQUkn67
|
|
|
183
185
|
mx_bluesky/hyperion/parameters/cli.py,sha256=I-NY3Kt3la5HNUB4qRA6NtuxbJSr78yx-sM_cRx_pY4,1514
|
|
184
186
|
mx_bluesky/hyperion/parameters/components.py,sha256=eIUEcFNqcEad21IThSDatoX-NRa9GdfBOwt6ZUwb88U,292
|
|
185
187
|
mx_bluesky/hyperion/parameters/constants.py,sha256=aCACWCp670o9U3AKfON-ntqkxIH-99gWNZvEN1G2rPc,2265
|
|
186
|
-
mx_bluesky/hyperion/parameters/device_composites.py,sha256=
|
|
188
|
+
mx_bluesky/hyperion/parameters/device_composites.py,sha256=B37k4J8qtBetL3s16Fu9jlBkJwjpdz02SQ9LW1TZmBE,2213
|
|
187
189
|
mx_bluesky/hyperion/parameters/gridscan.py,sha256=DMldH8UJwvcKTUh26Ntg-qgNAP4h6iCrxjFX_kkcvW0,3904
|
|
188
190
|
mx_bluesky/hyperion/parameters/load_centre_collect.py,sha256=8dlKwb7WmgDeohQ9QsdMWQMMM73EaC2cZ0wKg6vOP60,3727
|
|
189
191
|
mx_bluesky/hyperion/parameters/robot_load.py,sha256=Iktni3r6LFRnlM51hpdpv3QrD6QPhx2rAeyB8Gv6ML4,1124
|
|
190
|
-
mx_bluesky/hyperion/parameters/rotation.py,sha256=
|
|
192
|
+
mx_bluesky/hyperion/parameters/rotation.py,sha256=0QNov3jykC__iIHMxdTq3znBsKLyQGk-vzSVMf7rSyA,7360
|
|
191
193
|
mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml,sha256=mhLBJTSjHCkM9F6mjtqbhNmmrV8qSctbCUfhb0q7pYo,28085
|
|
192
194
|
mx_bluesky/hyperion/utils/__init__.py,sha256=f4E8wInL1Ll4eeFtAiyKmipOBTPlUtKmVK-m_LOQG4M,35
|
|
193
|
-
mx_bluesky/hyperion/utils/context.py,sha256=
|
|
195
|
+
mx_bluesky/hyperion/utils/context.py,sha256=VYAu1yxhDBrI98ul7UErotuquF64s1EDHtqPQLRpyvY,1227
|
|
194
196
|
mx_bluesky/phase1_zebra/__init__.py,sha256=Edhhn2L9MVXnjJhyD5_yKQVUDo7XW98rvuT7dlzIn58,132
|
|
195
197
|
mx_bluesky/phase1_zebra/device_setup_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
196
|
-
mx_bluesky-1.5.
|
|
197
|
-
mx_bluesky-1.5.
|
|
198
|
-
mx_bluesky-1.5.
|
|
199
|
-
mx_bluesky-1.5.
|
|
200
|
-
mx_bluesky-1.5.
|
|
201
|
-
mx_bluesky-1.5.
|
|
198
|
+
mx_bluesky-1.5.10.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
199
|
+
mx_bluesky-1.5.10.dist-info/METADATA,sha256=D4I5k3VrZ9WGcMFtohiAyJSUuuukebOs3yepLqhXQ14,17424
|
|
200
|
+
mx_bluesky-1.5.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
201
|
+
mx_bluesky-1.5.10.dist-info/entry_points.txt,sha256=HgVtwgWoMRn9-X6rxCcSY3Jz_paspJTIlc-t2NFzWpo,409
|
|
202
|
+
mx_bluesky-1.5.10.dist-info/top_level.txt,sha256=S4rrzXIUef58ulf_04wn01XGZ3xeJjXs4LPEJ_xoF-I,11
|
|
203
|
+
mx_bluesky-1.5.10.dist-info/RECORD,,
|
/mx_bluesky/beamlines/i24/jungfrau_commissioning/{__init__.py → experiment_plans/__init__.py}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|