dls-dodal 1.29.4__py3-none-any.whl → 1.31.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.
- {dls_dodal-1.29.4.dist-info → dls_dodal-1.31.0.dist-info}/METADATA +29 -44
- dls_dodal-1.31.0.dist-info/RECORD +134 -0
- {dls_dodal-1.29.4.dist-info → dls_dodal-1.31.0.dist-info}/WHEEL +1 -1
- dls_dodal-1.31.0.dist-info/entry_points.txt +3 -0
- dodal/__init__.py +1 -4
- dodal/_version.py +2 -2
- dodal/beamline_specific_utils/i03.py +1 -4
- dodal/beamlines/__init__.py +7 -1
- dodal/beamlines/i03.py +34 -29
- dodal/beamlines/i04.py +39 -16
- dodal/beamlines/i13_1.py +66 -0
- dodal/beamlines/i22.py +22 -22
- dodal/beamlines/i24.py +1 -1
- dodal/beamlines/p38.py +21 -21
- dodal/beamlines/p45.py +18 -16
- dodal/beamlines/p99.py +61 -0
- dodal/beamlines/training_rig.py +64 -0
- dodal/cli.py +6 -3
- dodal/common/beamlines/beamline_parameters.py +7 -6
- dodal/common/beamlines/beamline_utils.py +15 -14
- dodal/common/maths.py +1 -3
- dodal/common/types.py +6 -5
- dodal/common/udc_directory_provider.py +39 -21
- dodal/common/visit.py +60 -62
- dodal/devices/CTAB.py +22 -17
- dodal/devices/aperture.py +1 -1
- dodal/devices/aperturescatterguard.py +139 -209
- dodal/devices/areadetector/adaravis.py +8 -6
- dodal/devices/areadetector/adsim.py +2 -3
- dodal/devices/areadetector/adutils.py +20 -12
- dodal/devices/areadetector/plugins/MJPG.py +2 -1
- dodal/devices/backlight.py +12 -1
- dodal/devices/cryostream.py +19 -7
- dodal/devices/dcm.py +1 -1
- dodal/devices/detector/__init__.py +13 -2
- dodal/devices/detector/det_dim_constants.py +2 -2
- dodal/devices/detector/det_dist_to_beam_converter.py +1 -1
- dodal/devices/detector/detector.py +33 -32
- dodal/devices/detector/detector_motion.py +38 -31
- dodal/devices/eiger.py +11 -15
- dodal/devices/eiger_odin.py +9 -10
- dodal/devices/fast_grid_scan.py +18 -27
- dodal/devices/fluorescence_detector_motion.py +13 -4
- dodal/devices/focusing_mirror.py +6 -6
- dodal/devices/hutch_shutter.py +4 -4
- dodal/devices/i22/dcm.py +5 -4
- dodal/devices/i22/fswitch.py +10 -6
- dodal/devices/i22/nxsas.py +55 -43
- dodal/devices/i24/aperture.py +1 -1
- dodal/devices/i24/beamstop.py +1 -1
- dodal/devices/i24/dcm.py +1 -1
- dodal/devices/i24/{I24_detector_motion.py → i24_detector_motion.py} +1 -1
- dodal/devices/i24/pmac.py +67 -12
- dodal/devices/ipin.py +7 -4
- dodal/devices/linkam3.py +12 -6
- dodal/devices/logging_ophyd_device.py +1 -1
- dodal/devices/motors.py +32 -6
- dodal/devices/oav/grid_overlay.py +1 -0
- dodal/devices/oav/microns_for_zoom_levels.json +1 -1
- dodal/devices/oav/oav_detector.py +2 -1
- dodal/devices/oav/oav_parameters.py +18 -10
- dodal/devices/oav/oav_to_redis_forwarder.py +129 -0
- dodal/devices/oav/pin_image_recognition/__init__.py +6 -6
- dodal/devices/oav/pin_image_recognition/utils.py +5 -6
- dodal/devices/oav/utils.py +2 -2
- dodal/devices/p99/__init__.py +0 -0
- dodal/devices/p99/sample_stage.py +43 -0
- dodal/devices/robot.py +31 -20
- dodal/devices/scatterguard.py +1 -1
- dodal/devices/scintillator.py +8 -5
- dodal/devices/slits.py +1 -1
- dodal/devices/smargon.py +4 -4
- dodal/devices/status.py +2 -31
- dodal/devices/tetramm.py +23 -19
- dodal/devices/thawer.py +5 -3
- dodal/devices/training_rig/__init__.py +0 -0
- dodal/devices/training_rig/sample_stage.py +10 -0
- dodal/devices/turbo_slit.py +1 -1
- dodal/devices/undulator.py +1 -1
- dodal/devices/undulator_dcm.py +6 -8
- dodal/devices/util/adjuster_plans.py +3 -3
- dodal/devices/util/epics_util.py +5 -7
- dodal/devices/util/lookup_tables.py +2 -3
- dodal/devices/util/save_panda.py +87 -0
- dodal/devices/util/test_utils.py +17 -0
- dodal/devices/webcam.py +3 -3
- dodal/devices/xbpm_feedback.py +1 -25
- dodal/devices/xspress3/xspress3.py +1 -1
- dodal/devices/zebra.py +15 -10
- dodal/devices/zebra_controlled_shutter.py +26 -11
- dodal/devices/zocalo/zocalo_interaction.py +10 -2
- dodal/devices/zocalo/zocalo_results.py +36 -19
- dodal/log.py +46 -15
- dodal/plans/check_topup.py +65 -10
- dodal/plans/data_session_metadata.py +8 -9
- dodal/plans/motor_util_plans.py +117 -0
- dodal/utils.py +65 -22
- dls_dodal-1.29.4.dist-info/RECORD +0 -125
- dls_dodal-1.29.4.dist-info/entry_points.txt +0 -2
- dodal/devices/beamstop.py +0 -8
- dodal/devices/qbpm1.py +0 -8
- {dls_dodal-1.29.4.dist-info → dls_dodal-1.31.0.dist-info}/LICENSE +0 -0
- {dls_dodal-1.29.4.dist-info → dls_dodal-1.31.0.dist-info}/top_level.txt +0 -0
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
from bluesky import plan_stubs as bps
|
|
2
2
|
from bluesky import preprocessors as bpp
|
|
3
3
|
from bluesky.utils import make_decorator
|
|
4
|
-
from ophyd_async.core import DirectoryInfo
|
|
5
4
|
|
|
6
5
|
from dodal.common.beamlines import beamline_utils
|
|
7
|
-
from dodal.common.types import MsgGenerator,
|
|
6
|
+
from dodal.common.types import MsgGenerator, UpdatingPathProvider
|
|
8
7
|
|
|
9
8
|
DATA_SESSION = "data_session"
|
|
10
9
|
DATA_GROUPS = "data_groups"
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
def attach_data_session_metadata_wrapper(
|
|
14
|
-
plan: MsgGenerator, provider:
|
|
13
|
+
plan: MsgGenerator, provider: UpdatingPathProvider | None = None
|
|
15
14
|
) -> MsgGenerator:
|
|
16
15
|
"""
|
|
17
16
|
Attach data session metadata to the runs within a plan and make it correlate
|
|
18
|
-
with an ophyd-async
|
|
17
|
+
with an ophyd-async PathProvider.
|
|
19
18
|
|
|
20
|
-
This updates the
|
|
19
|
+
This updates the path provider (which in turn makes a call to to a service
|
|
21
20
|
to figure out which scan number we are using for such a scan), and ensures the
|
|
22
21
|
start document contains the correct data session.
|
|
23
22
|
|
|
24
23
|
Args:
|
|
25
24
|
plan: The plan to preprocess
|
|
26
|
-
provider: The
|
|
25
|
+
provider: The path provider that participating detectors are aware of.
|
|
27
26
|
|
|
28
27
|
Returns:
|
|
29
28
|
MsgGenerator: A plan
|
|
@@ -32,12 +31,12 @@ def attach_data_session_metadata_wrapper(
|
|
|
32
31
|
Iterator[Msg]: Plan messages
|
|
33
32
|
"""
|
|
34
33
|
if provider is None:
|
|
35
|
-
provider = beamline_utils.
|
|
34
|
+
provider = beamline_utils.get_path_provider()
|
|
36
35
|
yield from bps.wait_for([provider.update])
|
|
37
|
-
|
|
36
|
+
ress = yield from bps.wait_for([provider.data_session])
|
|
37
|
+
data_session = ress[0].result()
|
|
38
38
|
# https://github.com/DiamondLightSource/dodal/issues/452
|
|
39
39
|
# As part of 452, write each dataCollection into their own folder, then can use resource_dir directly
|
|
40
|
-
data_session = directory_info.prefix.removesuffix("-")
|
|
41
40
|
yield from bpp.inject_md_wrapper(plan, md={DATA_SESSION: data_session})
|
|
42
41
|
|
|
43
42
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
from collections.abc import Generator
|
|
3
|
+
from typing import Any, TypeVar
|
|
4
|
+
|
|
5
|
+
from bluesky import plan_stubs as bps
|
|
6
|
+
from bluesky.preprocessors import finalize_wrapper, pchain
|
|
7
|
+
from bluesky.utils import Msg, make_decorator
|
|
8
|
+
from ophyd_async.core import Device
|
|
9
|
+
from ophyd_async.epics.motor import Motor
|
|
10
|
+
|
|
11
|
+
from dodal.common import MsgGenerator
|
|
12
|
+
|
|
13
|
+
AnyDevice = TypeVar("AnyDevice", bound=Device)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class MoveTooLarge(Exception):
|
|
17
|
+
def __init__(
|
|
18
|
+
self, axis: Device, maximum_move: float, position: float, *args: object
|
|
19
|
+
) -> None:
|
|
20
|
+
self.axis = axis
|
|
21
|
+
self.maximum_move = maximum_move
|
|
22
|
+
self.position = position
|
|
23
|
+
super().__init__(*args)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _check_and_cache_values(
|
|
27
|
+
devices_and_positions: dict[AnyDevice, float],
|
|
28
|
+
smallest_move: float,
|
|
29
|
+
maximum_move: float,
|
|
30
|
+
) -> Generator[Msg, Any, dict[AnyDevice, float]]:
|
|
31
|
+
"""Caches the positions of all Motors on specified device if they are within
|
|
32
|
+
smallest_move of home_position. Throws MoveTooLarge if they are outside maximum_move
|
|
33
|
+
of the home_position
|
|
34
|
+
"""
|
|
35
|
+
positions = {}
|
|
36
|
+
for axis, new_position in devices_and_positions.items():
|
|
37
|
+
position = yield from bps.rd(axis)
|
|
38
|
+
if abs(position - new_position) > maximum_move:
|
|
39
|
+
raise MoveTooLarge(axis, maximum_move, position)
|
|
40
|
+
if abs(position - new_position) > smallest_move:
|
|
41
|
+
positions[axis] = position
|
|
42
|
+
return positions
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def home_and_reset_wrapper(
|
|
46
|
+
plan: MsgGenerator,
|
|
47
|
+
device: Device,
|
|
48
|
+
smallest_move: float,
|
|
49
|
+
maximum_move: float,
|
|
50
|
+
group: str | None = None,
|
|
51
|
+
wait_for_all: bool = True,
|
|
52
|
+
) -> MsgGenerator:
|
|
53
|
+
home_positions = {
|
|
54
|
+
axis: 0.0 for _, axis in device.children() if isinstance(axis, Motor)
|
|
55
|
+
}
|
|
56
|
+
return move_and_reset_wrapper(
|
|
57
|
+
plan, home_positions, smallest_move, maximum_move, group, wait_for_all
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def move_and_reset_wrapper(
|
|
62
|
+
plan: MsgGenerator,
|
|
63
|
+
device_and_positions: dict[AnyDevice, float],
|
|
64
|
+
smallest_move: float,
|
|
65
|
+
maximum_move: float,
|
|
66
|
+
group: str | None = None,
|
|
67
|
+
wait_for_all: bool = True,
|
|
68
|
+
) -> MsgGenerator:
|
|
69
|
+
"""Wrapper that does the following:
|
|
70
|
+
1. Caches the positions of all Motors on device
|
|
71
|
+
2. Throws a MoveTooLarge exception if any positions are maximum_move away from home_position
|
|
72
|
+
2. Moves any motor that is more than smallest_move away from the home_position to home_position
|
|
73
|
+
3. Runs the specified plan
|
|
74
|
+
4. Moves all motors back to their cached positions
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
plan (Callable[[], MsgGenerator]): The plan to move between homing and returning to the cache
|
|
78
|
+
device (Device): The device to move. All Motors in the device will be cached and moved
|
|
79
|
+
smallest_move (float): The smallest move that we care about doing the home and cache for.
|
|
80
|
+
Useful for not wearing out motors if you have large tolerances
|
|
81
|
+
maximum_move (float): If any Motor starts this far from the home an exception is raised
|
|
82
|
+
and no moves occur
|
|
83
|
+
home_position (float): The position to move every motor to after caching
|
|
84
|
+
group (str, optional): If set the home move will be done using the home-{group}
|
|
85
|
+
group and the reset to cache done using reset-{group}
|
|
86
|
+
wait_for_all (bool, optional): If true the home and reset to cache will be waited
|
|
87
|
+
on. If false it is left up to the caller to wait on
|
|
88
|
+
them. Defaults to True.
|
|
89
|
+
"""
|
|
90
|
+
initial_positions = yield from _check_and_cache_values(
|
|
91
|
+
device_and_positions, smallest_move, maximum_move
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
def move_to_home():
|
|
95
|
+
home_group = f"home-{group if group else str(uuid.uuid4())[:6]}"
|
|
96
|
+
for axis, position in device_and_positions.items():
|
|
97
|
+
if axis in initial_positions.keys():
|
|
98
|
+
yield from bps.abs_set(axis, position, group=home_group)
|
|
99
|
+
if wait_for_all:
|
|
100
|
+
yield from bps.wait(home_group)
|
|
101
|
+
|
|
102
|
+
def return_to_initial_position():
|
|
103
|
+
reset_group = f"reset-{group if group else str(uuid.uuid4())[:6]}"
|
|
104
|
+
for axis, position in initial_positions.items():
|
|
105
|
+
yield from bps.abs_set(axis, position, group=reset_group)
|
|
106
|
+
if wait_for_all:
|
|
107
|
+
yield from bps.wait(reset_group)
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
yield from finalize_wrapper(
|
|
111
|
+
pchain(move_to_home(), plan),
|
|
112
|
+
return_to_initial_position(),
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
home_and_reset_decorator = make_decorator(home_and_reset_wrapper)
|
dodal/utils.py
CHANGED
|
@@ -4,6 +4,7 @@ import os
|
|
|
4
4
|
import re
|
|
5
5
|
import socket
|
|
6
6
|
import string
|
|
7
|
+
from collections.abc import Callable, Iterable, Mapping
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from functools import wraps
|
|
9
10
|
from importlib import import_module
|
|
@@ -12,13 +13,6 @@ from os import environ
|
|
|
12
13
|
from types import ModuleType
|
|
13
14
|
from typing import (
|
|
14
15
|
Any,
|
|
15
|
-
Callable,
|
|
16
|
-
Dict,
|
|
17
|
-
Iterable,
|
|
18
|
-
List,
|
|
19
|
-
Mapping,
|
|
20
|
-
Tuple,
|
|
21
|
-
Type,
|
|
22
16
|
TypeVar,
|
|
23
17
|
)
|
|
24
18
|
|
|
@@ -46,7 +40,7 @@ import dodal.log
|
|
|
46
40
|
try:
|
|
47
41
|
from typing import TypeAlias
|
|
48
42
|
except ImportError:
|
|
49
|
-
from
|
|
43
|
+
from typing import TypeAlias
|
|
50
44
|
|
|
51
45
|
|
|
52
46
|
#: Protocols defining interface to hardware
|
|
@@ -108,9 +102,35 @@ def skip_device(precondition=lambda: True):
|
|
|
108
102
|
return decorator
|
|
109
103
|
|
|
110
104
|
|
|
105
|
+
def make_device(
|
|
106
|
+
module: str | ModuleType,
|
|
107
|
+
device_name: str,
|
|
108
|
+
**kwargs,
|
|
109
|
+
) -> dict[str, AnyDevice]:
|
|
110
|
+
"""Make a single named device and its dependencies from the given beamline module.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
module (str | ModuleType): The module to make devices from.
|
|
114
|
+
device_name: Name of the device to construct
|
|
115
|
+
**kwargs: Arguments passed on to every device factory
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
dict[str, AnyDevice]: A dict mapping device names to the constructed devices
|
|
119
|
+
"""
|
|
120
|
+
if isinstance(module, str):
|
|
121
|
+
module = import_module(module)
|
|
122
|
+
|
|
123
|
+
device_collector = {}
|
|
124
|
+
factories = collect_factories(module)
|
|
125
|
+
device_collector[device_name] = _make_one_device(
|
|
126
|
+
module, device_name, device_collector, factories, **kwargs
|
|
127
|
+
)
|
|
128
|
+
return device_collector
|
|
129
|
+
|
|
130
|
+
|
|
111
131
|
def make_all_devices(
|
|
112
132
|
module: str | ModuleType | None = None, include_skipped: bool = False, **kwargs
|
|
113
|
-
) ->
|
|
133
|
+
) -> tuple[dict[str, AnyDevice], dict[str, Exception]]:
|
|
114
134
|
"""Makes all devices in the given beamline module.
|
|
115
135
|
|
|
116
136
|
In cases of device interdependencies it ensures a device is created before any which
|
|
@@ -129,7 +149,7 @@ def make_all_devices(
|
|
|
129
149
|
if isinstance(module, str) or module is None:
|
|
130
150
|
module = import_module(module or __name__)
|
|
131
151
|
factories = collect_factories(module, include_skipped)
|
|
132
|
-
devices:
|
|
152
|
+
devices: tuple[dict[str, AnyDevice], dict[str, Exception]] = invoke_factories(
|
|
133
153
|
factories, **kwargs
|
|
134
154
|
)
|
|
135
155
|
|
|
@@ -139,7 +159,7 @@ def make_all_devices(
|
|
|
139
159
|
def invoke_factories(
|
|
140
160
|
factories: Mapping[str, AnyDeviceFactory],
|
|
141
161
|
**kwargs,
|
|
142
|
-
) ->
|
|
162
|
+
) -> tuple[dict[str, AnyDevice], dict[str, Exception]]:
|
|
143
163
|
"""Call device factory functions in the correct order to resolve dependencies.
|
|
144
164
|
Inspect function signatures to work out dependencies and execute functions in
|
|
145
165
|
correct order.
|
|
@@ -259,15 +279,13 @@ def is_any_device_factory(func: Callable) -> bool:
|
|
|
259
279
|
return is_v1_device_factory(func) or is_v2_device_factory(func)
|
|
260
280
|
|
|
261
281
|
|
|
262
|
-
def is_v2_device_type(obj:
|
|
263
|
-
return inspect.isclass(obj) and
|
|
282
|
+
def is_v2_device_type(obj: type[Any]) -> bool:
|
|
283
|
+
return inspect.isclass(obj) and isinstance(obj, OphydV2Device)
|
|
264
284
|
|
|
265
285
|
|
|
266
|
-
def is_v1_device_type(obj:
|
|
286
|
+
def is_v1_device_type(obj: type[Any]) -> bool:
|
|
267
287
|
is_class = inspect.isclass(obj)
|
|
268
|
-
follows_protocols = any(
|
|
269
|
-
(isinstance(obj, protocol) for protocol in BLUESKY_PROTOCOLS)
|
|
270
|
-
)
|
|
288
|
+
follows_protocols = any(isinstance(obj, protocol) for protocol in BLUESKY_PROTOCOLS)
|
|
271
289
|
return is_class and follows_protocols and not is_v2_device_type(obj)
|
|
272
290
|
|
|
273
291
|
|
|
@@ -292,13 +310,11 @@ def get_beamline_based_on_environment_variable() -> ModuleType:
|
|
|
292
310
|
or any(c not in valid_characters for c in beamline)
|
|
293
311
|
):
|
|
294
312
|
raise ValueError(
|
|
295
|
-
"Invalid BEAMLINE variable - module name is not a permissible python module name, got '{}'"
|
|
296
|
-
beamline
|
|
297
|
-
)
|
|
313
|
+
f"Invalid BEAMLINE variable - module name is not a permissible python module name, got '{beamline}'"
|
|
298
314
|
)
|
|
299
315
|
|
|
300
316
|
try:
|
|
301
|
-
return importlib.import_module("dodal.beamlines.{}"
|
|
317
|
+
return importlib.import_module(f"dodal.beamlines.{beamline}")
|
|
302
318
|
except ImportError as e:
|
|
303
319
|
raise ValueError(
|
|
304
320
|
f"Failed to import beamline-specific dodal module 'dodal.beamlines.{beamline}'."
|
|
@@ -306,7 +322,7 @@ def get_beamline_based_on_environment_variable() -> ModuleType:
|
|
|
306
322
|
) from e
|
|
307
323
|
|
|
308
324
|
|
|
309
|
-
def _find_next_run_number_from_files(file_names:
|
|
325
|
+
def _find_next_run_number_from_files(file_names: list[str]) -> int:
|
|
310
326
|
valid_numbers = []
|
|
311
327
|
|
|
312
328
|
for file_name in file_names:
|
|
@@ -336,3 +352,30 @@ def get_run_number(directory: str, prefix: str = "") -> int:
|
|
|
336
352
|
return 1
|
|
337
353
|
else:
|
|
338
354
|
return _find_next_run_number_from_files(nexus_file_names)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def _make_one_device(
|
|
358
|
+
module: ModuleType,
|
|
359
|
+
device_name: str,
|
|
360
|
+
devices: dict[str, AnyDevice],
|
|
361
|
+
factories: dict[str, AnyDeviceFactory],
|
|
362
|
+
**kwargs,
|
|
363
|
+
) -> AnyDevice:
|
|
364
|
+
factory = factories.get(device_name)
|
|
365
|
+
if not factory:
|
|
366
|
+
raise ValueError(f"Unable to find factory for {device_name}")
|
|
367
|
+
|
|
368
|
+
dependencies = list(extract_dependencies(factories, device_name))
|
|
369
|
+
for dependency_name in dependencies:
|
|
370
|
+
if dependency_name not in devices:
|
|
371
|
+
try:
|
|
372
|
+
devices[dependency_name] = _make_one_device(
|
|
373
|
+
module, dependency_name, devices, factories, **kwargs
|
|
374
|
+
)
|
|
375
|
+
except Exception as e:
|
|
376
|
+
raise RuntimeError(
|
|
377
|
+
f"Unable to construct device {dependency_name}"
|
|
378
|
+
) from e
|
|
379
|
+
|
|
380
|
+
params = {name: devices[name] for name in dependencies}
|
|
381
|
+
return factory(**params, **kwargs)
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
dodal/__init__.py,sha256=y-VRpfiX-Lm5nchB9N0VfMy_6dwFqVxpSn5SiAQql9I,114
|
|
2
|
-
dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
|
|
3
|
-
dodal/_version.py,sha256=dGQcJRhmSkKpwrkZVgo13Sd0AVHTIBb9i0csee9mzMo,413
|
|
4
|
-
dodal/adsim.py,sha256=OW2dcS7ciD4Yq9WFw4PN_c5Bwccrmu7R-zr-u6ZCbQM,497
|
|
5
|
-
dodal/cli.py,sha256=z0UBESrNrq6Kq4rttp4uHcwS1fnOnRkKBRDHSriPpGY,2058
|
|
6
|
-
dodal/log.py,sha256=dfo1rfYrGG8oIm2HkNxaa_ldVs4vJKtgWSoKe1Z_Xno,8533
|
|
7
|
-
dodal/utils.py,sha256=SFDmUOLtxLe5OdNdVgS_EftNpX0ihxduBwq6tufw8s4,10174
|
|
8
|
-
dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
dodal/beamline_specific_utils/i03.py,sha256=Ixe1anFQl-kwRJubmQx28TIW4Zw8qDxpElNNNapWQHI,396
|
|
10
|
-
dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
|
|
11
|
-
dodal/beamlines/__init__.py,sha256=U0dQYFEUloCdQOs24zyfpPTncJXOO4cDcfHSevVOAw4,2890
|
|
12
|
-
dodal/beamlines/i03.py,sha256=J-4GawTxAhrYDQZh87n11L9ehTgObEQ1Lz2PueXCWbc,16892
|
|
13
|
-
dodal/beamlines/i04.py,sha256=JOyNcUnC3wva4no2MHKp6b8gOKAcQXL_c4cBo7oneVs,13034
|
|
14
|
-
dodal/beamlines/i04_1.py,sha256=KDxSUQNhIs_NFiRaLY-Jiory0DeN7Y0ErvGuoTrwCDU,4731
|
|
15
|
-
dodal/beamlines/i20_1.py,sha256=MaPgONHqpoZuBtkiKEzYtViJnKBM2_ekeP4OdbmuXHE,1158
|
|
16
|
-
dodal/beamlines/i22.py,sha256=3VFdA4Wc7O40-64lwUtUBIN23fH4JVNbLKJ1JLjy9as,9870
|
|
17
|
-
dodal/beamlines/i23.py,sha256=2j5qLoqE_hg9ETHqNkOVu7LLkVB8qalgXeORnVYKN_I,1075
|
|
18
|
-
dodal/beamlines/i24.py,sha256=tPSrWArwRd0fb59HyHFRGR1FdscM7t9_hNPk0edhh4o,6583
|
|
19
|
-
dodal/beamlines/p38.py,sha256=TC78u4GwEnj6X0r5cnHhqNdBbbDRnh8lY8pEucBZjEU,8006
|
|
20
|
-
dodal/beamlines/p45.py,sha256=TNIkC-SBfj0ayZtlLLXW9xCSi5CzJkO8XpAMIo8fjao,2957
|
|
21
|
-
dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
|
|
22
|
-
dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
|
|
23
|
-
dodal/common/maths.py,sha256=JRSBhbMzwlicKp1_Bsfu9gA79JJA_Dgq9EpbExFH65M,1829
|
|
24
|
-
dodal/common/types.py,sha256=M0gZs9F7--gREF8VYJn-Y1Mt9mIEgp1aLY3oUpUkSno,546
|
|
25
|
-
dodal/common/udc_directory_provider.py,sha256=zNlt_VgdAlyBtVN7neTHk_0tWBbI4pPUL7q9WQOzXvo,1260
|
|
26
|
-
dodal/common/visit.py,sha256=MhrFbLptMG0Wvd2nHubBwQ44qAzoP4Bf4_z_-wO8rh0,6063
|
|
27
|
-
dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
dodal/common/beamlines/beamline_parameters.py,sha256=N22dtDLw3Hlo7EUmGxe4qFGcu7OnldwCz_mU7yK2rd0,3577
|
|
29
|
-
dodal/common/beamlines/beamline_utils.py,sha256=AgmH9wpnFQ4DHAA7_Yo0COa2piX2ksFxukFt2_600kA,4488
|
|
30
|
-
dodal/common/beamlines/device_helpers.py,sha256=s79js7no9k8JMfG7NvdmFomSP5m5VDQ6th_Hsbx1znA,939
|
|
31
|
-
dodal/devices/CTAB.py,sha256=_MfL_KH4uDPxq_RuHFEZ9HVXOpUnQb5be3csoz9DdAs,1630
|
|
32
|
-
dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
dodal/devices/adsim.py,sha256=dMU0TKIuiODHYFHQOH4_5UvB8iJtaJEtjqaEDGjcU-w,311
|
|
34
|
-
dodal/devices/aperture.py,sha256=0MtTzKMDZ5DVAz0DE0kXI0M76VCp0y9vFsrMggEMpxk,586
|
|
35
|
-
dodal/devices/aperturescatterguard.py,sha256=2JJsEPJGJHrI0ztv1cSaP7H5T6qdzDfUcN-VEQ39B8o,11012
|
|
36
|
-
dodal/devices/attenuator.py,sha256=viK1iccNekX6ZvR_ZmSwj5JdM1j2B8pcTg8qWDdmzhQ,2584
|
|
37
|
-
dodal/devices/backlight.py,sha256=vsNGZB4C_mVMafllvJlOTghsfv6UqALMKUMLXu3WZ5k,1115
|
|
38
|
-
dodal/devices/beamstop.py,sha256=8L3qhlk-3ZBOp10xK1i8qZqYTGOXX1mVF1MgXoN0dfg,215
|
|
39
|
-
dodal/devices/cryostream.py,sha256=6MU4rXIOL33C-8F3DVfAtv0ZnwiysTtawjkeePd5IrQ,332
|
|
40
|
-
dodal/devices/dcm.py,sha256=vfyGYDzfSwTiNqlzkfNjkrL-Q1hNVSgJddvJ5Un_lvg,1610
|
|
41
|
-
dodal/devices/eiger.py,sha256=HpZIZ6Y8iffo9GxmuFJmnyRCa5Tl0BKSKU2_wVccHDo,14069
|
|
42
|
-
dodal/devices/eiger_odin.py,sha256=zKNu5OaIQ9HkflfxKCi87Yr1kEG2gXfxzj0KPv0XzCk,6960
|
|
43
|
-
dodal/devices/fast_grid_scan.py,sha256=BEj96j78r60JPPJoOMP-XXG-_9yURFTuu-pp2LcqQmY,12452
|
|
44
|
-
dodal/devices/fluorescence_detector_motion.py,sha256=RrXfPmJzWnAjcjp9u0AnJEfjvWPMKburVTySB2hxYbw,181
|
|
45
|
-
dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
|
|
46
|
-
dodal/devices/focusing_mirror.py,sha256=v6TPglvmHiv9H05Lssv1LY5Nr9RBHQISLzL4SJ_QIbk,5890
|
|
47
|
-
dodal/devices/hutch_shutter.py,sha256=nZ3gRbYIVJsXLlpZMWT4UEYUFFQP1MwMe8Oy304QsqE,3360
|
|
48
|
-
dodal/devices/ipin.py,sha256=OGMXwAE4KDDonZRPFkUmR9Vsk6X4Ox-hEvPT5drP-mQ,208
|
|
49
|
-
dodal/devices/linkam3.py,sha256=TPhiQ1D9i_HIlKHAlfnVfX7H6aPOAeXPEJLdmvwdKWQ,3776
|
|
50
|
-
dodal/devices/logging_ophyd_device.py,sha256=xw4lbyqq5_ehESGterVEfubJsBiJTWvBp5b9k62gSkg,666
|
|
51
|
-
dodal/devices/motors.py,sha256=16ID2jFJ35h6ZrFp76nJG_oQg6uDrupgcbvcbmjlc7c,300
|
|
52
|
-
dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
|
|
53
|
-
dodal/devices/qbpm1.py,sha256=OY7-WbdxMiLGUK8Z57ezwqSXbHxoPP-y3GvBgj9kgMA,220
|
|
54
|
-
dodal/devices/robot.py,sha256=5WQ9kF5m8xhHhipBycsycDV0-_2IBNBkcwuSWP-9-1I,4337
|
|
55
|
-
dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
|
|
56
|
-
dodal/devices/scatterguard.py,sha256=0qnvhoo3RjLsrxVgIoDJpryqunlgMVgaTsoyKRC2g4Y,331
|
|
57
|
-
dodal/devices/scintillator.py,sha256=4Dej1a6HRom9GRwTDsaTKGfvloP20POUqIeHqsI8-R8,184
|
|
58
|
-
dodal/devices/slits.py,sha256=URru9VN2N19KqeUPDZaBmyKYn0_JJiE0Vko4sZpfsl8,601
|
|
59
|
-
dodal/devices/smargon.py,sha256=Ds8QFqK3ljbTxalqkQ6clpArj4u4hu9d4vrt97Fzdf4,4693
|
|
60
|
-
dodal/devices/status.py,sha256=TuUGidZ4Ar-WCRc_sX0wn58DmL6brj1pMr8rNF5Z6VU,1198
|
|
61
|
-
dodal/devices/synchrotron.py,sha256=QtTufJA_fCaBawHougSc7nxwu240oX46_y0P-4qIW8o,1960
|
|
62
|
-
dodal/devices/tetramm.py,sha256=XriN-zBFVnHxhnTbphSPIZcxEbdWBTbw2g_ulUBl4bw,8538
|
|
63
|
-
dodal/devices/thawer.py,sha256=hIdZOzCNloY7CtSvdE2gk4vCMMoOtaIA4dPH_k0OwFg,1527
|
|
64
|
-
dodal/devices/turbo_slit.py,sha256=W3ZRIqDhq4iMhr5GcIiWvl2U1GaPtGanqkL7upQOZTY,1132
|
|
65
|
-
dodal/devices/undulator.py,sha256=kn84MQpuBHtQj7H7HeBoAYKXu5buGKvTgs3tf2gdEdw,2074
|
|
66
|
-
dodal/devices/undulator_dcm.py,sha256=TC9fO55r1YIG_88PPbGGtzfjcRJcaoC2ny51JiDOEX4,5199
|
|
67
|
-
dodal/devices/webcam.py,sha256=dvNWJ6hHQR7BUsMRC9TH4XiCCofVhlgZ8HYfVCvd2og,1367
|
|
68
|
-
dodal/devices/xbpm_feedback.py,sha256=8QHYKHo9ksZo30olbFM-tHpCHcJRFozgHKVJijv3Gck,1986
|
|
69
|
-
dodal/devices/zebra.py,sha256=9Zkq5I3-gcP6qfDBnPEAtFU4QJ-VJyp7cHvB79ZfLHk,9186
|
|
70
|
-
dodal/devices/zebra_controlled_shutter.py,sha256=MqX4KE6w0FliZRDBltswcLCNSsp6vQrD_iBY640IljI,1094
|
|
71
|
-
dodal/devices/areadetector/__init__.py,sha256=8IwLxuZMW0MOJpJp_ZDdlaE20hrtsH_PXWGaKgMiYs4,240
|
|
72
|
-
dodal/devices/areadetector/adaravis.py,sha256=pwbmmnakarjhD59XoyAIXJdakS-nqDG09Xmwq17AVw4,3787
|
|
73
|
-
dodal/devices/areadetector/adsim.py,sha256=3U7kS93RM3Xeh-XWKjeuw5jXbIGWAbrs59LfxtvB7OU,1907
|
|
74
|
-
dodal/devices/areadetector/adutils.py,sha256=JIx1_sYlehpLtEXcwOEuzVoMplsLdKVW7OWv5eiJqgE,2576
|
|
75
|
-
dodal/devices/areadetector/plugins/MJPG.py,sha256=2ISGUg9JxJYzEH640WUIsvFwKolSTywkTyPy9wz6f_k,4064
|
|
76
|
-
dodal/devices/detector/__init__.py,sha256=XEwjopgTtBq93RRuFthVVVI9DT1jUvpOJzWOHantJpU,104
|
|
77
|
-
dodal/devices/detector/det_dim_constants.py,sha256=MZ4w2nsTKzj4eN7yGsSs1pqKWIuU4vc6UzcSll02uWg,2305
|
|
78
|
-
dodal/devices/detector/det_dist_to_beam_converter.py,sha256=f6JFp-eEB2v8NzZg27UrN0VDP5CMjRnaPU6BTA7_n_s,1937
|
|
79
|
-
dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
|
|
80
|
-
dodal/devices/detector/detector.py,sha256=7IYhndhT9CYCft0MrN1mAnopHqKYbaCRPRGLic76srw,4740
|
|
81
|
-
dodal/devices/detector/detector_motion.py,sha256=REREva2kyPcIzOZmahN9rT0jDSuUbV0qUDl4IcBnutA,1221
|
|
82
|
-
dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
|
|
84
|
-
dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
|
-
dodal/devices/i22/dcm.py,sha256=Kzyd_qFg8KVhRsgfTQVOpghESE8yIOgACKa0Fv9NaZI,6270
|
|
86
|
-
dodal/devices/i22/fswitch.py,sha256=AdYtnkCBuhivyJGZqelg_7sjB2pHN7vl1JTtlO4vHo4,3061
|
|
87
|
-
dodal/devices/i22/nxsas.py,sha256=ky7v9UZ1UQFsm5hI0wD9OXG-fTKFLj2wJjB7wADxKpw,5655
|
|
88
|
-
dodal/devices/i24/I24_detector_motion.py,sha256=Joqr1orgeNvRS7n01bjaO-4Yu4obb8fnKaWHQfjPX14,365
|
|
89
|
-
dodal/devices/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
-
dodal/devices/i24/aperture.py,sha256=kKfHli5oKp-j-qZhZoXTRK81SAUNyhpI6VRvtw0SkZA,850
|
|
91
|
-
dodal/devices/i24/beamstop.py,sha256=28hQowTvgN5Zw38tkDh32h2ceyN-2GE8bAaGPvDOt5U,1234
|
|
92
|
-
dodal/devices/i24/dcm.py,sha256=Hx5pQ-SHEQ_bLCOnpQYDm6-t-it7nNDmUvopGyiGA2w,1991
|
|
93
|
-
dodal/devices/i24/dual_backlight.py,sha256=Th-RKr28aFxE8LCT_mdN9KkRIVw0BHLGKkI0ienfRZU,2049
|
|
94
|
-
dodal/devices/i24/i24_vgonio.py,sha256=Igqs7687z6lyhGVeJEDtDmPachYxU48MUH2BF0RpK9Q,461
|
|
95
|
-
dodal/devices/i24/pmac.py,sha256=pN54myYvzqPl7iW0Vsp59J1EiV_gtn0xQGwbsKJpiYE,3876
|
|
96
|
-
dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
97
|
-
dodal/devices/oav/grid_overlay.py,sha256=FRtjcFd420XY8MEQ9sWedL0i4pK-KUJOSxh2C5zM3PA,5232
|
|
98
|
-
dodal/devices/oav/microns_for_zoom_levels.json,sha256=5PA71RzldFTp0eTUGPmov0MjxHe583mzvfor5f3thXI,1208
|
|
99
|
-
dodal/devices/oav/oav_calculations.py,sha256=wt71vFcyQrr98FvX8oyUM2n5vmKi3K7PyOTuWp0gq5w,1665
|
|
100
|
-
dodal/devices/oav/oav_detector.py,sha256=PlRIuMYSk46o6Aywel9tMZYh1WzMaBhfn3_GWqCas7w,3681
|
|
101
|
-
dodal/devices/oav/oav_errors.py,sha256=cc4mGnaTiAc5WIlOt_BIYOc7CRSkrCdnBaavfAJ0pXY,754
|
|
102
|
-
dodal/devices/oav/oav_parameters.py,sha256=4XybkhKeG7IEjPRfx0PVM9KNenuyN0rAGWBZG7H3zvQ,7941
|
|
103
|
-
dodal/devices/oav/utils.py,sha256=BkTk0aTqqhIHCZInhcUAYjCRPxumPOlTg9m21skncTc,3018
|
|
104
|
-
dodal/devices/oav/pin_image_recognition/__init__.py,sha256=Eve6oY9EYGOSw1x-N--xjgyIEzbZE7TTwGR-Q2NZprQ,6441
|
|
105
|
-
dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
|
|
106
|
-
dodal/devices/oav/pin_image_recognition/utils.py,sha256=-7-Zs-331UVTq_AZrfdF-zwZdmMn7eitTkBSqnBrxnk,8620
|
|
107
|
-
dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
108
|
-
dodal/devices/util/adjuster_plans.py,sha256=2AYaywQP_LbA2KJ6Op3cok8GoRtj696utrSSDfaJtBY,875
|
|
109
|
-
dodal/devices/util/epics_util.py,sha256=4AOGqYjF0ITzs4c7PTZZnHge81Zheg4gZbFonVW7Lko,4728
|
|
110
|
-
dodal/devices/util/lookup_tables.py,sha256=Up-0BlARt79TIEM76SkDyn9LtTFLxPUcaEPZv6D6bws,2141
|
|
111
|
-
dodal/devices/util/motor_utils.py,sha256=pNY-aUk9LxaIWeDr5rpMS6udiB9j19wcCXkNDLp1uA0,257
|
|
112
|
-
dodal/devices/xspress3/xspress3.py,sha256=29elzI3JtceryKeMWXhcP9nWl0tlSdnTZhltCitet6A,4668
|
|
113
|
-
dodal/devices/xspress3/xspress3_channel.py,sha256=yJRwseLmtkW2Vv6GB8sLdOFuBn3e4c9Q8fgPacMgl5w,1638
|
|
114
|
-
dodal/devices/zocalo/__init__.py,sha256=oPhjFB39yf2NWkGD-MMcPFnnOVZ_RtdyBt2OLYn-Xa4,505
|
|
115
|
-
dodal/devices/zocalo/zocalo_interaction.py,sha256=B6TBTDwUlluksLTwC4TiEEgfFzWLOmwgG8xM5Xd4Wik,3132
|
|
116
|
-
dodal/devices/zocalo/zocalo_results.py,sha256=U4Vk4OF-eL8w0BR-fbw3k4jyRo6G3Ywaf8NMAkjr4Hs,9658
|
|
117
|
-
dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
|
|
118
|
-
dodal/plans/check_topup.py,sha256=Pj6Eu8fa6nvoW4awrMxvzE_ftpLfYz8bN0QDLRw0Yuk,2989
|
|
119
|
-
dodal/plans/data_session_metadata.py,sha256=QNx9rb1EfGBHb21eFekIi7KjNhC0PL-SVKBCggDuNeg,1650
|
|
120
|
-
dls_dodal-1.29.4.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
121
|
-
dls_dodal-1.29.4.dist-info/METADATA,sha256=biJK1f1BESw8LgPh4Rl0GrxC9cMJ2WCYxP5NqGPBzak,16950
|
|
122
|
-
dls_dodal-1.29.4.dist-info/WHEEL,sha256=-oYQCr74JF3a37z2nRlQays_SX2MqOANoqVjBBAP2yE,91
|
|
123
|
-
dls_dodal-1.29.4.dist-info/entry_points.txt,sha256=wpzz9FsTiYxI8OBwLKX9V9ResLwThBSmtRMcPwII0FA,46
|
|
124
|
-
dls_dodal-1.29.4.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
|
|
125
|
-
dls_dodal-1.29.4.dist-info/RECORD,,
|
dodal/devices/beamstop.py
DELETED
dodal/devices/qbpm1.py
DELETED
|
File without changes
|
|
File without changes
|