dls-dodal 1.48.0__py3-none-any.whl → 1.49.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 (39) hide show
  1. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/METADATA +2 -1
  2. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/RECORD +39 -29
  3. dodal/_version.py +2 -2
  4. dodal/beamlines/aithre.py +15 -0
  5. dodal/beamlines/b16.py +65 -0
  6. dodal/beamlines/b18.py +38 -0
  7. dodal/beamlines/i10.py +41 -233
  8. dodal/beamlines/k11.py +35 -0
  9. dodal/common/beamlines/device_helpers.py +1 -0
  10. dodal/devices/apple2_undulator.py +257 -136
  11. dodal/devices/b16/__init__.py +0 -0
  12. dodal/devices/b16/detector.py +34 -0
  13. dodal/devices/bimorph_mirror.py +29 -36
  14. dodal/devices/electron_analyser/__init__.py +12 -2
  15. dodal/devices/electron_analyser/abstract/base_detector.py +3 -128
  16. dodal/devices/electron_analyser/abstract/base_driver_io.py +8 -3
  17. dodal/devices/electron_analyser/abstract/base_region.py +6 -3
  18. dodal/devices/electron_analyser/detector.py +141 -0
  19. dodal/devices/electron_analyser/enums.py +6 -0
  20. dodal/devices/electron_analyser/specs/__init__.py +2 -0
  21. dodal/devices/electron_analyser/specs/detector.py +1 -1
  22. dodal/devices/electron_analyser/specs/driver_io.py +4 -5
  23. dodal/devices/electron_analyser/specs/enums.py +8 -0
  24. dodal/devices/electron_analyser/specs/region.py +3 -2
  25. dodal/devices/electron_analyser/types.py +30 -4
  26. dodal/devices/electron_analyser/util.py +1 -1
  27. dodal/devices/electron_analyser/vgscienta/__init__.py +2 -0
  28. dodal/devices/electron_analyser/vgscienta/detector.py +1 -1
  29. dodal/devices/electron_analyser/vgscienta/driver_io.py +2 -1
  30. dodal/devices/electron_analyser/vgscienta/enums.py +19 -0
  31. dodal/devices/electron_analyser/vgscienta/region.py +7 -22
  32. dodal/devices/i10/__init__.py +0 -0
  33. dodal/devices/i10/i10_apple2.py +181 -126
  34. dodal/devices/i22/nxsas.py +1 -1
  35. dodal/devices/oav/oav_detector.py +45 -7
  36. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/WHEEL +0 -0
  37. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/entry_points.txt +0 -0
  38. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/licenses/LICENSE +0 -0
  39. {dls_dodal-1.48.0.dist-info → dls_dodal-1.49.0.dist-info}/top_level.txt +0 -0
@@ -6,6 +6,7 @@ from ophyd_async.core import (
6
6
  AsyncStatus,
7
7
  LazyMock,
8
8
  SignalR,
9
+ SignalRW,
9
10
  StandardReadable,
10
11
  derived_signal_r,
11
12
  soft_signal_rw,
@@ -36,7 +37,21 @@ def _get_correct_zoom_string(zoom: str) -> str:
36
37
  return zoom
37
38
 
38
39
 
39
- class ZoomController(StandardReadable, Movable[str]):
40
+ class BaseZoomController(StandardReadable, Movable[str]):
41
+ level: SignalRW[str]
42
+ percentage: SignalRW[float]
43
+
44
+
45
+ class NullZoomController(BaseZoomController):
46
+ def __init__(self):
47
+ self.level = soft_signal_rw(str, "1.0x")
48
+ self.percentage = soft_signal_rw(float, 100)
49
+
50
+ def set(self, value):
51
+ raise Exception("Attempting to set zoom level of a null zoom controller")
52
+
53
+
54
+ class ZoomController(BaseZoomController):
40
55
  """
41
56
  Device to control the zoom level. This should be set like
42
57
  o = OAV(name="oav")
@@ -62,12 +77,24 @@ class OAV(StandardReadable):
62
77
  beam_centre_i: SignalR[int]
63
78
  beam_centre_j: SignalR[int]
64
79
 
65
- def __init__(self, prefix: str, config: OAVConfigBase, name: str = ""):
80
+ def __init__(
81
+ self,
82
+ prefix: str,
83
+ config: OAVConfigBase,
84
+ name: str = "",
85
+ zoom_controller: BaseZoomController | None = None,
86
+ ):
66
87
  self.oav_config = config
67
88
  self._prefix = prefix
68
89
  self._name = name
69
90
  _bl_prefix = prefix.split("-")[0]
70
- self.zoom_controller = ZoomController(f"{_bl_prefix}-EA-OAV-01:FZOOM:", name)
91
+
92
+ if not zoom_controller:
93
+ self.zoom_controller = ZoomController(
94
+ f"{_bl_prefix}-EA-OAV-01:FZOOM:", name
95
+ )
96
+ else:
97
+ self.zoom_controller = zoom_controller
71
98
 
72
99
  self.cam = Cam(f"{prefix}CAM:", name=name)
73
100
  with self.add_children_as_readables():
@@ -121,8 +148,14 @@ class OAVBeamCentreFile(OAV):
121
148
  centre values are stored.
122
149
  """
123
150
 
124
- def __init__(self, prefix: str, config: OAVConfigBeamCentre, name: str = ""):
125
- super().__init__(prefix, config, name)
151
+ def __init__(
152
+ self,
153
+ prefix: str,
154
+ config: OAVConfigBeamCentre,
155
+ name: str = "",
156
+ zoom_controller: BaseZoomController | None = None,
157
+ ):
158
+ super().__init__(prefix, config, name, zoom_controller)
126
159
 
127
160
  with self.add_children_as_readables():
128
161
  self.beam_centre_i = derived_signal_r(
@@ -152,7 +185,12 @@ class OAVBeamCentrePV(OAV):
152
185
  """OAV device that reads its beam centre values from PVs."""
153
186
 
154
187
  def __init__(
155
- self, prefix: str, config: OAVConfig, name: str = "", overlay_channel: int = 1
188
+ self,
189
+ prefix: str,
190
+ config: OAVConfig,
191
+ name: str = "",
192
+ zoom_controller: BaseZoomController | None = None,
193
+ overlay_channel: int = 1,
156
194
  ):
157
195
  with self.add_children_as_readables():
158
196
  self.beam_centre_i = epics_signal_r(
@@ -161,4 +199,4 @@ class OAVBeamCentrePV(OAV):
161
199
  self.beam_centre_j = epics_signal_r(
162
200
  int, prefix + f"OVER:{overlay_channel}:CenterY"
163
201
  )
164
- super().__init__(prefix, config, name)
202
+ super().__init__(prefix, config, name, zoom_controller)