dls-dodal 1.68.0__py3-none-any.whl → 2.0.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 (292) hide show
  1. {dls_dodal-1.68.0.dist-info → dls_dodal-2.0.0.dist-info}/METADATA +1 -31
  2. dls_dodal-2.0.0.dist-info/RECORD +354 -0
  3. {dls_dodal-1.68.0.dist-info → dls_dodal-2.0.0.dist-info}/WHEEL +1 -1
  4. dodal/_version.py +2 -2
  5. dodal/beamlines/__init__.py +10 -17
  6. dodal/beamlines/adsim.py +40 -33
  7. dodal/beamlines/b01_1.py +11 -0
  8. dodal/beamlines/b07.py +17 -21
  9. dodal/beamlines/b07_1.py +20 -22
  10. dodal/beamlines/b07_shared.py +12 -0
  11. dodal/beamlines/b16.py +1 -1
  12. dodal/beamlines/b21.py +15 -6
  13. dodal/beamlines/i02_1.py +17 -45
  14. dodal/beamlines/i02_2.py +6 -12
  15. dodal/beamlines/i03.py +8 -5
  16. dodal/beamlines/i03_supervisor.py +19 -0
  17. dodal/beamlines/i04.py +87 -184
  18. dodal/beamlines/i05.py +9 -39
  19. dodal/beamlines/i05_1.py +4 -13
  20. dodal/beamlines/i05_shared.py +51 -0
  21. dodal/beamlines/i06_1.py +26 -0
  22. dodal/beamlines/{i06.py → i06_shared.py} +25 -14
  23. dodal/beamlines/i07.py +14 -16
  24. dodal/beamlines/i09.py +76 -29
  25. dodal/beamlines/i09_1.py +25 -56
  26. dodal/beamlines/i09_1_shared.py +61 -0
  27. dodal/beamlines/i09_2.py +6 -100
  28. dodal/beamlines/i09_2_shared.py +110 -0
  29. dodal/beamlines/i10.py +60 -54
  30. dodal/beamlines/i10_1.py +99 -10
  31. dodal/beamlines/{i10_optics.py → i10_shared.py} +80 -66
  32. dodal/beamlines/i11.py +31 -18
  33. dodal/beamlines/i13_1.py +1 -1
  34. dodal/beamlines/i15.py +6 -6
  35. dodal/beamlines/i15_1.py +6 -6
  36. dodal/beamlines/i16.py +11 -0
  37. dodal/beamlines/i17.py +37 -28
  38. dodal/beamlines/i18.py +3 -4
  39. dodal/beamlines/i19_1.py +95 -34
  40. dodal/beamlines/i19_2.py +68 -52
  41. dodal/beamlines/i19_optics.py +26 -13
  42. dodal/beamlines/i20_1.py +17 -11
  43. dodal/beamlines/i21.py +44 -29
  44. dodal/beamlines/i22.py +19 -4
  45. dodal/beamlines/i23.py +20 -27
  46. dodal/beamlines/i24.py +64 -113
  47. dodal/beamlines/k07.py +99 -5
  48. dodal/beamlines/p38.py +3 -3
  49. dodal/beamlines/p60.py +35 -14
  50. dodal/beamlines/p99.py +16 -15
  51. dodal/beamlines/training_rig.py +20 -12
  52. dodal/cli.py +36 -2
  53. dodal/common/__init__.py +2 -1
  54. dodal/common/beamlines/beamline_parameters.py +2 -1
  55. dodal/common/beamlines/beamline_utils.py +11 -9
  56. dodal/common/beamlines/commissioning_mode.py +6 -3
  57. dodal/common/coordination.py +12 -14
  58. dodal/common/crystal_metadata.py +5 -8
  59. dodal/common/device_utils.py +4 -3
  60. dodal/common/maths.py +87 -19
  61. dodal/common/udc_directory_provider.py +13 -8
  62. dodal/common/visit.py +18 -21
  63. dodal/common/watcher_utils.py +13 -12
  64. dodal/device_manager.py +94 -54
  65. dodal/devices/aperturescatterguard.py +26 -27
  66. dodal/devices/areadetector/plugins/cam.py +1 -3
  67. dodal/devices/areadetector/plugins/mjpg.py +6 -5
  68. dodal/devices/attenuator/attenuator.py +12 -11
  69. dodal/devices/beamlines/b07/__init__.py +3 -0
  70. dodal/devices/{b07_1 → beamlines/b07_1}/__init__.py +2 -2
  71. dodal/devices/{b07_1 → beamlines/b07_1}/ccmc.py +5 -10
  72. dodal/devices/{b16 → beamlines/b16}/detector.py +2 -3
  73. dodal/devices/{i02_1 → beamlines/i02_1}/fast_grid_scan.py +2 -3
  74. dodal/devices/{i02_1 → beamlines/i02_1}/sample_motors.py +1 -1
  75. dodal/devices/{i03 → beamlines/i03}/beamsize.py +11 -7
  76. dodal/devices/{i03 → beamlines/i03}/dcm.py +1 -2
  77. dodal/devices/{i03 → beamlines/i03}/undulator_dcm.py +4 -5
  78. dodal/devices/beamlines/i04/beam_centre.py +151 -0
  79. dodal/devices/{i04 → beamlines/i04}/beamsize.py +11 -7
  80. dodal/devices/beamlines/i04/max_pixel.py +25 -0
  81. dodal/devices/{i04 → beamlines/i04}/murko_results.py +23 -8
  82. dodal/devices/{i04 → beamlines/i04}/transfocator.py +10 -15
  83. dodal/devices/beamlines/i05/__init__.py +3 -0
  84. dodal/devices/beamlines/i06_shared/__init__.py +3 -0
  85. dodal/devices/beamlines/i06_shared/i06_enum.py +7 -0
  86. dodal/devices/{i07 → beamlines/i07}/dcm.py +2 -3
  87. dodal/devices/{i07 → beamlines/i07}/id.py +8 -9
  88. dodal/devices/beamlines/i09/__init__.py +3 -0
  89. dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/hard_energy.py +5 -6
  90. dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/hard_undulator_functions.py +19 -16
  91. dodal/devices/{i10 → beamlines/i10}/diagnostics.py +4 -3
  92. dodal/devices/{i10 → beamlines/i10}/i10_apple2.py +37 -51
  93. dodal/devices/{i10 → beamlines/i10}/rasor/rasor_current_amp.py +1 -24
  94. dodal/devices/{i10 → beamlines/i10}/rasor/rasor_motors.py +2 -2
  95. dodal/devices/{i10 → beamlines/i10}/slits.py +5 -3
  96. dodal/devices/beamlines/i10_1/__init__.py +9 -0
  97. dodal/devices/beamlines/i10_1/electromagnet/magnet.py +16 -0
  98. dodal/devices/beamlines/i10_1/electromagnet/stages.py +14 -0
  99. dodal/devices/beamlines/i10_1/scaler_cards.py +13 -0
  100. dodal/devices/{i11 → beamlines/i11}/cyberstar_blower.py +1 -1
  101. dodal/devices/{i11 → beamlines/i11}/diff_stages.py +4 -6
  102. dodal/devices/{i11 → beamlines/i11}/mythen.py +3 -4
  103. dodal/devices/{i11 → beamlines/i11}/nx100robot.py +6 -6
  104. dodal/devices/{i11 → beamlines/i11}/spinner.py +1 -1
  105. dodal/devices/{i13_1 → beamlines/i13_1}/merlin.py +1 -1
  106. dodal/devices/{i15 → beamlines/i15}/dcm.py +1 -2
  107. dodal/devices/{i15 → beamlines/i15}/focussing_mirror.py +5 -5
  108. dodal/devices/{i15 → beamlines/i15}/jack.py +2 -2
  109. dodal/devices/{i15 → beamlines/i15}/multilayer_mirror.py +1 -1
  110. dodal/devices/{i17 → beamlines/i17}/i17_apple2.py +16 -22
  111. dodal/devices/{i18 → beamlines/i18}/diode.py +1 -1
  112. dodal/devices/{i19 → beamlines/i19}/access_controlled/attenuator_motor_squad.py +12 -8
  113. dodal/devices/{i19 → beamlines/i19}/access_controlled/blueapi_device.py +16 -15
  114. dodal/devices/beamlines/i19/access_controlled/piezo_control.py +72 -0
  115. dodal/devices/{i19 → beamlines/i19}/access_controlled/shutter.py +11 -9
  116. dodal/devices/{i19 → beamlines/i19}/backlight.py +3 -1
  117. dodal/devices/{i19 → beamlines/i19}/mapt_configuration.py +2 -1
  118. dodal/devices/{i19 → beamlines/i19}/pin_col_stages.py +11 -8
  119. dodal/devices/beamlines/i19/pin_tip.py +32 -0
  120. dodal/devices/beamlines/i21/__init__.py +3 -0
  121. dodal/devices/{i22 → beamlines/i22}/dcm.py +1 -2
  122. dodal/devices/{i22 → beamlines/i22}/fswitch.py +1 -3
  123. dodal/devices/{i22 → beamlines/i22}/nxsas.py +5 -4
  124. dodal/devices/{i24 → beamlines/i24}/beam_center.py +1 -1
  125. dodal/devices/{i24 → beamlines/i24}/beamstop.py +2 -2
  126. dodal/devices/{i24 → beamlines/i24}/commissioning_jungfrau.py +12 -12
  127. dodal/devices/{i24 → beamlines/i24}/dcm.py +1 -3
  128. dodal/devices/{i24 → beamlines/i24}/dual_backlight.py +3 -3
  129. dodal/devices/{i24 → beamlines/i24}/pmac.py +9 -7
  130. dodal/devices/{p60 → beamlines/p60}/lab_xray_source.py +1 -1
  131. dodal/devices/beamlines/p99/__init__.py +0 -0
  132. dodal/devices/{p99 → beamlines/p99}/andor2_point.py +11 -15
  133. dodal/devices/bimorph_mirror.py +22 -20
  134. dodal/devices/collimation_table.py +3 -2
  135. dodal/devices/common_dcm.py +30 -20
  136. dodal/devices/controllers.py +2 -2
  137. dodal/devices/cryostream.py +8 -0
  138. dodal/devices/current_amplifiers/current_amplifier.py +16 -18
  139. dodal/devices/current_amplifiers/current_amplifier_detector.py +9 -10
  140. dodal/devices/current_amplifiers/femto.py +8 -9
  141. dodal/devices/current_amplifiers/sr570.py +16 -16
  142. dodal/devices/current_amplifiers/struck_scaler_counter.py +5 -5
  143. dodal/devices/detector/det_resolution.py +9 -8
  144. dodal/devices/detector/detector.py +4 -2
  145. dodal/devices/diamond_filter.py +3 -4
  146. dodal/devices/eiger.py +32 -17
  147. dodal/devices/eiger_odin.py +1 -1
  148. dodal/devices/electron_analyser/base/__init__.py +3 -3
  149. dodal/devices/electron_analyser/base/base_controller.py +32 -21
  150. dodal/devices/electron_analyser/base/base_detector.py +15 -20
  151. dodal/devices/electron_analyser/base/base_driver_io.py +39 -46
  152. dodal/devices/electron_analyser/base/base_enums.py +0 -5
  153. dodal/devices/electron_analyser/base/base_region.py +29 -31
  154. dodal/devices/electron_analyser/base/base_util.py +18 -16
  155. dodal/devices/electron_analyser/base/energy_sources.py +35 -40
  156. dodal/devices/electron_analyser/specs/specs_detector.py +7 -6
  157. dodal/devices/electron_analyser/vgscienta/vgscienta_detector.py +7 -6
  158. dodal/devices/eurotherm.py +3 -2
  159. dodal/devices/fast_grid_scan.py +31 -34
  160. dodal/devices/fast_shutter.py +125 -39
  161. dodal/devices/flux.py +1 -1
  162. dodal/devices/focusing_mirror.py +29 -11
  163. dodal/devices/hutch_shutter.py +6 -6
  164. dodal/devices/insertion_device/__init__.py +20 -8
  165. dodal/devices/insertion_device/apple2_controller.py +371 -0
  166. dodal/devices/insertion_device/apple2_undulator.py +184 -587
  167. dodal/devices/insertion_device/apple_knot_controller.py +222 -0
  168. dodal/devices/insertion_device/energy.py +161 -0
  169. dodal/devices/insertion_device/energy_motor_lookup.py +21 -28
  170. dodal/devices/insertion_device/lookup_table_models.py +47 -52
  171. dodal/devices/insertion_device/polarisation.py +36 -0
  172. dodal/devices/ipin.py +1 -1
  173. dodal/devices/linkam3.py +7 -5
  174. dodal/devices/motors.py +107 -19
  175. dodal/devices/mx_phase1/beamstop.py +2 -4
  176. dodal/devices/oav/oav_calculations.py +20 -13
  177. dodal/devices/oav/oav_detector.py +92 -22
  178. dodal/devices/oav/oav_parameters.py +4 -9
  179. dodal/devices/oav/oav_to_redis_forwarder.py +22 -18
  180. dodal/devices/oav/pin_image_recognition/__init__.py +4 -6
  181. dodal/devices/oav/pin_image_recognition/manual_test.py +1 -2
  182. dodal/devices/oav/pin_image_recognition/utils.py +30 -32
  183. dodal/devices/oav/snapshots/grid_overlay.py +10 -9
  184. dodal/devices/oav/snapshots/snapshot_image_processing.py +15 -13
  185. dodal/devices/oav/utils.py +20 -6
  186. dodal/devices/p45.py +3 -9
  187. dodal/devices/pgm.py +8 -14
  188. dodal/devices/pressure_jump_cell.py +93 -32
  189. dodal/devices/qbpm.py +1 -3
  190. dodal/devices/robot.py +45 -20
  191. dodal/devices/s4_slit_gaps.py +1 -1
  192. dodal/devices/selectable_source.py +41 -0
  193. dodal/devices/slits.py +2 -5
  194. dodal/devices/smargon.py +2 -3
  195. dodal/devices/temperture_controller/lakeshore/lakeshore.py +38 -64
  196. dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +21 -35
  197. dodal/devices/tetramm.py +7 -7
  198. dodal/devices/turbo_slit.py +8 -7
  199. dodal/devices/undulator.py +42 -56
  200. dodal/devices/util/adjuster_plans.py +2 -3
  201. dodal/devices/util/epics_util.py +10 -10
  202. dodal/devices/util/lookup_tables.py +17 -18
  203. dodal/devices/v2f.py +2 -3
  204. dodal/devices/watsonmarlow323_pump.py +1 -1
  205. dodal/devices/xbpm_feedback.py +3 -2
  206. dodal/devices/xspress3/xspress3.py +8 -11
  207. dodal/devices/xspress3/xspress3_channel.py +3 -6
  208. dodal/devices/zebra/zebra.py +21 -7
  209. dodal/devices/zebra/zebra_constants_mapping.py +12 -7
  210. dodal/devices/zebra/zebra_controlled_shutter.py +2 -1
  211. dodal/devices/zocalo/zocalo_interaction.py +14 -14
  212. dodal/devices/zocalo/zocalo_results.py +33 -33
  213. dodal/log.py +23 -20
  214. dodal/plan_stubs/check_topup.py +15 -15
  215. dodal/plan_stubs/data_session.py +6 -6
  216. dodal/plan_stubs/motor_utils.py +22 -18
  217. dodal/plan_stubs/pressure_jump_cell.py +18 -0
  218. dodal/plan_stubs/wrapped.py +40 -55
  219. dodal/plans/bimorph.py +63 -52
  220. dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -1
  221. dodal/plans/device_setup_plans/__init__.py +5 -0
  222. dodal/plans/device_setup_plans/setup_pin_tip_params.py +63 -0
  223. dodal/plans/preprocessors/verify_undulator_gap.py +10 -8
  224. dodal/plans/spec_path.py +3 -5
  225. dodal/plans/verify_undulator_gap.py +1 -2
  226. dodal/plans/wrapped.py +4 -3
  227. dodal/testing/__init__.py +0 -0
  228. dodal/testing/electron_analyser/device_factory.py +5 -7
  229. dodal/testing/fixtures/devices/apple2.py +38 -0
  230. dodal/testing/fixtures/run_engine.py +3 -7
  231. dodal/testing/fixtures/utils.py +1 -2
  232. dodal/utils.py +60 -58
  233. dls_dodal-1.68.0.dist-info/RECORD +0 -330
  234. dodal/beamline_specific_utils/i05_shared.py +0 -14
  235. dodal/devices/b07/__init__.py +0 -3
  236. dodal/devices/i04/max_pixel.py +0 -38
  237. dodal/devices/i05/__init__.py +0 -3
  238. dodal/devices/i09/__init__.py +0 -3
  239. dodal/devices/i21/__init__.py +0 -5
  240. {dls_dodal-1.68.0.dist-info → dls_dodal-2.0.0.dist-info}/entry_points.txt +0 -0
  241. {dls_dodal-1.68.0.dist-info → dls_dodal-2.0.0.dist-info}/licenses/LICENSE +0 -0
  242. {dls_dodal-1.68.0.dist-info → dls_dodal-2.0.0.dist-info}/top_level.txt +0 -0
  243. /dodal/{beamline_specific_utils → devices/beamlines}/__init__.py +0 -0
  244. /dodal/devices/{b07 → beamlines/b07}/enums.py +0 -0
  245. /dodal/devices/{b07_1 → beamlines/b07_1}/enums.py +0 -0
  246. /dodal/devices/{b16 → beamlines/b16}/__init__.py +0 -0
  247. /dodal/devices/{i02_1 → beamlines/i02_1}/__init__.py +0 -0
  248. /dodal/devices/{i02_2 → beamlines/i02_2}/__init__.py +0 -0
  249. /dodal/devices/{i03 → beamlines/i03}/__init__.py +0 -0
  250. /dodal/devices/{i03 → beamlines/i03}/constants.py +0 -0
  251. /dodal/devices/{i04 → beamlines/i04}/__init__.py +0 -0
  252. /dodal/devices/{i04 → beamlines/i04}/constants.py +0 -0
  253. /dodal/devices/{i05 → beamlines/i05}/enums.py +0 -0
  254. /dodal/devices/{i07 → beamlines/i07}/__init__.py +0 -0
  255. /dodal/devices/{i09 → beamlines/i09}/enums.py +0 -0
  256. /dodal/devices/{i09_1 → beamlines/i09_1}/__init__.py +0 -0
  257. /dodal/devices/{i09_1 → beamlines/i09_1}/enums.py +0 -0
  258. /dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/__init__.py +0 -0
  259. /dodal/devices/{i09_2_shared → beamlines/i09_2_shared}/__init__.py +0 -0
  260. /dodal/devices/{i09_2_shared → beamlines/i09_2_shared}/i09_apple2.py +0 -0
  261. /dodal/devices/{i10 → beamlines/i10}/__init__.py +0 -0
  262. /dodal/devices/{i10 → beamlines/i10}/i10_setting_data.py +0 -0
  263. /dodal/devices/{i10 → beamlines/i10}/mirrors.py +0 -0
  264. /dodal/devices/{i10 → beamlines/i10}/rasor/__init__.py +0 -0
  265. /dodal/devices/{i10 → beamlines/i10}/rasor/rasor_scaler_cards.py +0 -0
  266. /dodal/devices/{i11 → beamlines/i10_1/electromagnet}/__init__.py +0 -0
  267. /dodal/devices/{i13_1 → beamlines/i11}/__init__.py +0 -0
  268. /dodal/devices/{i15 → beamlines/i13_1}/__init__.py +0 -0
  269. /dodal/devices/{i13_1 → beamlines/i13_1}/merlin_controller.py +0 -0
  270. /dodal/devices/{i17 → beamlines/i15}/__init__.py +0 -0
  271. /dodal/devices/{i15 → beamlines/i15}/laue.py +0 -0
  272. /dodal/devices/{i15 → beamlines/i15}/motors.py +0 -0
  273. /dodal/devices/{i15 → beamlines/i15}/rail.py +0 -0
  274. /dodal/devices/{i18 → beamlines/i17}/__init__.py +0 -0
  275. /dodal/devices/{i19 → beamlines/i18}/__init__.py +0 -0
  276. /dodal/devices/{i18 → beamlines/i18}/kb_mirror.py +0 -0
  277. /dodal/devices/{i19/access_controlled → beamlines/i19}/__init__.py +0 -0
  278. /dodal/devices/{i20_1 → beamlines/i19/access_controlled}/__init__.py +0 -0
  279. /dodal/devices/{i19 → beamlines/i19}/access_controlled/hutch_access.py +0 -0
  280. /dodal/devices/{i19 → beamlines/i19}/beamstop.py +0 -0
  281. /dodal/devices/{i19 → beamlines/i19}/diffractometer.py +0 -0
  282. /dodal/devices/{i22 → beamlines/i20_1}/__init__.py +0 -0
  283. /dodal/devices/{i21 → beamlines/i21}/enums.py +0 -0
  284. /dodal/devices/{i24 → beamlines/i22}/__init__.py +0 -0
  285. /dodal/devices/{p99 → beamlines/i24}/__init__.py +0 -0
  286. /dodal/devices/{i24 → beamlines/i24}/aperture.py +0 -0
  287. /dodal/devices/{i24 → beamlines/i24}/focus_mirrors.py +0 -0
  288. /dodal/devices/{i24 → beamlines/i24}/vgonio.py +0 -0
  289. /dodal/devices/{p60 → beamlines/p60}/__init__.py +0 -0
  290. /dodal/devices/{p60 → beamlines/p60}/enums.py +0 -0
  291. /dodal/devices/{p99 → beamlines/p99}/sample_stage.py +0 -0
  292. /dodal/devices/insertion_device/{id_enum.py → enum.py} +0 -0
