dls-dodal 1.34.1__py3-none-any.whl → 1.36.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.
Files changed (81) hide show
  1. {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/METADATA +4 -2
  2. dls_dodal-1.36.0.dist-info/RECORD +152 -0
  3. {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/WHEEL +1 -1
  4. dodal/_version.py +2 -2
  5. dodal/beamlines/i22.py +24 -11
  6. dodal/beamlines/i24.py +4 -4
  7. dodal/beamlines/p38.py +23 -11
  8. dodal/common/beamlines/beamline_utils.py +1 -2
  9. dodal/common/crystal_metadata.py +61 -0
  10. dodal/common/signal_utils.py +10 -14
  11. dodal/devices/CTAB.py +1 -1
  12. dodal/devices/aperture.py +1 -1
  13. dodal/devices/aperturescatterguard.py +20 -8
  14. dodal/devices/apple2_undulator.py +30 -29
  15. dodal/devices/areadetector/plugins/CAM.py +3 -5
  16. dodal/devices/areadetector/plugins/MJPG.py +1 -1
  17. dodal/devices/attenuator.py +1 -1
  18. dodal/devices/backlight.py +4 -5
  19. dodal/devices/cryostream.py +3 -5
  20. dodal/devices/dcm.py +26 -2
  21. dodal/devices/detector/detector_motion.py +3 -5
  22. dodal/devices/diamond_filter.py +3 -4
  23. dodal/devices/eiger.py +88 -49
  24. dodal/devices/fast_grid_scan.py +1 -1
  25. dodal/devices/fluorescence_detector_motion.py +5 -7
  26. dodal/devices/focusing_mirror.py +12 -11
  27. dodal/devices/hutch_shutter.py +4 -5
  28. dodal/devices/i10/i10_apple2.py +20 -19
  29. dodal/devices/i10/i10_setting_data.py +2 -2
  30. dodal/devices/i22/dcm.py +43 -75
  31. dodal/devices/i22/fswitch.py +5 -5
  32. dodal/devices/i24/aperture.py +3 -5
  33. dodal/devices/i24/beamstop.py +3 -5
  34. dodal/devices/i24/dcm.py +1 -1
  35. dodal/devices/i24/dual_backlight.py +4 -6
  36. dodal/devices/i24/pmac.py +35 -46
  37. dodal/devices/i24/vgonio.py +16 -0
  38. dodal/devices/ipin.py +5 -3
  39. dodal/devices/linkam3.py +7 -7
  40. dodal/devices/oav/oav_detector.py +3 -3
  41. dodal/devices/oav/oav_to_redis_forwarder.py +8 -7
  42. dodal/devices/oav/pin_image_recognition/__init__.py +9 -7
  43. dodal/devices/oav/snapshots/grid_overlay.py +16 -16
  44. dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +5 -5
  45. dodal/devices/oav/snapshots/snapshot_with_grid.py +6 -6
  46. dodal/devices/oav/utils.py +2 -2
  47. dodal/devices/p99/sample_stage.py +3 -5
  48. dodal/devices/pgm.py +5 -6
  49. dodal/devices/qbpm.py +1 -1
  50. dodal/devices/robot.py +3 -3
  51. dodal/devices/smargon.py +1 -1
  52. dodal/devices/synchrotron.py +9 -4
  53. dodal/devices/tetramm.py +7 -7
  54. dodal/devices/thawer.py +13 -7
  55. dodal/devices/undulator.py +5 -5
  56. dodal/devices/util/epics_util.py +1 -1
  57. dodal/devices/watsonmarlow323_pump.py +45 -0
  58. dodal/devices/webcam.py +9 -2
  59. dodal/devices/xbpm_feedback.py +3 -5
  60. dodal/devices/xspress3/xspress3.py +8 -9
  61. dodal/devices/xspress3/xspress3_channel.py +3 -5
  62. dodal/devices/zebra.py +7 -6
  63. dodal/devices/zebra_controlled_shutter.py +5 -6
  64. dodal/devices/zocalo/__init__.py +2 -2
  65. dodal/devices/zocalo/zocalo_constants.py +3 -0
  66. dodal/devices/zocalo/zocalo_interaction.py +2 -1
  67. dodal/devices/zocalo/zocalo_results.py +92 -79
  68. dodal/plan_stubs/__init__.py +0 -0
  69. dodal/{plans/data_session_metadata.py → plan_stubs/data_session.py} +2 -2
  70. dodal/{plans/motor_util_plans.py → plan_stubs/motor_utils.py} +2 -2
  71. dodal/plan_stubs/wrapped.py +150 -0
  72. dodal/plans/__init__.py +4 -0
  73. dodal/plans/scanspec.py +66 -0
  74. dodal/plans/wrapped.py +57 -0
  75. dodal/utils.py +4 -0
  76. dls_dodal-1.34.1.dist-info/RECORD +0 -144
  77. dodal/devices/i24/i24_vgonio.py +0 -17
  78. {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/LICENSE +0 -0
  79. {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/entry_points.txt +0 -0
  80. {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/top_level.txt +0 -0
  81. /dodal/{plans → plan_stubs}/check_topup.py +0 -0
@@ -0,0 +1,150 @@
1
+ import itertools
2
+ from collections.abc import Mapping
3
+ from typing import Annotated, Any
4
+
5
+ import bluesky.plan_stubs as bps
6
+ from bluesky.protocols import Movable
7
+ from bluesky.utils import MsgGenerator
8
+
9
+ """
10
+ Wrappers for Bluesky built-in plan stubs with type hinting
11
+ """
12
+
13
+ Group = Annotated[str, "String identifier used by 'wait' or stubs that await"]
14
+
15
+
16
+ # After bluesky 1.14, bounds for stubs that move can be narrowed
17
+ # https://github.com/bluesky/bluesky/issues/1821
18
+ def set_absolute(
19
+ movable: Movable, value: Any, group: Group | None = None, wait: bool = False
20
+ ) -> MsgGenerator:
21
+ """
22
+ Set a device, wrapper for `bp.abs_set`.
23
+
24
+ Args:
25
+ movable (Movable): The device to set
26
+ value (T): The new value
27
+ group (Group | None, optional): The message group to associate with the
28
+ setting, for sequencing. Defaults to None.
29
+ wait (bool, optional): The group should wait until all setting is complete
30
+ (e.g. a motor has finished moving). Defaults to False.
31
+
32
+ Returns:
33
+ MsgGenerator: Plan
34
+
35
+ Yields:
36
+ Iterator[MsgGenerator]: Bluesky messages
37
+ """
38
+ return (yield from bps.abs_set(movable, value, group=group, wait=wait))
39
+
40
+
41
+ def set_relative(
42
+ movable: Movable, value: Any, group: Group | None = None, wait: bool = False
43
+ ) -> MsgGenerator:
44
+ """
45
+ Change a device, wrapper for `bp.rel_set`.
46
+
47
+ Args:
48
+ movable (Movable): The device to set
49
+ value (T): The new value
50
+ group (Group | None, optional): The message group to associate with the
51
+ setting, for sequencing. Defaults to None.
52
+ wait (bool, optional): The group should wait until all setting is complete
53
+ (e.g. a motor has finished moving). Defaults to False.
54
+
55
+ Returns:
56
+ MsgGenerator: Plan
57
+
58
+ Yields:
59
+ Iterator[MsgGenerator]: Bluesky messages
60
+ """
61
+
62
+ return (yield from bps.rel_set(movable, value, group=group, wait=wait))
63
+
64
+
65
+ def move(moves: Mapping[Movable, Any], group: Group | None = None) -> MsgGenerator:
66
+ """
67
+ Move a device, wrapper for `bp.mv`.
68
+
69
+ Args:
70
+ moves (Mapping[Movable, T]): Mapping of Movables to target positions
71
+ group (Group | None, optional): The message group to associate with the
72
+ setting, for sequencing. Defaults to None.
73
+
74
+ Returns:
75
+ MsgGenerator: Plan
76
+
77
+ Yields:
78
+ Iterator[MsgGenerator]: Bluesky messages
79
+ """
80
+
81
+ return (
82
+ # type ignore until https://github.com/bluesky/bluesky/issues/1809
83
+ yield from bps.mv(*itertools.chain.from_iterable(moves.items()), group=group) # type: ignore
84
+ )
85
+
86
+
87
+ def move_relative(
88
+ moves: Mapping[Movable, Any], group: Group | None = None
89
+ ) -> MsgGenerator:
90
+ """
91
+ Move a device relative to its current position, wrapper for `bp.mvr`.
92
+
93
+ Args:
94
+ moves (Mapping[Movable, T]): Mapping of Movables to target deltas
95
+ group (Group | None, optional): The message group to associate with the
96
+ setting, for sequencing. Defaults to None.
97
+
98
+ Returns:
99
+ MsgGenerator: Plan
100
+
101
+ Yields:
102
+ Iterator[MsgGenerator]: Bluesky messages
103
+ """
104
+
105
+ return (
106
+ # type ignore until https://github.com/bluesky/bluesky/issues/1809
107
+ yield from bps.mvr(*itertools.chain.from_iterable(moves.items()), group=group) # type: ignore
108
+ )
109
+
110
+
111
+ def sleep(time: float) -> MsgGenerator:
112
+ """
113
+ Suspend all action for a given time, wrapper for `bp.sleep`
114
+
115
+ Args:
116
+ time (float): Time to wait in seconds
117
+
118
+ Returns:
119
+ MsgGenerator: Plan
120
+
121
+ Yields:
122
+ Iterator[MsgGenerator]: Bluesky messages
123
+ """
124
+
125
+ return (yield from bps.sleep(time))
126
+
127
+
128
+ def wait(
129
+ group: Group | None = None,
130
+ timeout: float | None = None,
131
+ ) -> MsgGenerator:
132
+ """
133
+ Wait for a group status to complete, wrapper for `bp.wait`.
134
+ Does not expose move_on, as when used as a stub will not fail on Timeout.
135
+
136
+ Args:
137
+ group (Group | None, optional): The name of the group to wait for, defaults
138
+ to None, in which case waits for all
139
+ groups that have not yet been awaited.
140
+ timeout (float | None, default=None): a timeout in seconds
141
+
142
+
143
+ Returns:
144
+ MsgGenerator: Plan
145
+
146
+ Yields:
147
+ Iterator[MsgGenerator]: Bluesky messages
148
+ """
149
+
150
+ return (yield from bps.wait(group, timeout=timeout))
@@ -0,0 +1,4 @@
1
+ from .scanspec import spec_scan
2
+ from .wrapped import count
3
+
4
+ __all__ = ["count", "spec_scan"]
@@ -0,0 +1,66 @@
1
+ import operator
2
+ from functools import reduce
3
+ from typing import Annotated, Any
4
+
5
+ import bluesky.plans as bp
6
+ from bluesky.protocols import Movable, Readable
7
+ from cycler import Cycler, cycler
8
+ from pydantic import Field, validate_call
9
+ from scanspec.specs import Spec
10
+
11
+ from dodal.common import MsgGenerator
12
+ from dodal.plan_stubs.data_session import attach_data_session_metadata_decorator
13
+
14
+
15
+ @attach_data_session_metadata_decorator()
16
+ @validate_call(config={"arbitrary_types_allowed": True})
17
+ def spec_scan(
18
+ detectors: Annotated[
19
+ set[Readable],
20
+ Field(
21
+ description="Set of readable devices, will take a reading at each point, \
22
+ in addition to any Movables in the Spec",
23
+ ),
24
+ ],
25
+ spec: Annotated[
26
+ Spec[Movable],
27
+ Field(description="ScanSpec modelling the path of the scan"),
28
+ ],
29
+ metadata: dict[str, Any] | None = None,
30
+ ) -> MsgGenerator:
31
+ """Generic plan for reading `detectors` at every point of a ScanSpec `Spec`.
32
+ A `Spec` is an N-dimensional path.
33
+ """
34
+ # TODO: https://github.com/bluesky/scanspec/issues/154
35
+ # support Static.duration: Spec[Literal["DURATION"]]
36
+
37
+ _md = {
38
+ "plan_args": {
39
+ "detectors": {det.name for det in detectors},
40
+ "spec": repr(spec),
41
+ },
42
+ "plan_name": "spec_scan",
43
+ "shape": spec.shape(),
44
+ **(metadata or {}),
45
+ }
46
+
47
+ yield from bp.scan_nd(tuple(detectors), _as_cycler(spec), md=_md)
48
+
49
+
50
+ def _as_cycler(spec: Spec[Movable]) -> Cycler:
51
+ """
52
+ Convert a scanspec to a cycler for compatibility with legacy Bluesky plans such as
53
+ `bp.scan_nd`. Use the midpoints of the scanspec since cyclers are normally used
54
+ for software triggered scans.
55
+
56
+ Args:
57
+ spec: A scanspec
58
+
59
+ Returns:
60
+ Cycler: A new cycler
61
+ """
62
+
63
+ midpoints = spec.frames().midpoints
64
+ # Need to "add" the cyclers for all the axes together. The code below is
65
+ # effectively: cycler(motor1, [...]) + cycler(motor2, [...]) + ...
66
+ return reduce(operator.add, (cycler(*args) for args in midpoints.items()))
dodal/plans/wrapped.py ADDED
@@ -0,0 +1,57 @@
1
+ from collections.abc import Sequence
2
+ from typing import Annotated, Any
3
+
4
+ import bluesky.plans as bp
5
+ from bluesky.protocols import Readable
6
+ from pydantic import Field, NonNegativeFloat, validate_call
7
+
8
+ from dodal.common import MsgGenerator
9
+ from dodal.plan_stubs.data_session import attach_data_session_metadata_decorator
10
+
11
+ """This module wraps plan(s) from bluesky.plans until required handling for them is
12
+ moved into bluesky or better handled in downstream services.
13
+
14
+ Required decorators are installed on plan import
15
+ https://github.com/DiamondLightSource/blueapi/issues/474
16
+
17
+ Non-serialisable fields are ignored when they are optional
18
+ https://github.com/DiamondLightSource/blueapi/issues/711
19
+
20
+ We may also need other adjustments for UI purposes, e.g.
21
+ Forcing uniqueness or orderedness of Readables
22
+ Limits and metadata (e.g. units)
23
+ """
24
+
25
+
26
+ @attach_data_session_metadata_decorator()
27
+ @validate_call(config={"arbitrary_types_allowed": True})
28
+ def count(
29
+ detectors: Annotated[
30
+ set[Readable],
31
+ Field(
32
+ description="Set of readable devices, will take a reading at each point",
33
+ min_length=1,
34
+ ),
35
+ ],
36
+ num: Annotated[int, Field(description="Number of frames to collect", ge=1)] = 1,
37
+ delay: Annotated[
38
+ NonNegativeFloat | Sequence[NonNegativeFloat],
39
+ Field(
40
+ description="Delay between readings: if tuple, len(delay) == num - 1 and \
41
+ the delays are between each point, if value or None is the delay for every \
42
+ gap",
43
+ json_schema_extra={"units": "s"},
44
+ ),
45
+ ] = 0.0,
46
+ metadata: dict[str, Any] | None = None,
47
+ ) -> MsgGenerator:
48
+ """Reads from a number of devices.
49
+ Wraps bluesky.plans.count(det, num, delay, md=metadata) exposing only serializable
50
+ parameters and metadata."""
51
+ if isinstance(delay, Sequence):
52
+ assert (
53
+ len(delay) == num - 1
54
+ ), f"Number of delays given must be {num - 1}: was given {len(delay)}"
55
+ metadata = metadata or {}
56
+ metadata["shape"] = (num,)
57
+ yield from bp.count(tuple(detectors), num, delay=delay, md=metadata)
dodal/utils.py CHANGED
@@ -79,6 +79,10 @@ def get_beamline_name(default: str) -> str:
79
79
  return environ.get("BEAMLINE") or default
80
80
 
81
81
 
82
+ def is_test_mode() -> bool:
83
+ return environ.get("DODAL_TEST_MODE") == "true"
84
+
85
+
82
86
  def get_hostname() -> str:
83
87
  return socket.gethostname().split(".")[0]
84
88
 
@@ -1,144 +0,0 @@
1
- dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
2
- dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
3
- dodal/_version.py,sha256=i_NrncMW1U_TZOADuz4SSDOQ3OJYu6niE4QzoDFQrM0,413
4
- dodal/adsim.py,sha256=OW2dcS7ciD4Yq9WFw4PN_c5Bwccrmu7R-zr-u6ZCbQM,497
5
- dodal/cli.py,sha256=_crmaHchxphSW8eEJB58_XZIeK82aiUv9bV7tpz-LpA,2122
6
- dodal/log.py,sha256=0to7CRsbzbgVfAAfKRAMhsaUuKqF2-7CGdQc-z8Uhno,9499
7
- dodal/utils.py,sha256=1dJTm77jOxD2B3flC6Xbvl7_r5L4vbGkvBSBoOhUrGY,11966
8
- dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- dodal/beamline_specific_utils/i03.py,sha256=P6Ls4FoVtcacH0RJM3v6ZwwGx27oMppcBdW0la-ohTY,377
10
- dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
11
- dodal/beamlines/__init__.py,sha256=WWXqkXkufRUNFSC_b0PoHSkyKo7Tn8wNmnQCr9klh2o,3054
12
- dodal/beamlines/b01_1.py,sha256=nH1CzeGXc9kAZBxISsuQF33On9FuWkwFriGKfU8Qs5g,2176
13
- dodal/beamlines/i03.py,sha256=WOMkGTcrrKqoBNeRObumMA8Nlo404uIr2ccfn8gK-zs,18063
14
- dodal/beamlines/i04.py,sha256=z8LUbhyfUDU08oSp85hg7hFE8FJkAyLsqPUQScs5SUA,14567
15
- dodal/beamlines/i10.py,sha256=0ZoFe1vuwNiP2AvNACxuN0OMXJ4DcQ3Oqa0L-w5Ch_M,7744
16
- dodal/beamlines/i13_1.py,sha256=csXHrdwUh4sXTmb4X6ZiiSS_XxRkNShsVoBMxYI6rG0,1833
17
- dodal/beamlines/i20_1.py,sha256=MaPgONHqpoZuBtkiKEzYtViJnKBM2_ekeP4OdbmuXHE,1158
18
- dodal/beamlines/i22.py,sha256=FcsRk90qTCLqrS6csXZEb8Vu9P1es2ivm3WWig2PN7U,9889
19
- dodal/beamlines/i23.py,sha256=2j5qLoqE_hg9ETHqNkOVu7LLkVB8qalgXeORnVYKN_I,1075
20
- dodal/beamlines/i24.py,sha256=Eq8GZ6WVZuzGXdxBe2f5ZGsd0n2Vr8XEYFFMgpoSFzg,6422
21
- dodal/beamlines/p38.py,sha256=36DAoKO9ziCIhRQmAwLBaWKYfTykgW1KEXlqifhHaEY,7914
22
- dodal/beamlines/p45.py,sha256=N4SDTIFok3uMqb37higZHMr3xRjxItsT4ib_KacKKAE,2935
23
- dodal/beamlines/p99.py,sha256=mHMYi1M_jgSB9SrOPadxvPuMrxG8LmJOYtU0Iw6fnIQ,1708
24
- dodal/beamlines/training_rig.py,sha256=yagMEQruA1iTOeQCNpux-6xOtkBuB-hhGvAJwQ5c9bg,1846
25
- dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
26
- dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
27
- dodal/common/maths.py,sha256=K9x7iL3xXLtWYTV-xlFHDNSTIL9a2UP3Ws7wr6Dm2rQ,1803
28
- dodal/common/signal_utils.py,sha256=OsVJFntyTOHVEjhw27ZSp1e8SpKR2BhqdY1kzG6sago,1774
29
- dodal/common/types.py,sha256=fkL7UOwDbe3v2_VJ5f1W5RxR98Wx-Ra-LxUZWkNDtls,486
30
- dodal/common/udc_directory_provider.py,sha256=H-9f6uSVGuA8jyiErPi8ikCw1JDrhRAJv-qPpN-HwJk,2379
31
- dodal/common/visit.py,sha256=2UbbCmgOjZWSCxFzE9RYiTJhA_IoVOegma-Jv-PJqps,5787
32
- dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- dodal/common/beamlines/beamline_parameters.py,sha256=oIPHooqu5vTAwfqZutsKbzwdi9nvFF8568Mz7jrK5rI,3618
34
- dodal/common/beamlines/beamline_utils.py,sha256=rL-XgqAbaZF2FJDFj8OHSbvzCxSwzCUGMfTUWT5qOXs,4422
35
- dodal/common/beamlines/device_helpers.py,sha256=s79js7no9k8JMfG7NvdmFomSP5m5VDQ6th_Hsbx1znA,939
36
- dodal/devices/CTAB.py,sha256=MoExneblYUHg9Va8vAVx_p_Vw_HnqbhkzxxrX7Ic_wo,2000
37
- dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- dodal/devices/adsim.py,sha256=dMU0TKIuiODHYFHQOH4_5UvB8iJtaJEtjqaEDGjcU-w,311
39
- dodal/devices/aperture.py,sha256=BLaroQ3n8yd7uZyacJ3KvDWZH8yhA_sJc8b49QMKg9o,585
40
- dodal/devices/aperturescatterguard.py,sha256=KW4ERvfMpUadixJlzCVU6oRvLqLm6pFvsldruplAHc4,8404
41
- dodal/devices/apple2_undulator.py,sha256=ydcr5TuoT7jEHHIkfJywUIiHYvYXsdzgU2OJ2kZtyus,22389
42
- dodal/devices/attenuator.py,sha256=viK1iccNekX6ZvR_ZmSwj5JdM1j2B8pcTg8qWDdmzhQ,2584
43
- dodal/devices/backlight.py,sha256=jerjGOWuBk7TPNA3NkFRlA4DmgfVoVGAZSQ0qAyANcw,1644
44
- dodal/devices/cryostream.py,sha256=CpNA2HGhN_PXkL9eqH_yAPsDxyOLIiehlUxEoNmXJVg,668
45
- dodal/devices/dcm.py,sha256=eZNMGjLM56Ll0siU14XomB77W_grLIdxIrMOQNmYFG8,1609
46
- dodal/devices/diamond_filter.py,sha256=hLnfMrHg-EZ1YhN_4GTX1iQDk48zFJBBp03IVGy22cw,1109
47
- dodal/devices/eiger.py,sha256=2ZT2oQiZFLprg3CjsHRkXfxt9kSf8z8uUKH1Z5n3Hzo,14107
48
- dodal/devices/eiger_odin.py,sha256=oZl16K-Qb2yL6tK1fyDQvqbbhhvYMSVcf_e2CjlqMa4,7409
49
- dodal/devices/fast_grid_scan.py,sha256=WQGeKR-82fbnY4zUD_MQBsQyJgyIiuRpJK5nn_mfR1E,11969
50
- dodal/devices/fluorescence_detector_motion.py,sha256=5IcyaVHXa9TXLFlLB0tfpQ1_ThgIRJNaFNw_uj6ahCA,501
51
- dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
52
- dodal/devices/focusing_mirror.py,sha256=SHRYOYTX50BI5RBB3KJFTEMOg5E-BYR8khk3IyuWcak,6096
53
- dodal/devices/hutch_shutter.py,sha256=_-hR3SJHM05YHV_fEtc0VYOLamYnpVGDE56AwJGJS48,3320
54
- dodal/devices/ipin.py,sha256=qsf8E3xrJYNDwzsacNLCCp3gaqsadqmN1b-Fvou8y8k,420
55
- dodal/devices/linkam3.py,sha256=3oYwPtaKSPvLKEat8m7tuhE4Wizz8mg8HMrEWPCYxn0,3820
56
- dodal/devices/logging_ophyd_device.py,sha256=dUVE-XhWA56WUXez0mrc4sf322CXY3MVLreTycO5j_A,668
57
- dodal/devices/motors.py,sha256=dYa9T6FDMTbr8GvTb-lXtk3v4QEqAWRuGmHIO20fazQ,1039
58
- dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
59
- dodal/devices/pgm.py,sha256=X9JL7gDq_EUaDpPMSGeeg6S9tfU2ic7fdC2LwPRzpoU,1101
60
- dodal/devices/qbpm.py,sha256=IxL8TisUiFvdeYYch9Dru6MDwrCzMylkFnBec839cY0,467
61
- dodal/devices/robot.py,sha256=H60UOH5XSnHLoLSNgBuLZ8veeYNyy-fSvc8Hf06y6Q4,5339
62
- dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
63
- dodal/devices/scatterguard.py,sha256=jx03in9QgaThWxD4t1S8_Llent2kWrn_hThJ9KkUWTk,330
64
- dodal/devices/scintillator.py,sha256=PlD6cnJ39PTB_e7QrRspPliLYE4kL_K7ziJURzuxgdA,365
65
- dodal/devices/slits.py,sha256=uOyVmbgeygiP6e5Z9t5zMPXLuVEWFfYg9GB3ZU76Tug,600
66
- dodal/devices/smargon.py,sha256=ijvz7k5a-gbZJv3rfX8uVpDWiHCkZnXcFZqarQvfPGY,4710
67
- dodal/devices/status.py,sha256=hVrJS1yooQo6PRumRACoIEh-SKBUKxvBlQl-MtLFUMQ,327
68
- dodal/devices/synchrotron.py,sha256=QtTufJA_fCaBawHougSc7nxwu240oX46_y0P-4qIW8o,1960
69
- dodal/devices/tetramm.py,sha256=a48aPSPoHYCTNtVhq0YH2UNjGtJuMStjQRw7LjL98ds,8445
70
- dodal/devices/thawer.py,sha256=Gq-3f__KJUM6_Ds9OVxpZ5jC447HywJxQGXen6L33Lk,1616
71
- dodal/devices/turbo_slit.py,sha256=B6SPXqviMnG-U4PnUF1BdTO0LBKmTuwAUKRbxMiNJXo,1125
72
- dodal/devices/undulator.py,sha256=FIjzboayAvD0EFyp6qSlzfWA_WvEFd72SbLCE03OoxE,5183
73
- dodal/devices/undulator_dcm.py,sha256=5hn3UZeu4CYXmfUVSdIxjrcIpStgeA1S744p0iIFp4I,2725
74
- dodal/devices/webcam.py,sha256=EqdzUBov5wMCULzzkfnCfD-5TQMZFQLp-2nlDHezmPs,2332
75
- dodal/devices/xbpm_feedback.py,sha256=-1wbnahJ_oSljQR0Sjiwn3mytVP-VwsAy0a_YPjPM0Y,1168
76
- dodal/devices/zebra.py,sha256=0eK23zIGm-vLVvLMwR8xnjBtIBQFUqHcl0ndbfUKNBE,9455
77
- dodal/devices/zebra_controlled_shutter.py,sha256=w2ISASJ_sb3dbQGi63Yuj3ymTkjX73aSl_ZTYs8TyaI,1860
78
- dodal/devices/areadetector/__init__.py,sha256=8IwLxuZMW0MOJpJp_ZDdlaE20hrtsH_PXWGaKgMiYs4,240
79
- dodal/devices/areadetector/adaravis.py,sha256=Cqw_Mzrp_zODFxQ2LZBJzHp_DsZ6_dAITkZz8gYz_0w,3797
80
- dodal/devices/areadetector/adsim.py,sha256=cIc9PRbKnftBk7Ut8d8CU_TVrin8EwcKHObP2n9VxWM,1876
81
- dodal/devices/areadetector/adutils.py,sha256=4axFR3wtn-K-sjMVJyfTcu-8g35odf2cY8mTKv1gS-o,3093
82
- dodal/devices/areadetector/plugins/CAM.py,sha256=fQkZNnnq80q2sloo1XTZH0wUwiY6q-9bECmMhMFwhjQ,976
83
- dodal/devices/areadetector/plugins/MJPG.py,sha256=H_v92l8GrGS2AfpxUH8UbZG5RzFSUB7J7YPp2Ci4Ih8,3033
84
- dodal/devices/detector/__init__.py,sha256=-RdACL3tzc3lLArWOoGNje48UUlv2fElOmGOz9yOuO0,317
85
- dodal/devices/detector/det_dim_constants.py,sha256=LNrVMd0DbFEcnyNFmXosCP-VYaZ71Ajuv6inwo4Mg3U,2299
86
- dodal/devices/detector/det_dist_to_beam_converter.py,sha256=7keoqZYfvgayePVx97lHYpcFRTJnQOfAk_PYP4EZTZQ,1951
87
- dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
88
- dodal/devices/detector/detector.py,sha256=syzkl52kGaMINXCXEviFuYPbgNatm5tioVPDmjgro8s,4768
89
- dodal/devices/detector/detector_motion.py,sha256=LjHNi9FcDSZoriQYrFde8fEmwCGccFgSHPtcxivix4g,1628
90
- dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
92
- dodal/devices/i10/i10_apple2.py,sha256=v2C7S5BhPPdZcVt4HGjBYYcFoqGz4kurvA6eCG624qk,13017
93
- dodal/devices/i10/i10_setting_data.py,sha256=pvQ1S2j3WrbGvJLyUm78JIfYMIOtw4JvtyfdcoLsMjY,142
94
- dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- dodal/devices/i22/dcm.py,sha256=3tf9fWkFvlxJipZCzjPo1H2beXwxbGxsDQ9YCOGbP_4,6213
96
- dodal/devices/i22/fswitch.py,sha256=AlyZ_RdbXoMHrG2-sddNOUyLl3vkBdduXVnFL_rMgLo,3046
97
- dodal/devices/i22/nxsas.py,sha256=a8oJXl5uhkh9zcb9rSZmVooU-SplzzO3EsAaHJZRfrQ,6086
98
- dodal/devices/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
- dodal/devices/i24/aperture.py,sha256=bbT4ts5jfrjrOxG199RGDxIYmzVyv1k0ZlZcmS6kEzU,849
100
- dodal/devices/i24/beamstop.py,sha256=GpqSaHlyZfcUfaCgvQRjhDgNdGsrOwV_NqG9JLfcusY,1233
101
- dodal/devices/i24/dcm.py,sha256=nP2qymTy5TrOu078XOY7h1TEwVfcgli5lTyxmwsG4O8,1990
102
- dodal/devices/i24/dual_backlight.py,sha256=7QnVj75GtfN2Ickkna4-JM1fTaioj37TnArBeiUbJPY,2034
103
- dodal/devices/i24/i24_detector_motion.py,sha256=_HgdsZqFYY0tKqUgMzViHaPEUFXL3WlXXioGvDehRUw,364
104
- dodal/devices/i24/i24_vgonio.py,sha256=Igqs7687z6lyhGVeJEDtDmPachYxU48MUH2BF0RpK9Q,461
105
- dodal/devices/i24/pmac.py,sha256=qug40tz00vjvmQox3W6GrEcorriEeGkNyP5m4u5CVHo,7201
106
- dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- dodal/devices/oav/microns_for_zoom_levels.json,sha256=kJTkbu2v6_Ccc_cDy7FRTX-gRhXxfYskjVqwBCZIqCQ,1209
108
- dodal/devices/oav/oav_calculations.py,sha256=tr3Z2pFT7v_enAiNuSZV0esPsiHfRGrj7t0-g_Ix5Do,2363
109
- dodal/devices/oav/oav_detector.py,sha256=aStDk40tJ63aJoAtzm621HFqkZjkinJ9EgY5VvCSRTw,4812
110
- dodal/devices/oav/oav_parameters.py,sha256=gGN73TQGUiRzlIO5YKiqCRkjpTKsV6LFGo7Eu4Vs82g,6074
111
- dodal/devices/oav/oav_to_redis_forwarder.py,sha256=pjBm80ZmsRdF7KqG30dlj_Tzk7_r3m8QT5AvdSFOg2c,6238
112
- dodal/devices/oav/utils.py,sha256=tzBEgATtn2yfhUhhhbSfYkew7BMbk7iTHVhlxfGLe94,3105
113
- dodal/devices/oav/pin_image_recognition/__init__.py,sha256=l5IsWMDZDw3-jk0DkGpiw_BzqyfVYRonlfX6Je1ZPR0,6446
114
- dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
115
- dodal/devices/oav/pin_image_recognition/utils.py,sha256=L9ypluYqeOFoS7gQuws-vTNc8LqaKl2ZIDNeQ2JaNpg,8592
116
- dodal/devices/oav/snapshots/grid_overlay.py,sha256=E1KviiM6TeDzjbB16_ecrtIm4cC74nme2Lc7ZQIKCTI,3626
117
- dodal/devices/oav/snapshots/snapshot_with_beam_centre.py,sha256=HzgwaOwBeXFRA0DyXaffvlDe6qw5kuxmFnn8_zn8KMQ,1905
118
- dodal/devices/oav/snapshots/snapshot_with_grid.py,sha256=-fqfChbVQTK3S18TKewnhobkaDoV0ULhcRO_dWwcmSc,2243
119
- dodal/devices/p99/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- dodal/devices/p99/sample_stage.py,sha256=kvwKCDUmXqcoXfIbAENtqm3Hi2cHP7dZIPQgQT6hsXw,1140
121
- dodal/devices/training_rig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- dodal/devices/training_rig/sample_stage.py,sha256=jktTp837ij8wor5LidE3AajCk95L7DebJotMlO7QwTE,355
123
- dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- dodal/devices/util/adjuster_plans.py,sha256=XpJ1YJKoOCFzj2sonkZYJAdewi3jRaok_2gOmNsfeS0,956
125
- dodal/devices/util/epics_util.py,sha256=R0_I9HEZ2l19BZaTpevPqT3p3kp5GZCfmNNmnXGfdsc,4689
126
- dodal/devices/util/lookup_tables.py,sha256=Bk-wZk7JO5_j_8gbot-8reirVqxvFUg9_SIqEIOVZu0,2025
127
- dodal/devices/util/motor_utils.py,sha256=pNY-aUk9LxaIWeDr5rpMS6udiB9j19wcCXkNDLp1uA0,257
128
- dodal/devices/util/save_panda.py,sha256=PHFlkerBhkkU0-o5dNEdi2P95_jD9Lk8yYgaqn9R97o,2538
129
- dodal/devices/util/test_utils.py,sha256=VrSFFGLNKOcCAsWFMZOxwhng3wGR5kV8NqqnKfj8Vuw,562
130
- dodal/devices/xspress3/xspress3.py,sha256=JTx3ppAc8GwV9K-Gfqo81iGYH_L-ONyFWiPRs9XUs-w,4661
131
- dodal/devices/xspress3/xspress3_channel.py,sha256=yJRwseLmtkW2Vv6GB8sLdOFuBn3e4c9Q8fgPacMgl5w,1638
132
- dodal/devices/zocalo/__init__.py,sha256=oPhjFB39yf2NWkGD-MMcPFnnOVZ_RtdyBt2OLYn-Xa4,505
133
- dodal/devices/zocalo/zocalo_interaction.py,sha256=y8YKMaVwfsRPBofHGGLYmYsd4QwMvm7JIPEo6wrN_Xo,3493
134
- dodal/devices/zocalo/zocalo_results.py,sha256=WgNGgu4sXIlhL5-G444uxhKbWc9HOYIOTwd2NuV8-0o,14511
135
- dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
136
- dodal/plans/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
137
- dodal/plans/data_session_metadata.py,sha256=GjR4E2s3ZwYkvkBnW6TcL6OLdmyxrmkoSSI242sEPFA,1567
138
- dodal/plans/motor_util_plans.py,sha256=1s02s_Yn7vusv8o64n5p4yiibmQ5ETv8t59CD27h8gw,4655
139
- dls_dodal-1.34.1.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
140
- dls_dodal-1.34.1.dist-info/METADATA,sha256=y8nPhARI53GhOTWacruJ4nJ0lTCHOMLBID0_XRjNDec,16579
141
- dls_dodal-1.34.1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
142
- dls_dodal-1.34.1.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
143
- dls_dodal-1.34.1.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
144
- dls_dodal-1.34.1.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- from ophyd import Component as Cpt
2
- from ophyd import EpicsMotor
3
- from ophyd.epics_motor import MotorBundle
4
-
5
-
6
- class VGonio(MotorBundle):
7
- x = Cpt(EpicsMotor, "PINX")
8
- z = Cpt(EpicsMotor, "PINZ")
9
- yh = Cpt(EpicsMotor, "PINYH")
10
- omega = Cpt(EpicsMotor, "OMEGA")
11
- kappa = Cpt(EpicsMotor, "KAPPA")
12
- phi = Cpt(EpicsMotor, "PHI")
13
-
14
- # Real motors
15
- xs = Cpt(EpicsMotor, "PINXS")
16
- ys = Cpt(EpicsMotor, "PINXS")
17
- zs = Cpt(EpicsMotor, "PINZS")
File without changes