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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dls-dodal
3
- Version: 1.34.1
3
+ Version: 1.36.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
216
216
  License-File: LICENSE
217
217
  Requires-Dist: click
218
218
  Requires-Dist: ophyd
219
- Requires-Dist: ophyd-async <0.8,>=0.7.0a1
219
+ Requires-Dist: ophyd-async ==0.8.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -233,11 +233,13 @@ Requires-Dist: aiofiles
233
233
  Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
235
235
  Requires-Dist: deepdiff
236
+ Requires-Dist: scanspec >=0.7.3
236
237
  Provides-Extra: dev
237
238
  Requires-Dist: black ; extra == 'dev'
238
239
  Requires-Dist: diff-cover ; extra == 'dev'
239
240
  Requires-Dist: mypy ; extra == 'dev'
240
241
  Requires-Dist: myst-parser ; extra == 'dev'
242
+ Requires-Dist: ophyd-async[sim] ; extra == 'dev'
241
243
  Requires-Dist: pipdeptree ; extra == 'dev'
242
244
  Requires-Dist: pre-commit ; extra == 'dev'
243
245
  Requires-Dist: psutil ; extra == 'dev'
@@ -0,0 +1,152 @@
1
+ dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
2
+ dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
3
+ dodal/_version.py,sha256=x0utt4SxT0Rvm84NfrkoVlob-vmxNptNpw0IPhaGKKU,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=DIlAnz5gqaqqTB9NvAwl9Mk-em6idE7Rd29mBkAmvXc,12048
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=0_-Q1teOnty76-fHLI_ZudziRAq3DIkH8KeK7Db1KZ4,10246
19
+ dodal/beamlines/i23.py,sha256=2j5qLoqE_hg9ETHqNkOVu7LLkVB8qalgXeORnVYKN_I,1075
20
+ dodal/beamlines/i24.py,sha256=UBuxiql4JQRYddr1Mp017Edzz0HSMwi4ghJ9HdBNluk,6467
21
+ dodal/beamlines/p38.py,sha256=EeJJxfw7uMy6jPA_D7ug0ubAhTBCndPwjvcvR1T1lfw,8238
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/crystal_metadata.py,sha256=IKhe_nCbsuIV2W5OvPzIQ-FXfusQ2d7VJ-xH899dZIc,1924
28
+ dodal/common/maths.py,sha256=K9x7iL3xXLtWYTV-xlFHDNSTIL9a2UP3Ws7wr6Dm2rQ,1803
29
+ dodal/common/signal_utils.py,sha256=-p4h7xtGPp13t6HTjgFGcs5nN22kVArlkfCPVjpLuRU,1728
30
+ dodal/common/types.py,sha256=fkL7UOwDbe3v2_VJ5f1W5RxR98Wx-Ra-LxUZWkNDtls,486
31
+ dodal/common/udc_directory_provider.py,sha256=H-9f6uSVGuA8jyiErPi8ikCw1JDrhRAJv-qPpN-HwJk,2379
32
+ dodal/common/visit.py,sha256=2UbbCmgOjZWSCxFzE9RYiTJhA_IoVOegma-Jv-PJqps,5787
33
+ dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ dodal/common/beamlines/beamline_parameters.py,sha256=oIPHooqu5vTAwfqZutsKbzwdi9nvFF8568Mz7jrK5rI,3618
35
+ dodal/common/beamlines/beamline_utils.py,sha256=6RCOnjVcrocfOyKDb2gBlvu2EymS9tUgvQexKrUjUV4,4335
36
+ dodal/common/beamlines/device_helpers.py,sha256=s79js7no9k8JMfG7NvdmFomSP5m5VDQ6th_Hsbx1znA,939
37
+ dodal/devices/CTAB.py,sha256=5_261Ox6NG2cJIzzwnjWz289BG0nZoE0wKOaI5V5jqM,1998
38
+ dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ dodal/devices/adsim.py,sha256=dMU0TKIuiODHYFHQOH4_5UvB8iJtaJEtjqaEDGjcU-w,311
40
+ dodal/devices/aperture.py,sha256=yyw2ei3gM_lmZWDQ6VTbydB58RCDTen_nqBZyoTP2IM,583
41
+ dodal/devices/aperturescatterguard.py,sha256=PRNnGbxYKFWoa1m70Mz-6Ta4NtFG0ShUprBvv2viUeI,8993
42
+ dodal/devices/apple2_undulator.py,sha256=HtjHiDX80n_nzabuFcUioH-gWH1a6VjZzw_xStq7S4w,22470
43
+ dodal/devices/attenuator.py,sha256=6IAPr8XmLxUOHC8g7Zt8MR1trMEDOxO5JkLphd6LbRg,2582
44
+ dodal/devices/backlight.py,sha256=nQIr3J-I-OXnOUoWmr3ruy3nhq_q2US1KXC4NrGG_2U,1634
45
+ dodal/devices/cryostream.py,sha256=K-ldpredpeDTzNt4qtQMg99nKJNjBYoXBbK0WJGexzw,656
46
+ dodal/devices/dcm.py,sha256=cc531sQbed1yX6pWhizUvszLhQczWatMYMZ3cEp3FHA,2559
47
+ dodal/devices/diamond_filter.py,sha256=A--RHd7WuH-IBhvCyENcRCTP4K-mm_Kqpa0pojpHZow,1098
48
+ dodal/devices/eiger.py,sha256=VGGgkSz8AzSOP3rpehs2GwPHnOGz0OKsRP6U_FYbBA4,15337
49
+ dodal/devices/eiger_odin.py,sha256=oZl16K-Qb2yL6tK1fyDQvqbbhhvYMSVcf_e2CjlqMa4,7409
50
+ dodal/devices/fast_grid_scan.py,sha256=DfO4w8ivQJACurYO_OEoXYTAMa2qUc5P-bxYCkjRKkQ,11967
51
+ dodal/devices/fluorescence_detector_motion.py,sha256=-1qCSvW0PdT0m6BcoLxrtc0OJ5UDIBsEe11EOLr-gFw,501
52
+ dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
53
+ dodal/devices/focusing_mirror.py,sha256=Jgw-06PyYkyRsue3K9yJmFwjLhdOgOHZX9yilUOG1oQ,6163
54
+ dodal/devices/hutch_shutter.py,sha256=WXY9JwqAa5prbf72IP7_MTKndPDtAltCpPJlNbq-F_0,3313
55
+ dodal/devices/ipin.py,sha256=eq5jlKw7WGQi8VLrAWpaAIsZmfiVf-5Q0td_B22H6A4,473
56
+ dodal/devices/linkam3.py,sha256=fRcTxXF772f6lZIB0L7vhy5i-YzDGth0rQEuC-GH64M,3864
57
+ dodal/devices/logging_ophyd_device.py,sha256=dUVE-XhWA56WUXez0mrc4sf322CXY3MVLreTycO5j_A,668
58
+ dodal/devices/motors.py,sha256=dYa9T6FDMTbr8GvTb-lXtk3v4QEqAWRuGmHIO20fazQ,1039
59
+ dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
60
+ dodal/devices/pgm.py,sha256=am-AST9iTqma1PkGOKLozqAokZWbJUbM3TNcqXzB-6A,1132
61
+ dodal/devices/qbpm.py,sha256=FfrWWAHHtYv3fGRT1qljyPpAwoHJYfbooT9CfKg-oXI,465
62
+ dodal/devices/robot.py,sha256=2f6PqqzcnWs2hFDUs08EUUoU-a4zJy6xaSwv1VQdEEw,5332
63
+ dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
64
+ dodal/devices/scatterguard.py,sha256=jx03in9QgaThWxD4t1S8_Llent2kWrn_hThJ9KkUWTk,330
65
+ dodal/devices/scintillator.py,sha256=PlD6cnJ39PTB_e7QrRspPliLYE4kL_K7ziJURzuxgdA,365
66
+ dodal/devices/slits.py,sha256=uOyVmbgeygiP6e5Z9t5zMPXLuVEWFfYg9GB3ZU76Tug,600
67
+ dodal/devices/smargon.py,sha256=tOHb9fjI8ZCIrboiC4OzS2j1QJDOKkAlQ2SORbBmaGo,4708
68
+ dodal/devices/status.py,sha256=hVrJS1yooQo6PRumRACoIEh-SKBUKxvBlQl-MtLFUMQ,327
69
+ dodal/devices/synchrotron.py,sha256=wLfClZ1lYQWA_D--UsM3NnKLG8bY8mvVsRYER6ob-Ew,2026
70
+ dodal/devices/tetramm.py,sha256=E4cSTz8BCr80IiKwmqr3iNoGxMb3d7_kn9_Zxqq3P_U,8442
71
+ dodal/devices/thawer.py,sha256=4t4yF4VDIrT_tQ8RwjmXe_hDMwVjR8A-4rDkPx19b28,1672
72
+ dodal/devices/turbo_slit.py,sha256=B6SPXqviMnG-U4PnUF1BdTO0LBKmTuwAUKRbxMiNJXo,1125
73
+ dodal/devices/undulator.py,sha256=BxYGDDvbdhA6yixL0fsS4bZMY2pmaMk-bvFpEGKA1pY,5210
74
+ dodal/devices/undulator_dcm.py,sha256=5hn3UZeu4CYXmfUVSdIxjrcIpStgeA1S744p0iIFp4I,2725
75
+ dodal/devices/watsonmarlow323_pump.py,sha256=rwU94YE6esgGLYdh-pe8nBo_3tvgp6brrrbPDrqp5_M,1406
76
+ dodal/devices/webcam.py,sha256=mef075ynDbzZ4pNAjfxR_9tdTTqF_rM7hAOVEEOV-Do,2408
77
+ dodal/devices/xbpm_feedback.py,sha256=j8MHhhE0feoe6R54zPKqS5EbQ0bEDR-nOpLHzHhnHHQ,1156
78
+ dodal/devices/zebra.py,sha256=p191eIGfmwM2EE1YJn6rRgChim2kqXl2KIYbMPUSOvg,9474
79
+ dodal/devices/zebra_controlled_shutter.py,sha256=5-SH5HoXp_6P-xAtfDFJKQq6mBDwreubuCULSz78fgw,1852
80
+ dodal/devices/areadetector/__init__.py,sha256=8IwLxuZMW0MOJpJp_ZDdlaE20hrtsH_PXWGaKgMiYs4,240
81
+ dodal/devices/areadetector/adaravis.py,sha256=Cqw_Mzrp_zODFxQ2LZBJzHp_DsZ6_dAITkZz8gYz_0w,3797
82
+ dodal/devices/areadetector/adsim.py,sha256=cIc9PRbKnftBk7Ut8d8CU_TVrin8EwcKHObP2n9VxWM,1876
83
+ dodal/devices/areadetector/adutils.py,sha256=4axFR3wtn-K-sjMVJyfTcu-8g35odf2cY8mTKv1gS-o,3093
84
+ dodal/devices/areadetector/plugins/CAM.py,sha256=sZzJm5Ez3eWfXZi_EB67wluhZmMQm1UyOc2bJFfzd1U,964
85
+ dodal/devices/areadetector/plugins/MJPG.py,sha256=QTsxCoWbofNpLMGPoOR2hWoM33KyntuLepbF0YmX0KE,3031
86
+ dodal/devices/detector/__init__.py,sha256=-RdACL3tzc3lLArWOoGNje48UUlv2fElOmGOz9yOuO0,317
87
+ dodal/devices/detector/det_dim_constants.py,sha256=LNrVMd0DbFEcnyNFmXosCP-VYaZ71Ajuv6inwo4Mg3U,2299
88
+ dodal/devices/detector/det_dist_to_beam_converter.py,sha256=7keoqZYfvgayePVx97lHYpcFRTJnQOfAk_PYP4EZTZQ,1951
89
+ dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
90
+ dodal/devices/detector/detector.py,sha256=syzkl52kGaMINXCXEviFuYPbgNatm5tioVPDmjgro8s,4768
91
+ dodal/devices/detector/detector_motion.py,sha256=UGDQriDWRluDZOZh1mDX9w_fPjMD-_BGe11kA36Kezs,1616
92
+ dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
94
+ dodal/devices/i10/i10_apple2.py,sha256=pEZes8wVCPHiOOcuVhEtqPvtnyphMxqbdp39mDp6xXQ,13165
95
+ dodal/devices/i10/i10_setting_data.py,sha256=Pc78L9asOLot9WmKcxkxpaefB3h4FeKIolHcGO4JnOU,161
96
+ dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
+ dodal/devices/i22/dcm.py,sha256=SQDh-Sj1OvplHZ9yTWblJwv8PJrUqxseDPupZOWmcLo,4701
98
+ dodal/devices/i22/fswitch.py,sha256=LSMoo9aDkH0SLcojbUh2NxTWIpUXHZxauTqThc3XtSk,3073
99
+ dodal/devices/i22/nxsas.py,sha256=a8oJXl5uhkh9zcb9rSZmVooU-SplzzO3EsAaHJZRfrQ,6086
100
+ dodal/devices/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
+ dodal/devices/i24/aperture.py,sha256=XlnOyQsvdTom1dJHVUg8CUSthq3jlBlZFOUaa9b1eZ4,837
102
+ dodal/devices/i24/beamstop.py,sha256=89ncXUisia1rn1Faf5iWg3k0QW6Rm99j1vq9A8l9Xv8,1221
103
+ dodal/devices/i24/dcm.py,sha256=Q3qqlgsiLJga2cgI8L4jczjyUgQixJh6QWg7shrFpTQ,1988
104
+ dodal/devices/i24/dual_backlight.py,sha256=mhbM4CzfjWQ883ebnG4oP1PLa1I4BlR30s-Ly5nXXb0,2023
105
+ dodal/devices/i24/i24_detector_motion.py,sha256=_HgdsZqFYY0tKqUgMzViHaPEUFXL3WlXXioGvDehRUw,364
106
+ dodal/devices/i24/pmac.py,sha256=lz9FYU_8YN8cC51ddTzdxcUA7MCVTA_ho3P0CHJ9zCo,6837
107
+ dodal/devices/i24/vgonio.py,sha256=sxSmcYZayVJPJz_D_91j9PmNor7Tbl1RGQFRrdtESlw,533
108
+ dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
+ dodal/devices/oav/microns_for_zoom_levels.json,sha256=kJTkbu2v6_Ccc_cDy7FRTX-gRhXxfYskjVqwBCZIqCQ,1209
110
+ dodal/devices/oav/oav_calculations.py,sha256=tr3Z2pFT7v_enAiNuSZV0esPsiHfRGrj7t0-g_Ix5Do,2363
111
+ dodal/devices/oav/oav_detector.py,sha256=9IXSSdgvZZyPtnhICEw9cHtf55vIrz1T_oBCr_sT7e4,4831
112
+ dodal/devices/oav/oav_parameters.py,sha256=gGN73TQGUiRzlIO5YKiqCRkjpTKsV6LFGo7Eu4Vs82g,6074
113
+ dodal/devices/oav/oav_to_redis_forwarder.py,sha256=pfhaW6Uo_1wDNfywyPkS5UTrY8yhkerhjgJfRMqrJRA,6259
114
+ dodal/devices/oav/utils.py,sha256=iSsl-PZLLwjgQ1M5JqcP5YGDCpfKQZv_GoJksnL-T3I,3130
115
+ dodal/devices/oav/pin_image_recognition/__init__.py,sha256=oFPGpRVokv7u6_JbERodtRzkU6wBF4F-HeQxbP96TWI,6597
116
+ dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
117
+ dodal/devices/oav/pin_image_recognition/utils.py,sha256=L9ypluYqeOFoS7gQuws-vTNc8LqaKl2ZIDNeQ2JaNpg,8592
118
+ dodal/devices/oav/snapshots/grid_overlay.py,sha256=CdvCdTKMCiwMwxm2lV28KpcIUSXlscZmWxb73_KKmiI,3694
119
+ dodal/devices/oav/snapshots/snapshot_with_beam_centre.py,sha256=J77RfE3AGTLNdWc6hvsRn2DUdupzuk_FTDGvdP0jqbU,1962
120
+ dodal/devices/oav/snapshots/snapshot_with_grid.py,sha256=EBoCtr1NmOKye2yQHqbTBxSg-DsEKFeyBtMFmOeGPRs,2269
121
+ dodal/devices/p99/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ dodal/devices/p99/sample_stage.py,sha256=dX6KlzZlwYViGiPSvdSrQQmgh_OLbHlnX1BJgcuu7j0,1128
123
+ dodal/devices/training_rig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ dodal/devices/training_rig/sample_stage.py,sha256=jktTp837ij8wor5LidE3AajCk95L7DebJotMlO7QwTE,355
125
+ dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ dodal/devices/util/adjuster_plans.py,sha256=XpJ1YJKoOCFzj2sonkZYJAdewi3jRaok_2gOmNsfeS0,956
127
+ dodal/devices/util/epics_util.py,sha256=A8iNL79PnxntuxPTKA9oLGaDRKhnXaaeAVJwS6FNAWA,4687
128
+ dodal/devices/util/lookup_tables.py,sha256=Bk-wZk7JO5_j_8gbot-8reirVqxvFUg9_SIqEIOVZu0,2025
129
+ dodal/devices/util/motor_utils.py,sha256=pNY-aUk9LxaIWeDr5rpMS6udiB9j19wcCXkNDLp1uA0,257
130
+ dodal/devices/util/save_panda.py,sha256=PHFlkerBhkkU0-o5dNEdi2P95_jD9Lk8yYgaqn9R97o,2538
131
+ dodal/devices/util/test_utils.py,sha256=VrSFFGLNKOcCAsWFMZOxwhng3wGR5kV8NqqnKfj8Vuw,562
132
+ dodal/devices/xspress3/xspress3.py,sha256=pD46vyjbblrzE3xhP2ZGcStmN06cp41gSOLuff_bQTs,4636
133
+ dodal/devices/xspress3/xspress3_channel.py,sha256=w8tAx2lz5kJ_LeJ_eb_4o--Dtt8MRijsYNgDG6oEIVg,1626
134
+ dodal/devices/zocalo/__init__.py,sha256=dRAZ9o7B9TACqyE7aanT3yzvqWtt019YgV5ZJY7Ylso,517
135
+ dodal/devices/zocalo/zocalo_constants.py,sha256=vu7Xjz7UNEpBUWEEBxDvP4bVFkZIN6NLGfQDpWbCjH8,98
136
+ dodal/devices/zocalo/zocalo_interaction.py,sha256=8V9rAHYgdrFlPURnsxl5pLheEZemsm8cqMpv0E2fOS8,3555
137
+ dodal/devices/zocalo/zocalo_results.py,sha256=DJWCWKUhMXguUcjb2fU8a86OLp8SnJS9jqbe6EHau-8,15293
138
+ dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
139
+ dodal/plan_stubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
+ dodal/plan_stubs/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
141
+ dodal/plan_stubs/data_session.py,sha256=33wPwbs0mtMnle0H76mH_RNTc5omld7gNSJ9BvRdUnM,1570
142
+ dodal/plan_stubs/motor_utils.py,sha256=4c93U_WgjfmX12uNiztVW2oKxGVWa_SKQdJYCUNmsGU,4653
143
+ dodal/plan_stubs/wrapped.py,sha256=nriHKX4BF010CmrhdoUhY3-txClW5W8TPLz64kE_AXU,4533
144
+ dodal/plans/__init__.py,sha256=nH1jNxw3DzDMg9O8Uda0kqKIalRVEWBrq07OLY6Ey38,93
145
+ dodal/plans/scanspec.py,sha256=Q0AcvTKRT401iGMRDSqK-D523UX5_ofiVMZ_rNXKOx8,2074
146
+ dodal/plans/wrapped.py,sha256=Cr2iOpQCuk2ORKo5CZOh-zbQXAjoTfaLrfm7r1--GhU,2098
147
+ dls_dodal-1.36.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
148
+ dls_dodal-1.36.0.dist-info/METADATA,sha256=93qlfEkDtkITxpzgYXuicmGrR30ilk3Te0IcOalpaSs,16655
149
+ dls_dodal-1.36.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
150
+ dls_dodal-1.36.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
151
+ dls_dodal-1.36.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
152
+ dls_dodal-1.36.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
dodal/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.34.1'
16
- __version_tuple__ = version_tuple = (1, 34, 1)
15
+ __version__ = version = '1.36.0'
16
+ __version_tuple__ = version_tuple = (1, 36, 0)
dodal/beamlines/i22.py CHANGED
@@ -11,9 +11,13 @@ from dodal.common.beamlines.beamline_utils import (
11
11
  )
