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.
- {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/METADATA +4 -2
- dls_dodal-1.36.0.dist-info/RECORD +152 -0
- {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/WHEEL +1 -1
- dodal/_version.py +2 -2
- dodal/beamlines/i22.py +24 -11
- dodal/beamlines/i24.py +4 -4
- dodal/beamlines/p38.py +23 -11
- dodal/common/beamlines/beamline_utils.py +1 -2
- dodal/common/crystal_metadata.py +61 -0
- dodal/common/signal_utils.py +10 -14
- dodal/devices/CTAB.py +1 -1
- dodal/devices/aperture.py +1 -1
- dodal/devices/aperturescatterguard.py +20 -8
- dodal/devices/apple2_undulator.py +30 -29
- dodal/devices/areadetector/plugins/CAM.py +3 -5
- dodal/devices/areadetector/plugins/MJPG.py +1 -1
- dodal/devices/attenuator.py +1 -1
- dodal/devices/backlight.py +4 -5
- dodal/devices/cryostream.py +3 -5
- dodal/devices/dcm.py +26 -2
- dodal/devices/detector/detector_motion.py +3 -5
- dodal/devices/diamond_filter.py +3 -4
- dodal/devices/eiger.py +88 -49
- dodal/devices/fast_grid_scan.py +1 -1
- dodal/devices/fluorescence_detector_motion.py +5 -7
- dodal/devices/focusing_mirror.py +12 -11
- dodal/devices/hutch_shutter.py +4 -5
- dodal/devices/i10/i10_apple2.py +20 -19
- dodal/devices/i10/i10_setting_data.py +2 -2
- dodal/devices/i22/dcm.py +43 -75
- dodal/devices/i22/fswitch.py +5 -5
- dodal/devices/i24/aperture.py +3 -5
- dodal/devices/i24/beamstop.py +3 -5
- dodal/devices/i24/dcm.py +1 -1
- dodal/devices/i24/dual_backlight.py +4 -6
- dodal/devices/i24/pmac.py +35 -46
- dodal/devices/i24/vgonio.py +16 -0
- dodal/devices/ipin.py +5 -3
- dodal/devices/linkam3.py +7 -7
- dodal/devices/oav/oav_detector.py +3 -3
- dodal/devices/oav/oav_to_redis_forwarder.py +8 -7
- dodal/devices/oav/pin_image_recognition/__init__.py +9 -7
- dodal/devices/oav/snapshots/grid_overlay.py +16 -16
- dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +5 -5
- dodal/devices/oav/snapshots/snapshot_with_grid.py +6 -6
- dodal/devices/oav/utils.py +2 -2
- dodal/devices/p99/sample_stage.py +3 -5
- dodal/devices/pgm.py +5 -6
- dodal/devices/qbpm.py +1 -1
- dodal/devices/robot.py +3 -3
- dodal/devices/smargon.py +1 -1
- dodal/devices/synchrotron.py +9 -4
- dodal/devices/tetramm.py +7 -7
- dodal/devices/thawer.py +13 -7
- dodal/devices/undulator.py +5 -5
- dodal/devices/util/epics_util.py +1 -1
- dodal/devices/watsonmarlow323_pump.py +45 -0
- dodal/devices/webcam.py +9 -2
- dodal/devices/xbpm_feedback.py +3 -5
- dodal/devices/xspress3/xspress3.py +8 -9
- dodal/devices/xspress3/xspress3_channel.py +3 -5
- dodal/devices/zebra.py +7 -6
- dodal/devices/zebra_controlled_shutter.py +5 -6
- dodal/devices/zocalo/__init__.py +2 -2
- dodal/devices/zocalo/zocalo_constants.py +3 -0
- dodal/devices/zocalo/zocalo_interaction.py +2 -1
- dodal/devices/zocalo/zocalo_results.py +92 -79
- dodal/plan_stubs/__init__.py +0 -0
- dodal/{plans/data_session_metadata.py → plan_stubs/data_session.py} +2 -2
- dodal/{plans/motor_util_plans.py → plan_stubs/motor_utils.py} +2 -2
- dodal/plan_stubs/wrapped.py +150 -0
- dodal/plans/__init__.py +4 -0
- dodal/plans/scanspec.py +66 -0
- dodal/plans/wrapped.py +57 -0
- dodal/utils.py +4 -0
- dls_dodal-1.34.1.dist-info/RECORD +0 -144
- dodal/devices/i24/i24_vgonio.py +0 -17
- {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/LICENSE +0 -0
- {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.34.1.dist-info → dls_dodal-1.36.0.dist-info}/top_level.txt +0 -0
- /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.
|
|
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
|
|
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,,
|
dodal/_version.py
CHANGED
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
|
|
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=
|
|
174
|
-
|
|
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=
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
) ->
|
|
158
|
-
"""Get the i24
|
|
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
|
-
|
|
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
|
|
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=
|
|
231
|
-
|
|
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=
|
|
237
|
-
|
|
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
|
|
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)
|
dodal/common/signal_utils.py
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
from collections.abc import Callable, Coroutine
|
|
2
|
-
from typing import Any
|
|
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,
|
|
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) ->
|
|
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[
|
|
36
|
-
get_from_hardware_func: Callable[[], Coroutine[Any, Any,
|
|
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=
|
|
51
|
-
get_from_hardware_func, datatype,
|
|
46
|
+
backend=HardwareBackedSoftSignalBackend(
|
|
47
|
+
get_from_hardware_func, datatype, units=units, precision=precision
|
|
52
48
|
)
|
|
53
49
|
)
|
dodal/devices/CTAB.py
CHANGED
dodal/devices/aperture.py
CHANGED
|
@@ -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
|
|
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
|
|
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(
|
|
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,
|
|
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(
|
|
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
|
|
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
|
|