dls-dodal 1.34.1__py3-none-any.whl → 1.35.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 (71) hide show
  1. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.0.dist-info}/METADATA +2 -2
  2. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.0.dist-info}/RECORD +70 -67
  3. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.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/fast_grid_scan.py +1 -1
  24. dodal/devices/fluorescence_detector_motion.py +5 -7
  25. dodal/devices/focusing_mirror.py +12 -11
  26. dodal/devices/hutch_shutter.py +4 -5
  27. dodal/devices/i10/i10_apple2.py +20 -19
  28. dodal/devices/i10/i10_setting_data.py +2 -2
  29. dodal/devices/i22/dcm.py +43 -75
  30. dodal/devices/i22/fswitch.py +5 -5
  31. dodal/devices/i24/aperture.py +3 -5
  32. dodal/devices/i24/beamstop.py +3 -5
  33. dodal/devices/i24/dcm.py +1 -1
  34. dodal/devices/i24/dual_backlight.py +4 -6
  35. dodal/devices/i24/pmac.py +35 -46
  36. dodal/devices/i24/vgonio.py +16 -0
  37. dodal/devices/ipin.py +5 -3
  38. dodal/devices/linkam3.py +7 -7
  39. dodal/devices/oav/oav_detector.py +3 -3
  40. dodal/devices/oav/oav_to_redis_forwarder.py +8 -7
  41. dodal/devices/oav/pin_image_recognition/__init__.py +9 -7
  42. dodal/devices/oav/snapshots/grid_overlay.py +16 -16
  43. dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +5 -5
  44. dodal/devices/oav/snapshots/snapshot_with_grid.py +6 -6
  45. dodal/devices/oav/utils.py +2 -2
  46. dodal/devices/p99/sample_stage.py +3 -5
  47. dodal/devices/pgm.py +5 -6
  48. dodal/devices/qbpm.py +1 -1
  49. dodal/devices/robot.py +3 -3
  50. dodal/devices/smargon.py +1 -1
  51. dodal/devices/synchrotron.py +9 -4
  52. dodal/devices/tetramm.py +7 -7
  53. dodal/devices/thawer.py +13 -7
  54. dodal/devices/undulator.py +5 -5
  55. dodal/devices/util/epics_util.py +1 -1
  56. dodal/devices/watsonmarlow323_pump.py +45 -0
  57. dodal/devices/webcam.py +9 -2
  58. dodal/devices/xbpm_feedback.py +3 -5
  59. dodal/devices/xspress3/xspress3.py +8 -9
  60. dodal/devices/xspress3/xspress3_channel.py +3 -5
  61. dodal/devices/zebra.py +7 -6
  62. dodal/devices/zebra_controlled_shutter.py +5 -6
  63. dodal/devices/zocalo/__init__.py +2 -2
  64. dodal/devices/zocalo/zocalo_constants.py +3 -0
  65. dodal/devices/zocalo/zocalo_interaction.py +2 -1
  66. dodal/devices/zocalo/zocalo_results.py +92 -79
  67. dodal/utils.py +4 -0
  68. dodal/devices/i24/i24_vgonio.py +0 -17
  69. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.0.dist-info}/LICENSE +0 -0
  70. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.0.dist-info}/entry_points.txt +0 -0
  71. {dls_dodal-1.34.1.dist-info → dls_dodal-1.35.0.dist-info}/top_level.txt +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.35.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
@@ -1,10 +1,10 @@
1
1
  dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
2
2
  dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
3
- dodal/_version.py,sha256=i_NrncMW1U_TZOADuz4SSDOQ3OJYu6niE4QzoDFQrM0,413
3
+ dodal/_version.py,sha256=q-2n6ovtbk-r5sMORN2VAFD8HDD5aIS9gRmqA5SXG40,413
4
4
  dodal/adsim.py,sha256=OW2dcS7ciD4Yq9WFw4PN_c5Bwccrmu7R-zr-u6ZCbQM,497
5
5
  dodal/cli.py,sha256=_crmaHchxphSW8eEJB58_XZIeK82aiUv9bV7tpz-LpA,2122
6
6
  dodal/log.py,sha256=0to7CRsbzbgVfAAfKRAMhsaUuKqF2-7CGdQc-z8Uhno,9499