12
12
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
13
13
  from dodal.common.beamlines.device_helpers import numbered_slits
14
+ from dodal.common.crystal_metadata import (
15
+ MaterialsEnum,
16
+ make_crystal_metadata_from_material,
17
+ )
14
18
  from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
15
19
  from dodal.devices.focusing_mirror import FocusingMirror
16
- from dodal.devices.i22.dcm import CrystalMetadata, DoubleCrystalMonochromator
20
+ from dodal.devices.i22.dcm import DoubleCrystalMonochromator
17
21
  from dodal.devices.i22.fswitch import FSwitch
18
22
  from dodal.devices.i22.nxsas import NXSasMetadataHolder, NXSasOAV, NXSasPilatus
19
23
  from dodal.devices.linkam3 import Linkam3
@@ -21,6 +25,7 @@ from dodal.devices.slits import Slits
21
25
  from dodal.devices.synchrotron import Synchrotron
22
26
  from dodal.devices.tetramm import TetrammDetector
23
27
  from dodal.devices.undulator import Undulator
28
+ from dodal.devices.watsonmarlow323_pump import WatsonMarlow323Pump
24
29
  from dodal.log import set_beamline as set_log_beamline
25
30
  from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
26
31
 
@@ -170,17 +175,12 @@ def dcm(
170
175
  fake_with_ophyd_sim,
171
176
  bl_prefix=False,
172
177
  temperature_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-DI-DCM-01:",
173
- crystal_1_metadata=CrystalMetadata(
174
- usage="Bragg",
175
- type="silicon",
176
- reflection=(1, 1, 1),
177
- d_spacing=(3.13475, "nm"),
178
+ crystal_1_metadata=make_crystal_metadata_from_material(
179
+ MaterialsEnum.Si, (1, 1, 1)
178
180
  ),
179
- crystal_2_metadata=CrystalMetadata(
180
- usage="Bragg",
181
- type="silicon",
182
- reflection=(1, 1, 1),
183
- d_spacing=(3.13475, "nm"),
181
+ crystal_2_metadata=make_crystal_metadata_from_material(
182
+ MaterialsEnum.Si,
183
+ (1, 1, 1),
184
184
  ),
185
185
  )
186
186
 
@@ -377,3 +377,16 @@ def linkam(
377
377
  wait_for_connection,
378
378
  fake_with_ophyd_sim,
379
379
  )
380
+
381
+
382
+ def ppump(
383
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
384
+ ) -> WatsonMarlow323Pump:
385
+ """Sample Environment Peristaltic Pump"""
386
+ return device_instantiation(
387
+ WatsonMarlow323Pump,
388
+ "ppump",
389
+ "-EA-PUMP-01:",
390
+ wait_for_connection,
391
+ fake_with_ophyd_sim,
392
+ )
dodal/beamlines/i24.py CHANGED
@@ -11,8 +11,8 @@ from dodal.devices.i24.beamstop import Beamstop
11
11
  from dodal.devices.i24.dcm import DCM
12
12
  from dodal.devices.i24.dual_backlight import DualBacklight
13
13
  from dodal.devices.i24.i24_detector_motion import DetectorMotion
14
- from dodal.devices.i24.i24_vgonio import VGonio
15
14
  from dodal.devices.i24.pmac import PMAC
15
+ from dodal.devices.i24.vgonio import VerticalGoniometer
16
16
  from dodal.devices.oav.oav_detector import OAV
17
17
  from dodal.devices.oav.oav_parameters import OAVConfig
18
18
  from dodal.devices.zebra import Zebra
@@ -154,12 +154,12 @@ def oav(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) ->
154
154
  @skip_device(lambda: BL == "s24")
155
155
  def vgonio(
156
156
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
157
- ) -> VGonio:
158
- """Get the i24 vgonio device, instantiate it if it hasn't already been.
157
+ ) -> VerticalGoniometer:
158
+ """Get the i24 vertical goniometer device, instantiate it if it hasn't already been.
159
159
  If this is called when already instantiated, it will return the existing object.
160
160
  """
161
161
  return device_instantiation(
162
- VGonio,
162
+ VerticalGoniometer,
163
163
  "vgonio",
164
164
  "-MO-VGON-01:",
165
165
  wait_for_connection,
dodal/beamlines/p38.py CHANGED
@@ -10,14 +10,19 @@ from dodal.common.beamlines.beamline_utils import (
10
10
  )
11
11
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
12
12
  from dodal.common.beamlines.device_helpers import numbered_slits
13
+ from dodal.common.crystal_metadata import (
14
+ MaterialsEnum,
15
+ make_crystal_metadata_from_material,
16
+ )
13
17
  from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
14
18
  from dodal.devices.focusing_mirror import FocusingMirror
15
- from dodal.devices.i22.dcm import CrystalMetadata, DoubleCrystalMonochromator
19
+ from dodal.devices.i22.dcm import DoubleCrystalMonochromator
16
20
  from dodal.devices.i22.fswitch import FSwitch
17
21
  from dodal.devices.linkam3 import Linkam3
18
22
  from dodal.devices.slits import Slits
19
23
  from dodal.devices.tetramm import TetrammDetector
20
24
  from dodal.devices.undulator import Undulator
25
+ from dodal.devices.watsonmarlow323_pump import WatsonMarlow323Pump
21
26
  from dodal.log import set_beamline as set_log_beamline
22
27
  from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
23
28
 
@@ -227,17 +232,11 @@ def dcm(
227
232
  fake_with_ophyd_sim,
228
233
  bl_prefix=False,
229
234
  temperature_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-DI-DCM-01:",
230
- crystal_1_metadata=CrystalMetadata(
231
- usage="Bragg",
232
- type="silicon",
233
- reflection=(1, 1, 1),
234
- d_spacing=(3.13475, "nm"),
235
+ crystal_1_metadata=make_crystal_metadata_from_material(
236
+ MaterialsEnum.Si, (1, 1, 1)
235
237
  ),
236
- crystal_2_metadata=CrystalMetadata(
237
- usage="Bragg",
238
- type="silicon",
239
- reflection=(1, 1, 1),
240
- d_spacing=(3.13475, "nm"),
238
+ crystal_2_metadata=make_crystal_metadata_from_material(
239
+ MaterialsEnum.Si, (1, 1, 1)
241
240
  ),
242
241
  )
243
242
 
@@ -317,3 +316,16 @@ def linkam(
317
316
  wait_for_connection,
318
317
  fake_with_ophyd_sim,
319
318
  )
319
+
320
+
321
+ def ppump(
322
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = True
323
+ ) -> WatsonMarlow323Pump:
324
+ """Peristaltic Pump"""
325
+ return device_instantiation(
326
+ WatsonMarlow323Pump,
327
+ "ppump",
328
+ "-EA-PUMP-01:",
329
+ wait_for_connection,
330
+ fake_with_ophyd_sim,
331
+ )
@@ -90,8 +90,7 @@ def device_instantiation(
90
90
  fake: bool whether to fake with ophyd.sim
91
91
  post_create: Callable (optional) a function to be run on the device after
92
92
  creation
93
- bl_prefix: bool if true, add the beamline prefix when instantiating, if
94
- false the complete PV prefix must be supplied.
93
+ bl_prefix: bool if true, add the beamline prefix when instantiating
95
94
  Returns:
96
95
  The instance of the device.
97
96
  """
@@ -0,0 +1,61 @@
1
+ import math
2
+ from dataclasses import dataclass
3
+ from enum import Enum
4
+ from typing import Literal
5
+
6
+
7
+ @dataclass(frozen=True)
8
+ class Material:
9
+ """
10
+ Class representing a crystalline material with a specific lattice parameter.
11
+ """
12
+
13
+ name: str
14
+ lattice_parameter: float # Lattice parameter in meters
15
+
16
+
17
+ class MaterialsEnum(Enum):
18
+ Si = Material(name="silicon", lattice_parameter=5.4310205e-10)
19
+ Ge = Material(name="germanium", lattice_parameter=5.6575e-10)
20
+
21
+
22
+ @dataclass(frozen=True)
23
+ class CrystalMetadata:
24
+ """
25
+ Metadata used in the NeXus format,
26
+ see https://manual.nexusformat.org/classes/base_classes/NXcrystal.html
27
+ """
28
+
29
+ usage: Literal["Bragg", "Laue"]
30
+ type: str
31
+ reflection: tuple[int, int, int]
32
+ d_spacing: tuple[float, str]
33
+
34
+ @staticmethod
35
+ def calculate_default_d_spacing(
36
+ lattice_parameter: float, reflection: tuple[int, int, int]
37
+ ) -> tuple[float, str]:
38
+ """
39
+ Calculates the d-spacing value in nanometers based on the given lattice parameter and reflection indices.
40
+ """
41
+ h_index, k_index, l_index = reflection
42
+ d_spacing_m = lattice_parameter / math.sqrt(
43
+ h_index**2 + k_index**2 + l_index**2
44
+ )
45
+ d_spacing_nm = d_spacing_m * 1e9 # Convert meters to nanometers
46
+ return round(d_spacing_nm, 5), "nm"
47
+
48
+
49
+ def make_crystal_metadata_from_material(
50
+ material: MaterialsEnum,
51
+ reflection_plane: tuple[int, int, int],
52
+ usage: Literal["Bragg", "Laue"] = "Bragg",
53
+ d_spacing_param: tuple[float, str] | None = None,
54
+ ):
55
+ d_spacing = d_spacing_param or CrystalMetadata.calculate_default_d_spacing(
56
+ material.value.lattice_parameter, reflection_plane
57
+ )
58
+ assert all(
59
+ isinstance(i, int) and i > 0 for i in reflection_plane
60
+ ), "Reflection plane indices must be positive integers"
61
+ return CrystalMetadata(usage, material.value.name, reflection_plane, d_spacing)
@@ -1,17 +1,14 @@
1
1
  from collections.abc import Callable, Coroutine
2
- from typing import Any, TypeVar
2
+ from typing import Any
3
3
 
4
4
  from bluesky.protocols import Reading
5
- from ophyd_async.core import SignalR, SoftSignalBackend
6
- from ophyd_async.core._soft_signal_backend import SignalMetadata
5
+ from ophyd_async.core import SignalDatatypeT, SignalR, SoftSignalBackend
7
6
 
8
- T = TypeVar("T")
9
7
 
10
-
11
- class HarwareBackedSoftSignalBackend(SoftSignalBackend[T]):
8
+ class HardwareBackedSoftSignalBackend(SoftSignalBackend[SignalDatatypeT]):
12
9
  def __init__(
13
10
  self,
14
- get_from_hardware_func: Callable[[], Coroutine[Any, Any, T]],
11
+ get_from_hardware_func: Callable[[], Coroutine[Any, Any, SignalDatatypeT]],
15
12
  *args,
16
13
  **kwargs,
17
14
  ) -> None:
@@ -20,20 +17,20 @@ class HarwareBackedSoftSignalBackend(SoftSignalBackend[T]):
20
17
 
21
18
  async def _update_value(self):
22
19
  new_value = await self.get_from_hardware_func()
23
- await self.put(new_value)
20
+ await self.put(new_value, True)
24
21
 
25
22
  async def get_reading(self) -> Reading:
26
23
  await self._update_value()
27
24
  return await super().get_reading()
28
25
 
29
- async def get_value(self) -> T:
26
+ async def get_value(self) -> SignalDatatypeT:
30
27
  await self._update_value()
31
28
  return await super().get_value()
32
29
 
33
30
 
34
31
  def create_hardware_backed_soft_signal(
35
- datatype: type[T],
36
- get_from_hardware_func: Callable[[], Coroutine[Any, Any, T]],
32
+ datatype: type[SignalDatatypeT],
33
+ get_from_hardware_func: Callable[[], Coroutine[Any, Any, SignalDatatypeT]],
37
34
  units: str | None = None,
38
35
  precision: int | None = None,
39
36
  ):
@@ -45,9 +42,8 @@ def create_hardware_backed_soft_signal(
45
42
  the signal is currently read only. See https://github.com/bluesky/ophyd-async/issues/525
46
43
  for a more full solution.
47
44
  """
48
- metadata = SignalMetadata(units=units, precision=precision)
49
45
  return SignalR(
50
- backend=HarwareBackedSoftSignalBackend(
51
- get_from_hardware_func, datatype, metadata=metadata
46
+ backend=HardwareBackedSoftSignalBackend(
47
+ get_from_hardware_func, datatype, units=units, precision=precision
52
48
  )
53
49
  )
dodal/devices/CTAB.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from ophyd_async.core import StandardReadable
2
+ from ophyd_async.epics.core import epics_signal_r
2
3
  from ophyd_async.epics.motor import Motor
3
- from ophyd_async.epics.signal import epics_signal_r
4
4
 
5
5
 
6
6
  class CTAB(StandardReadable):
dodal/devices/aperture.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from ophyd_async.core import StandardReadable
2
+ from ophyd_async.epics.core import epics_signal_r
2
3
  from ophyd_async.epics.motor import Motor
3
- from ophyd_async.epics.signal import epics_signal_r
4
4
 
5
5
 
6
6
  class Aperture(StandardReadable):
@@ -1,13 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- from enum import Enum
5
4
 
6
5
  from bluesky.protocols import Movable
7
6
  from ophyd_async.core import (
8
7
  AsyncStatus,
9
- HintedSignal,
10
8
  StandardReadable,
9
+ StandardReadableFormat,
10
+ StrictEnum,
11
11
  )
12
12
  from pydantic import BaseModel, Field
13
13
 
@@ -22,12 +22,24 @@ class InvalidApertureMove(Exception):
22
22
 
23
23
 
24
24
  class AperturePosition(BaseModel):
25
+ """
26
+ Represents one of the available positions for the Aperture-Scatterguard.
27
+ Attributes:
28
+ aperture_x: The x position of the aperture component in mm
29
+ aperture_y: The y position of the aperture component in mm
30
+ aperture_z: The z position of the aperture component in mm
31
+ scatterguard_x: The x position of the scatterguard component in mm
32
+ scatterguard_y: The y position of the scatterguard component in mm
33
+ radius: Radius of the selected aperture. When in the Robot Load position, the
34
+ radius is defined to be 0
35
+ """
36
+
25
37
  aperture_x: float
26
38
  aperture_y: float
27
39
  aperture_z: float
28
40
  scatterguard_x: float
29
41
  scatterguard_y: float
30
- radius: float | None = Field(json_schema_extra={"units": "µm"}, default=None)
42
+ radius: float = Field(json_schema_extra={"units": "µm"}, default=0.0)
31
43
 
32
44
  @property
33
45
  def values(self) -> tuple[float, float, float, float, float]:
@@ -54,7 +66,7 @@ class AperturePosition(BaseModel):
54
66
  @staticmethod
55
67
  def from_gda_params(
56
68
  name: ApertureValue,
57
- radius: float | None,
69
+ radius: float,
58
70
  params: GDABeamlineParameters,
59
71
  ) -> AperturePosition:
60
72
  return AperturePosition(
@@ -67,7 +79,7 @@ class AperturePosition(BaseModel):
67
79
  )
68
80
 
69
81
 
70
- class ApertureValue(str, Enum):
82
+ class ApertureValue(StrictEnum):
71
83
  """Maps from a short usable name to the value name in the GDA Beamline parameters"""
72
84
 
73
85
  ROBOT_LOAD = "ROBOT_LOAD"
@@ -81,7 +93,7 @@ def load_positions_from_beamline_parameters(
81
93
  ) -> dict[ApertureValue, AperturePosition]:
82
94
  return {
83
95
  ApertureValue.ROBOT_LOAD: AperturePosition.from_gda_params(
84
- ApertureValue.ROBOT_LOAD, None, params
96
+ ApertureValue.ROBOT_LOAD, 0, params
85
97
  ),
86
98
  ApertureValue.SMALL: AperturePosition.from_gda_params(
87
99
  ApertureValue.SMALL, 20, params
@@ -120,7 +132,7 @@ class ApertureScatterguard(StandardReadable, Movable):
120
132
  self.radius,
121
133
  ],
122
134
  )
123
- with self.add_children_as_readables(HintedSignal):
135
+ with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
124
136
  self.selected_aperture = create_hardware_backed_soft_signal(
125
137
  ApertureValue, self._get_current_aperture_position
126
138
  )
@@ -172,7 +184,7 @@ class ApertureScatterguard(StandardReadable, Movable):
172
184
 
173
185
  raise InvalidApertureMove("Current aperture/scatterguard state unrecognised")
174
186
 
175
- async def _get_current_radius(self) -> float | None:
187
+ async def _get_current_radius(self) -> float:
176
188
  current_value = await self._get_current_aperture_position()
177
189
  return self._loaded_positions[current_value].radius
178
190