dodal/beamlines/i11.py CHANGED
@@ -1,25 +1,30 @@
1
+ from pathlib import Path
2
+
3
+ from ophyd_async.core import StaticPathProvider, UUIDFilenameProvider
4
+
1
5
  from dodal.common.beamlines.beamline_utils import (
2
6
  device_factory,
3
7
  get_path_provider,
8
+ set_path_provider,
4
9
  )
5
10
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
6
11
  from dodal.common.beamlines.device_helpers import DET_SUFFIX
7
- from dodal.devices.cryostream import OxfordCryoStream
8
- from dodal.devices.eurotherm import (
9
- EurothermGeneral,
10
- UpdatingEurothermGeneral,
11
- )
12
- from dodal.devices.i11.cyberstar_blower import (
12
+ from dodal.devices.beamlines.i11.cyberstar_blower import (
13
13
  AutotunedCyberstarBlower,
14
14
  CyberstarBlower,
15
15
  )
16
- from dodal.devices.i11.diff_stages import (
16
+ from dodal.devices.beamlines.i11.diff_stages import (
17
17
  DiffractometerBase,
18
18
  DiffractometerStage,
19
19
  )
20
- from dodal.devices.i11.mythen import Mythen3
21
- from dodal.devices.i11.nx100robot import NX100Robot
22
- from dodal.devices.i11.spinner import Spinner
20
+ from dodal.devices.beamlines.i11.mythen import Mythen3
21
+ from dodal.devices.beamlines.i11.nx100robot import NX100Robot
22
+ from dodal.devices.beamlines.i11.spinner import Spinner
23
+ from dodal.devices.cryostream import OxfordCryoStream
24
+ from dodal.devices.eurotherm import (
25
+ EurothermGeneral,
26
+ UpdatingEurothermGeneral,
27
+ )
23
28
  from dodal.devices.slits import Slits
24
29
  from dodal.devices.synchrotron import Synchrotron
25
30
  from dodal.log import set_beamline as set_log_beamline
@@ -30,10 +35,17 @@ PREFIX = BeamlinePrefix(BL)
30
35
  set_log_beamline(BL)
31
36
  set_utils_beamline(BL)
32
37
 
38
+ # This should be removed when the DeviceManager is adopted
39
+ try:
40
+ get_path_provider()
41
+ except NameError:
42
+ # If one hasn't already been set, use a default to stop things crashing
43
+ set_path_provider(StaticPathProvider(UUIDFilenameProvider(), Path("/tmp")))
44
+
33
45
 
34
46
  @device_factory()
35
47
  def mythen3() -> Mythen3:
36
- """Mythen3 Detector from PSI"""
48
+ """Mythen3 Detector from PSI."""
37
49
  return Mythen3(
38
50
  prefix=f"{PREFIX.beamline_prefix}-EA-DET-07:",
39
51
  path_provider=get_path_provider(),
@@ -44,19 +56,19 @@ def mythen3() -> Mythen3:
44
56
 
45
57
  @device_factory()
46
58
  def ocs1() -> OxfordCryoStream:
47
- """i11 Oxford Cryostream 700 plus without cryoshutter"""
59
+ """i11 Oxford Cryostream 700 plus without cryoshutter."""
48
60
  return OxfordCryoStream(f"{PREFIX.beamline_prefix}-CG-CSTRM-01:")
49
61
 
50
62
 
51
63
  @device_factory()
52
64
  def ocs2() -> OxfordCryoStream:
53
- """i11 Oxford Cryostream 700 standard without cryoshutter"""
65
+ """i11 Oxford Cryostream 700 standard without cryoshutter."""
54
66
  return OxfordCryoStream(f"{PREFIX.beamline_prefix}-CG-CSTRM-02:")
55
67
 
56
68
 
57
69
  @device_factory()
58
70
  def diff_stage() -> DiffractometerStage:
59
- """Stage that contains the rotation axes, theta, two_theta, delta, spos"""
71
+ """Stage that contains the rotation axes, theta, two_theta, delta, spos."""
60
72
  return DiffractometerStage(prefix=f"{PREFIX.beamline_prefix}-MO-DIFF-01:")
61
73
 
62
74
 
@@ -67,7 +79,7 @@ def diff_base() -> DiffractometerBase:
67
79
 
68
80
  @device_factory()
69
81
  def csb1() -> CyberstarBlower[UpdatingEurothermGeneral]:
70
- """Cyberstar hot air blower 1 with Eurotherm Controller and updating PID"""
82
+ """Cyberstar hot air blower 1 with Eurotherm Controller and updating PID."""
71
83
  return CyberstarBlower(
72
84
  prefix=f"{PREFIX.beamline_prefix}-EA-BLOW-01:",
73
85
  controller_type=UpdatingEurothermGeneral,
@@ -76,7 +88,7 @@ def csb1() -> CyberstarBlower[UpdatingEurothermGeneral]:
76
88
 
77
89
  @device_factory()
78
90
  def csb2() -> AutotunedCyberstarBlower[EurothermGeneral]:
79
- """Cyberstar hot air blower 2 with autotuneable Eurotherm Controller"""
91
+ """Cyberstar hot air blower 2 with autotuneable Eurotherm Controller."""
80
92
  return AutotunedCyberstarBlower(
81
93
  prefix=f"{PREFIX.beamline_prefix}-EA-BLOW-02:LOOP1:",
82
94
  controller_type=EurothermGeneral,
@@ -86,13 +98,14 @@ def csb2() -> AutotunedCyberstarBlower[EurothermGeneral]:
86
98
  @device_factory()
87
99
  def sample_robot() -> NX100Robot:
88
100
  """The sample robot arm and carosel on i11 that moves
89
- and loads samples on/off the spinner"""
101
+ and loads samples on/off the spinner.
102
+ """
90
103
  return NX100Robot(prefix=f"{PREFIX.beamline_prefix}-EA-ROBOT-01:")
91
104
 
92
105
 
93
106
  @device_factory()
94
107
  def spinner() -> Spinner:
95
- """Sample spinner for powder averaging"""
108
+ """Sample spinner for powder averaging."""
96
109
  return Spinner(prefix=f"{PREFIX.beamline_prefix}-EA-ENV-01:")
97
110
 
98
111
 
dodal/beamlines/i13_1.py CHANGED
@@ -9,7 +9,7 @@ from dodal.common.beamlines.beamline_utils import (
9
9
  )
10
10
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
11
11
  from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
12
- from dodal.devices.i13_1.merlin import Merlin
12
+ from dodal.devices.beamlines.i13_1.merlin import Merlin
13
13
  from dodal.devices.motors import XYZStage
14
14
  from dodal.log import set_beamline as set_log_beamline
15
15
  from dodal.utils import BeamlinePrefix, get_beamline_name
dodal/beamlines/i15.py CHANGED
@@ -2,15 +2,15 @@ from ophyd_async.epics.motor import Motor
2
2
 
3
3
  from dodal.common.beamlines.beamline_utils import device_factory
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.i15.dcm import DCM
6
- from dodal.devices.i15.focussing_mirror import (
5
+ from dodal.devices.beamlines.i15.dcm import DCM
6
+ from dodal.devices.beamlines.i15.focussing_mirror import (
7
7
  FocusingMirror,
8
8
  FocusingMirrorHorizontal,
9
9
  FocusingMirrorVertical,
10
10
  FocusingMirrorWithRoll,
11
11
  )
12
- from dodal.devices.i15.jack import JackX, JackY
13
- from dodal.devices.i15.motors import UpstreamDownstreamPair
12
+ from dodal.devices.beamlines.i15.jack import JackX, JackY
13
+ from dodal.devices.beamlines.i15.motors import UpstreamDownstreamPair
14
14
  from dodal.devices.motors import (
15
15
  SixAxisGonioKappaPhi,
16
16
  XYStage,
@@ -66,7 +66,7 @@ def det1z() -> Motor:
66
66
 
67
67
  @device_factory()
68
68
  def det2z() -> Motor:
69
- """Deliberately the same as eht2dtx"""
69
+ """Deliberately the same as eht2dtx."""
70
70
  return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-03:DETECTOR2:Z")
71
71
 
72
72
 
@@ -85,7 +85,7 @@ def djack1() -> JackX:
85
85
 
86
86
  @device_factory()
87
87
  def eht2dtx() -> Motor:
88
- """Deliberately the same as det2z"""
88
+ """Deliberately the same as det2z."""
89
89
  return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-03:DETECTOR2:Z")
90
90
 
91
91
 
dodal/beamlines/i15_1.py CHANGED
@@ -2,10 +2,10 @@ from ophyd_async.epics.motor import Motor
2
2
 
3
3
  from dodal.common.beamlines.beamline_utils import device_factory
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.i15.laue import LaueMonochrometer
6
- from dodal.devices.i15.motors import NumberedTripleAxisStage
7
- from dodal.devices.i15.multilayer_mirror import MultiLayerMirror
8
- from dodal.devices.i15.rail import Rail
5
+ from dodal.devices.beamlines.i15.laue import LaueMonochrometer
6
+ from dodal.devices.beamlines.i15.motors import NumberedTripleAxisStage
7
+ from dodal.devices.beamlines.i15.multilayer_mirror import MultiLayerMirror
8
+ from dodal.devices.beamlines.i15.rail import Rail
9
9
  from dodal.devices.motors import XYPhiStage, XYStage, YZStage
10
10
  from dodal.devices.slits import Slits
11
11
  from dodal.devices.synchrotron import Synchrotron
@@ -41,13 +41,13 @@ def base_y() -> Motor:
41
41
 
42
42
  @device_factory()
43
43
  def blower_y() -> Motor:
44
- """Same motor as blowerZ"""
44
+ """Same motor as blowerZ."""
45
45
  return Motor(f"{PREFIX.beamline_prefix}-EA-BLOWR-01:TLATE")
46
46
 
47
47
 
48
48
  @device_factory()
49
49
  def blower_z() -> Motor:
50
- """Same motor as blowerY"""
50
+ """Same motor as blowerY."""
51
51
  return Motor(f"{PREFIX.beamline_prefix}-EA-BLOWR-01:TLATE")
52
52
 
53
53
 
dodal/beamlines/i16.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
2
2
  from dodal.device_manager import DeviceManager
3
+ from dodal.devices.temperture_controller import Lakeshore336, Lakeshore340
3
4
  from dodal.devices.undulator import UndulatorInMm, UndulatorOrder
4
5
  from dodal.log import set_beamline as set_log_beamline
5
6
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -21,3 +22,13 @@ def id() -> UndulatorInMm:
21
22
  @devices.factory()
22
23
  def harmonic() -> UndulatorOrder:
23
24
  return UndulatorOrder()
25
+
26
+
27
+ @devices.factory()
28
+ def lakeshore340() -> Lakeshore340:
29
+ return Lakeshore340(prefix=f"{PREFIX.beamline_prefix}-EA-LS340-01:")
30
+
31
+
32
+ @devices.factory()
33
+ def lakeshore336() -> Lakeshore336:
34
+ return Lakeshore336(prefix=f"{PREFIX.beamline_prefix}-EA-LS336-01:")
dodal/beamlines/i17.py CHANGED
@@ -1,13 +1,12 @@
1
1
  """The I17 hardware doesn't exist yet, but this configuration file is useful for
2
- creating plans in sm-bluesky as devices build up."""
2
+ creating plans in sm-bluesky as devices build up.
3
+ """
3
4
 
4
5
  from ophyd_async.core import StrictEnum
5
6
 
6
- from dodal.common.beamlines.beamline_utils import (
7
- device_factory,
8
- )
9
7
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
10
- from dodal.devices.i17.i17_apple2 import I17Apple2Controller
8
+ from dodal.device_manager import DeviceManager
9
+ from dodal.devices.beamlines.i17.i17_apple2 import I17Apple2Controller
11
10
  from dodal.devices.insertion_device import (
12
11
  Apple2,
13
12
  Apple2Controller,
@@ -29,18 +28,20 @@ PREFIX = BeamlinePrefix(BL)
29
28
  set_log_beamline(BL)
30
29
  set_utils_beamline(BL)
31
30
 
31
+ devices = DeviceManager()
32
+
32
33
 
33
34
  class I17Grating(StrictEnum):
34
35
  AU_400 = "400 line/mm Au"
35
36
  SI_400 = "400 line/mm Si"
36
37
 
37
38
 
38
- @device_factory()
39
+ @devices.factory
39
40
  def synchrotron() -> Synchrotron:
40
41
  return Synchrotron()
41
42
 
42
43
 
43
- @device_factory(skip=True)
44
+ @devices.factory(skip=True)
44
45
  def pgm() -> PlaneGratingMonochromator:
45
46
  return PlaneGratingMonochromator(
46
47
  prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:",
@@ -49,12 +50,12 @@ def pgm() -> PlaneGratingMonochromator:
49
50
  )
50
51
 
51
52
 
52
- @device_factory()
53
+ @devices.factory(skip=True)
53
54
  def id_gap() -> UndulatorGap:
54
55
  return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
55
56
 
56
57
 
57
- @device_factory()
58
+ @devices.factory(skip=True)
58
59
  def id_phase() -> UndulatorPhaseAxes:
59
60
  return UndulatorPhaseAxes(
60
61
  prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
@@ -65,36 +66,44 @@ def id_phase() -> UndulatorPhaseAxes:
65
66
  )
66
67
 
67
68
 
68
- @device_factory(skip=True)
69
- def id() -> Apple2:
70
- """I17 insertion device:"""
71
- return Apple2(
72
- id_gap=id_gap(),
73
- id_phase=id_phase(),
69
+ @devices.factory(skip=True)
70
+ def id(
71
+ id_gap: UndulatorGap, id_phase: UndulatorPhaseAxes
72
+ ) -> Apple2[UndulatorPhaseAxes]:
73
+ return Apple2[UndulatorPhaseAxes](
74
+ id_gap=id_gap,
75
+ id_phase=id_phase,
74
76
  )
75
77
 
76
78
 
77
- @device_factory(skip=True)
78
- def id_controller() -> Apple2Controller:
79
+ @devices.factory(skip=True)
80
+ def id_controller(
81
+ id: Apple2[UndulatorPhaseAxes],
82
+ ) -> Apple2Controller[Apple2[UndulatorPhaseAxes]]:
79
83
  """I17 insertion device controller with dummy energy to motor_converter."""
80
84
  return I17Apple2Controller(
81
- apple2=id(),
85
+ apple2=id,
82
86
  gap_energy_motor_lut=EnergyMotorLookup(lut=LookupTable()),
83
87
  phase_energy_motor_lut=EnergyMotorLookup(lut=LookupTable()),
84
88
  )
85
89
 
86
90
 
87
- @device_factory(skip=True)
88
- def id_energy() -> InsertionDeviceEnergy:
89
- return InsertionDeviceEnergy(id_controller=id_controller())
91
+ @devices.factory(skip=True)
92
+ def id_energy(
93
+ id_controller: Apple2Controller[Apple2[UndulatorPhaseAxes]],
94
+ ) -> InsertionDeviceEnergy:
95
+ return InsertionDeviceEnergy(id_controller=id_controller)
90
96
 
91
97
 
92
- @device_factory(skip=True)
93
- def id_polarisation() -> InsertionDevicePolarisation:
94
- return InsertionDevicePolarisation(id_controller=id_controller())
98
+ @devices.factory(skip=True)
99
+ def id_polarisation(
100
+ id_controller: Apple2Controller[Apple2[UndulatorPhaseAxes]],
101
+ ) -> InsertionDevicePolarisation:
102
+ return InsertionDevicePolarisation(id_controller=id_controller)
95
103
 
96
104
 
97
- @device_factory(skip=True)
98
- def energy() -> BeamEnergy:
99
- """Beam energy."""
100
- return BeamEnergy(id_energy=id_energy(), mono=pgm().energy)
105
+ @devices.factory(skip=True)
106
+ def energy(
107
+ id_energy: InsertionDeviceEnergy, pgm: PlaneGratingMonochromator
108
+ ) -> BeamEnergy:
109
+ return BeamEnergy(id_energy=id_energy, mono=pgm.energy)
dodal/beamlines/i18.py CHANGED
@@ -12,13 +12,13 @@ from dodal.common.visit import (
12
12
  LocalDirectoryServiceClient,
13
13
  StaticVisitPathProvider,
14
14
  )
15
+ from dodal.devices.beamlines.i18.diode import Diode
16
+ from dodal.devices.beamlines.i18.kb_mirror import KBMirror
15
17
  from dodal.devices.common_dcm import (
16
18
  DoubleCrystalMonochromatorWithDSpacing,
17
19
  PitchAndRollCrystal,
18
20
  RollCrystal,
19
21
  )
20
- from dodal.devices.i18.diode import Diode
21
- from dodal.devices.i18.kb_mirror import KBMirror
22
22
  from dodal.devices.motors import XYStage, XYZThetaStage
23
23
  from dodal.devices.slits import Slits
24
24
  from dodal.devices.synchrotron import Synchrotron
@@ -60,8 +60,7 @@ def undulator() -> UndulatorInKeV:
60
60
  # See https://github.com/DiamondLightSource/dodal/issues/1180
61
61
  @device_factory(skip=True)
62
62
  def dcm() -> DoubleCrystalMonochromatorWithDSpacing:
63
- """
64
- A double crystal monocromator device, used to select the beam energy.
63
+ """A double crystal monocromator device, used to select the beam energy.
65
64
 
66
65
  Once spacing is added Si111 d-spacing is 3.135 angsterm , and Si311 is 1.637
67
66
  calculations are in gda/config/lookupTables/Si111/eV_Deg_converter.xml
dodal/beamlines/i19_1.py CHANGED
@@ -1,20 +1,23 @@
1
- from dodal.common.beamlines.beamline_utils import (
2
- device_factory,
3
- )
4
1
  from dodal.common.beamlines.beamline_utils import (
5
2
  set_beamline as set_utils_beamline,
6
3
  )
7
- from dodal.devices.i19.access_controlled.attenuator_motor_squad import (
4
+ from dodal.device_manager import DeviceManager
5
+ from dodal.devices.beamlines.i19.access_controlled.attenuator_motor_squad import (
8
6
  AttenuatorMotorSquad,
9
7
  )
10
- from dodal.devices.i19.access_controlled.blueapi_device import HutchState
11
- from dodal.devices.i19.access_controlled.shutter import (
8
+ from dodal.devices.beamlines.i19.access_controlled.blueapi_device import HutchState
9
+ from dodal.devices.beamlines.i19.access_controlled.piezo_control import (
10
+ AccessControlledPiezoActuator,
11
+ FocusingMirrorName,
12
+ )
13
+ from dodal.devices.beamlines.i19.access_controlled.shutter import (
12
14
  AccessControlledShutter,
13
- HutchState,
14
15
  )
15
- from dodal.devices.i19.beamstop import BeamStop
16
+ from dodal.devices.beamlines.i19.beamstop import BeamStop
17
+ from dodal.devices.beamlines.i19.pin_tip import PinTipCentreHolder
16
18
  from dodal.devices.oav.oav_detector import OAVBeamCentreFile
17
19
  from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
20
+ from dodal.devices.oav.pin_image_recognition import PinTipDetection
18
21
  from dodal.devices.synchrotron import Synchrotron
19
22
  from dodal.devices.zebra.zebra import Zebra
20
23
  from dodal.devices.zebra.zebra_constants_mapping import (
@@ -39,42 +42,80 @@ I19_1_ZEBRA_MAPPING = ZebraMapping(
39
42
  sources=ZebraSources(),
40
43
  )
41
44
 
42
- ZOOM_PARAMS_FILE = (
43
- "/dls_sw/i19-1/software/gda_versions/gda/config/xml/jCameraManZoomLevels.xml"
44
- )
45
- DISPLAY_CONFIG = "/dls_sw/i19-1/software/daq_configuration/domain/display.configuration"
45
+ ZOOM_PARAMS_FILE = "/dls_sw/i19-1/software/bluesky/jCameraManZoomLevels.xml"
46
+ DISPLAY_CONFIG = "/dls_sw/i19-1/software/bluesky/display.configuration"
47
+
48
+ devices = DeviceManager()
46
49
 
47
50
 
48
- @device_factory()
51
+ @devices.factory()
49
52
  def attenuator_motor_squad() -> AttenuatorMotorSquad:
50
53
  return AttenuatorMotorSquad(
51
54
  hutch=HutchState.EH1, instrument_session=I19_1_COMMISSIONING_INSTR_SESSION
52
55
  )
53
56
 
54
57
 
55
- # Needs to wait until enum is fixed on the beamline
56
- # See https://github.com/DiamondLightSource/dodal/issues/1150
57
- @device_factory()
58
+ @devices.factory()
58
59
  def beamstop() -> BeamStop:
59
- """Get the i19-1 beamstop device, instantiate it if it hasn't already been.
60
- If this is called when already instantiated in i19-1, it will return the existing object.
61
- """
62
60
  return BeamStop(prefix=f"{PREFIX.beamline_prefix}-RS-ABSB-01:")
63
61
 
64
62
 
65
- @device_factory()
66
- def oav() -> OAVBeamCentreFile:
63
+ @devices.fixture
64
+ def oav_config() -> OAVConfigBeamCentre:
65
+ return OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG)
66
+
67
+
68
+ @devices.factory()
69
+ def oav1(oav_config: OAVConfigBeamCentre) -> OAVBeamCentreFile:
70
+ """The OAV1 camera, placed next to the beampipe along with the Zoom lens."""
67
71
  return OAVBeamCentreFile(
68
72
  prefix=f"{PREFIX.beamline_prefix}-EA-OAV-01:",
69
- config=OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
73
+ config=oav_config,
70
74
  )
71
75
 
72
76
 
73
- @device_factory()
77
+ @devices.factory()
78
+ def oav2(oav_config: OAVConfigBeamCentre) -> OAVBeamCentreFile:
79
+ """The OAV2 camera, placed diagonally to the sample. It has no FZoom."""
80
+ return OAVBeamCentreFile(
81
+ prefix=f"{PREFIX.beamline_prefix}-EA-OAV-02:",
82
+ config=oav_config,
83
+ )
84
+
85
+
86
+ @devices.factory()
87
+ def pin_tip_centre1() -> PinTipCentreHolder:
88
+ """I19-1 temporary device to hold the pin tip centre position for OAV1."""
89
+ return PinTipCentreHolder(
90
+ prefix=f"{PREFIX.beamline_prefix}-EA-OAV-01:",
91
+ overlay_channel=8,
92
+ )
93
+
94
+
95
+ @devices.factory()
96
+ def pin_tip_centre2() -> PinTipCentreHolder:
97
+ """I19-1 temporary device to hold the pin tip centre position for OAV2."""
98
+ return PinTipCentreHolder(
99
+ prefix=f"{PREFIX.beamline_prefix}-EA-OAV-02:",
100
+ overlay_channel=8,
101
+ )
102
+
103
+
104
+ @devices.factory()
105
+ def pin_tip_detection1() -> PinTipDetection:
106
+ """Pin tip detection device for OAV1 camera."""
107
+ return PinTipDetection(f"{PREFIX.beamline_prefix}-EA-OAV-01:")
108
+
109
+
110
+ @devices.factory()
111
+ def pin_tip_detection2() -> PinTipDetection:
112
+ """Pin tip detection device for OAV2 camera."""
113
+ return PinTipDetection(f"{PREFIX.beamline_prefix}-EA-OAV-02:")
114
+
115
+
116
+ @devices.factory()
74
117
  def shutter() -> AccessControlledShutter:
75
- """Get the i19-1 hutch shutter device, instantiate it if it hasn't already been.
76
- If this is called when already instantiated, it will return the existing object.
77
- """
118
+ """Access controlled wrapper for the experiment shutter."""
78
119
  return AccessControlledShutter(
79
120
  prefix=f"{PREFIX.beamline_prefix}-PS-SHTR-01:",
80
121
  hutch=HutchState.EH1,
@@ -82,22 +123,42 @@ def shutter() -> AccessControlledShutter:
82
123
  )
83
124
 
84
125
 
85
- @device_factory()
126
+ @devices.factory()
86
127
  def synchrotron() -> Synchrotron:
87
- """Get the i19-1 synchrotron device, instantiate it if it hasn't already been.
88
- If this is called when already instantiated in i19-1, it will return the existing object.
89
- """
90
128
  return Synchrotron()
91
129
 
92
130
 
93
131
  # NOTE EH1 uses the Zebra 2 box. While a Zebra 1 box exists and is connected
94
132
  # on the beamline, it is currently not in use
95
- @device_factory()
133
+ @devices.factory()
96
134
  def zebra() -> Zebra:
97
- """Get the i19-1 zebra device, instantiate it if it hasn't already been.
98
- If this is called when already instantiated in i19-1, it will return the existing object.
99
- """
100
135
  return Zebra(
101
136
  mapping=I19_1_ZEBRA_MAPPING,
102
137
  prefix=f"{PREFIX.beamline_prefix}-EA-ZEBRA-02:",
103
138
  )
139
+
140
+
141
+ @devices.factory()
142
+ def hfm_piezo() -> AccessControlledPiezoActuator:
143
+ """Get the i19-1 access controlled hfm piezo device, instantiate it if it hasn't already been.
144
+ If this is called when already instantiated, it will return the existing object.
145
+ """
146
+ return AccessControlledPiezoActuator(
147
+ prefix=f"{PREFIX.beamline_prefix}-OP-HFM-01:",
148
+ mirror_type=FocusingMirrorName.HFM,
149
+ hutch=HutchState.EH1,
150
+ instrument_session=I19_1_COMMISSIONING_INSTR_SESSION,
151
+ )
152
+
153
+
154
+ @devices.factory()
155
+ def vfm_piezo() -> AccessControlledPiezoActuator:
156
+ """Get the i19-1 access controlled vfm piezo device, instantiate it if it hasn't already been.
157
+ If this is called when already instantiated, it will return the existing object.
158
+ """
159
+ return AccessControlledPiezoActuator(
160
+ prefix=f"{PREFIX.beamline_prefix}-OP-VFM-01:",
161
+ mirror_type=FocusingMirrorName.VFM,
162
+ hutch=HutchState.EH1,
163
+ instrument_session=I19_1_COMMISSIONING_INSTR_SESSION,
164
+ )