7
- dodal/utils.py,sha256=1dJTm77jOxD2B3flC6Xbvl7_r5L4vbGkvBSBoOhUrGY,11966
7
+ dodal/utils.py,sha256=DIlAnz5gqaqqTB9NvAwl9Mk-em6idE7Rd29mBkAmvXc,12048
8
8
  dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  dodal/beamline_specific_utils/i03.py,sha256=P6Ls4FoVtcacH0RJM3v6ZwwGx27oMppcBdW0la-ohTY,377
10
10
  dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
@@ -15,130 +15,133 @@ dodal/beamlines/i04.py,sha256=z8LUbhyfUDU08oSp85hg7hFE8FJkAyLsqPUQScs5SUA,14567
15
15
  dodal/beamlines/i10.py,sha256=0ZoFe1vuwNiP2AvNACxuN0OMXJ4DcQ3Oqa0L-w5Ch_M,7744
16
16
  dodal/beamlines/i13_1.py,sha256=csXHrdwUh4sXTmb4X6ZiiSS_XxRkNShsVoBMxYI6rG0,1833
17
17
  dodal/beamlines/i20_1.py,sha256=MaPgONHqpoZuBtkiKEzYtViJnKBM2_ekeP4OdbmuXHE,1158
18
- dodal/beamlines/i22.py,sha256=FcsRk90qTCLqrS6csXZEb8Vu9P1es2ivm3WWig2PN7U,9889
18
+ dodal/beamlines/i22.py,sha256=0_-Q1teOnty76-fHLI_ZudziRAq3DIkH8KeK7Db1KZ4,10246
19
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
20
+ dodal/beamlines/i24.py,sha256=UBuxiql4JQRYddr1Mp017Edzz0HSMwi4ghJ9HdBNluk,6467
21
+ dodal/beamlines/p38.py,sha256=EeJJxfw7uMy6jPA_D7ug0ubAhTBCndPwjvcvR1T1lfw,8238
22
22
  dodal/beamlines/p45.py,sha256=N4SDTIFok3uMqb37higZHMr3xRjxItsT4ib_KacKKAE,2935
23
23
  dodal/beamlines/p99.py,sha256=mHMYi1M_jgSB9SrOPadxvPuMrxG8LmJOYtU0Iw6fnIQ,1708
24
24
  dodal/beamlines/training_rig.py,sha256=yagMEQruA1iTOeQCNpux-6xOtkBuB-hhGvAJwQ5c9bg,1846
25
25
  dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
26
26
  dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
27
+ dodal/common/crystal_metadata.py,sha256=IKhe_nCbsuIV2W5OvPzIQ-FXfusQ2d7VJ-xH899dZIc,1924
27
28
  dodal/common/maths.py,sha256=K9x7iL3xXLtWYTV-xlFHDNSTIL9a2UP3Ws7wr6Dm2rQ,1803
28
- dodal/common/signal_utils.py,sha256=OsVJFntyTOHVEjhw27ZSp1e8SpKR2BhqdY1kzG6sago,1774
29
+ dodal/common/signal_utils.py,sha256=-p4h7xtGPp13t6HTjgFGcs5nN22kVArlkfCPVjpLuRU,1728
29
30
  dodal/common/types.py,sha256=fkL7UOwDbe3v2_VJ5f1W5RxR98Wx-Ra-LxUZWkNDtls,486
30
31
  dodal/common/udc_directory_provider.py,sha256=H-9f6uSVGuA8jyiErPi8ikCw1JDrhRAJv-qPpN-HwJk,2379
31
32
  dodal/common/visit.py,sha256=2UbbCmgOjZWSCxFzE9RYiTJhA_IoVOegma-Jv-PJqps,5787
32
33
  dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
34
  dodal/common/beamlines/beamline_parameters.py,sha256=oIPHooqu5vTAwfqZutsKbzwdi9nvFF8568Mz7jrK5rI,3618
34
- dodal/common/beamlines/beamline_utils.py,sha256=rL-XgqAbaZF2FJDFj8OHSbvzCxSwzCUGMfTUWT5qOXs,4422
35
+ dodal/common/beamlines/beamline_utils.py,sha256=6RCOnjVcrocfOyKDb2gBlvu2EymS9tUgvQexKrUjUV4,4335
35
36
  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/CTAB.py,sha256=5_261Ox6NG2cJIzzwnjWz289BG0nZoE0wKOaI5V5jqM,1998
37
38
  dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
39
  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
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
47
48
  dodal/devices/eiger.py,sha256=2ZT2oQiZFLprg3CjsHRkXfxt9kSf8z8uUKH1Z5n3Hzo,14107
48
49
  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
50
+ dodal/devices/fast_grid_scan.py,sha256=DfO4w8ivQJACurYO_OEoXYTAMa2qUc5P-bxYCkjRKkQ,11967
51
+ dodal/devices/fluorescence_detector_motion.py,sha256=-1qCSvW0PdT0m6BcoLxrtc0OJ5UDIBsEe11EOLr-gFw,501
51
52
  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
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
56
57
  dodal/devices/logging_ophyd_device.py,sha256=dUVE-XhWA56WUXez0mrc4sf322CXY3MVLreTycO5j_A,668
57
58
  dodal/devices/motors.py,sha256=dYa9T6FDMTbr8GvTb-lXtk3v4QEqAWRuGmHIO20fazQ,1039
58
59
  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
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
62
63
  dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
63
64
  dodal/devices/scatterguard.py,sha256=jx03in9QgaThWxD4t1S8_Llent2kWrn_hThJ9KkUWTk,330
64
65
  dodal/devices/scintillator.py,sha256=PlD6cnJ39PTB_e7QrRspPliLYE4kL_K7ziJURzuxgdA,365
65
66
  dodal/devices/slits.py,sha256=uOyVmbgeygiP6e5Z9t5zMPXLuVEWFfYg9GB3ZU76Tug,600
66
- dodal/devices/smargon.py,sha256=ijvz7k5a-gbZJv3rfX8uVpDWiHCkZnXcFZqarQvfPGY,4710
67
+ dodal/devices/smargon.py,sha256=tOHb9fjI8ZCIrboiC4OzS2j1QJDOKkAlQ2SORbBmaGo,4708
67
68
  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
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
71
72
  dodal/devices/turbo_slit.py,sha256=B6SPXqviMnG-U4PnUF1BdTO0LBKmTuwAUKRbxMiNJXo,1125
72
- dodal/devices/undulator.py,sha256=FIjzboayAvD0EFyp6qSlzfWA_WvEFd72SbLCE03OoxE,5183
73
+ dodal/devices/undulator.py,sha256=BxYGDDvbdhA6yixL0fsS4bZMY2pmaMk-bvFpEGKA1pY,5210
73
74
  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
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
78
80
  dodal/devices/areadetector/__init__.py,sha256=8IwLxuZMW0MOJpJp_ZDdlaE20hrtsH_PXWGaKgMiYs4,240
79
81
  dodal/devices/areadetector/adaravis.py,sha256=Cqw_Mzrp_zODFxQ2LZBJzHp_DsZ6_dAITkZz8gYz_0w,3797
80
82
  dodal/devices/areadetector/adsim.py,sha256=cIc9PRbKnftBk7Ut8d8CU_TVrin8EwcKHObP2n9VxWM,1876
81
83
  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/areadetector/plugins/CAM.py,sha256=sZzJm5Ez3eWfXZi_EB67wluhZmMQm1UyOc2bJFfzd1U,964
85
+ dodal/devices/areadetector/plugins/MJPG.py,sha256=QTsxCoWbofNpLMGPoOR2hWoM33KyntuLepbF0YmX0KE,3031
84
86
  dodal/devices/detector/__init__.py,sha256=-RdACL3tzc3lLArWOoGNje48UUlv2fElOmGOz9yOuO0,317
85
87
  dodal/devices/detector/det_dim_constants.py,sha256=LNrVMd0DbFEcnyNFmXosCP-VYaZ71Ajuv6inwo4Mg3U,2299
86
88
  dodal/devices/detector/det_dist_to_beam_converter.py,sha256=7keoqZYfvgayePVx97lHYpcFRTJnQOfAk_PYP4EZTZQ,1951
87
89
  dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
88
90
  dodal/devices/detector/detector.py,sha256=syzkl52kGaMINXCXEviFuYPbgNatm5tioVPDmjgro8s,4768
89
- dodal/devices/detector/detector_motion.py,sha256=LjHNi9FcDSZoriQYrFde8fEmwCGccFgSHPtcxivix4g,1628
91
+ dodal/devices/detector/detector_motion.py,sha256=UGDQriDWRluDZOZh1mDX9w_fPjMD-_BGe11kA36Kezs,1616
90
92
  dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
93
  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/i10/i10_apple2.py,sha256=pEZes8wVCPHiOOcuVhEtqPvtnyphMxqbdp39mDp6xXQ,13165
95
+ dodal/devices/i10/i10_setting_data.py,sha256=Pc78L9asOLot9WmKcxkxpaefB3h4FeKIolHcGO4JnOU,161
94
96
  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/dcm.py,sha256=SQDh-Sj1OvplHZ9yTWblJwv8PJrUqxseDPupZOWmcLo,4701
98
+ dodal/devices/i22/fswitch.py,sha256=LSMoo9aDkH0SLcojbUh2NxTWIpUXHZxauTqThc3XtSk,3073
97
99
  dodal/devices/i22/nxsas.py,sha256=a8oJXl5uhkh9zcb9rSZmVooU-SplzzO3EsAaHJZRfrQ,6086
98
100
  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
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
103
105
  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/i24/pmac.py,sha256=lz9FYU_8YN8cC51ddTzdxcUA7MCVTA_ho3P0CHJ9zCo,6837
107
+ dodal/devices/i24/vgonio.py,sha256=sxSmcYZayVJPJz_D_91j9PmNor7Tbl1RGQFRrdtESlw,533
106
108
  dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
109
  dodal/devices/oav/microns_for_zoom_levels.json,sha256=kJTkbu2v6_Ccc_cDy7FRTX-gRhXxfYskjVqwBCZIqCQ,1209
108
110
  dodal/devices/oav/oav_calculations.py,sha256=tr3Z2pFT7v_enAiNuSZV0esPsiHfRGrj7t0-g_Ix5Do,2363
109
- dodal/devices/oav/oav_detector.py,sha256=aStDk40tJ63aJoAtzm621HFqkZjkinJ9EgY5VvCSRTw,4812
111
+ dodal/devices/oav/oav_detector.py,sha256=9IXSSdgvZZyPtnhICEw9cHtf55vIrz1T_oBCr_sT7e4,4831
110
112
  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
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
114
116
  dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
115
117
  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
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
119
121
  dodal/devices/p99/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- dodal/devices/p99/sample_stage.py,sha256=kvwKCDUmXqcoXfIbAENtqm3Hi2cHP7dZIPQgQT6hsXw,1140
122
+ dodal/devices/p99/sample_stage.py,sha256=dX6KlzZlwYViGiPSvdSrQQmgh_OLbHlnX1BJgcuu7j0,1128
121
123
  dodal/devices/training_rig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
124
  dodal/devices/training_rig/sample_stage.py,sha256=jktTp837ij8wor5LidE3AajCk95L7DebJotMlO7QwTE,355
123
125
  dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
126
  dodal/devices/util/adjuster_plans.py,sha256=XpJ1YJKoOCFzj2sonkZYJAdewi3jRaok_2gOmNsfeS0,956
125
- dodal/devices/util/epics_util.py,sha256=R0_I9HEZ2l19BZaTpevPqT3p3kp5GZCfmNNmnXGfdsc,4689
127
+ dodal/devices/util/epics_util.py,sha256=A8iNL79PnxntuxPTKA9oLGaDRKhnXaaeAVJwS6FNAWA,4687
126
128
  dodal/devices/util/lookup_tables.py,sha256=Bk-wZk7JO5_j_8gbot-8reirVqxvFUg9_SIqEIOVZu0,2025
127
129
  dodal/devices/util/motor_utils.py,sha256=pNY-aUk9LxaIWeDr5rpMS6udiB9j19wcCXkNDLp1uA0,257
128
130
  dodal/devices/util/save_panda.py,sha256=PHFlkerBhkkU0-o5dNEdi2P95_jD9Lk8yYgaqn9R97o,2538
129
131
  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
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
135
138
  dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
136
139
  dodal/plans/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
137
140
  dodal/plans/data_session_metadata.py,sha256=GjR4E2s3ZwYkvkBnW6TcL6OLdmyxrmkoSSI242sEPFA,1567
138
141
  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,,
142
+ dls_dodal-1.35.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
143
+ dls_dodal-1.35.0.dist-info/METADATA,sha256=Ddaa6HHHR3d-IxRoiQS_uiniR2ONfL62B2LVy8b46ns,16574
144
+ dls_dodal-1.35.0.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
145
+ dls_dodal-1.35.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
146
+ dls_dodal-1.35.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
147
+ dls_dodal-1.35.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.4.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.35.0'
16
+ __version_tuple__ = version_tuple = (1, 35, 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