dls-dodal 1.47.0__py3-none-any.whl → 1.48.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 (42) hide show
  1. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/METADATA +2 -2
  2. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/RECORD +40 -40
  3. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/WHEEL +1 -1
  4. dodal/_version.py +2 -2
  5. dodal/beamlines/aithre.py +6 -0
  6. dodal/beamlines/b01_1.py +1 -1
  7. dodal/beamlines/i03.py +21 -6
  8. dodal/beamlines/i04.py +17 -10
  9. dodal/beamlines/i18.py +1 -1
  10. dodal/beamlines/i19_1.py +9 -6
  11. dodal/beamlines/i24.py +5 -5
  12. dodal/common/beamlines/beamline_parameters.py +2 -28
  13. dodal/devices/aithre_lasershaping/goniometer.py +36 -2
  14. dodal/devices/aithre_lasershaping/laser_robot.py +27 -0
  15. dodal/devices/electron_analyser/__init__.py +10 -0
  16. dodal/devices/electron_analyser/abstract/__init__.py +0 -6
  17. dodal/devices/electron_analyser/abstract/base_detector.py +69 -56
  18. dodal/devices/electron_analyser/abstract/base_driver_io.py +114 -5
  19. dodal/devices/electron_analyser/abstract/base_region.py +1 -0
  20. dodal/devices/electron_analyser/specs/__init__.py +1 -2
  21. dodal/devices/electron_analyser/specs/detector.py +5 -21
  22. dodal/devices/electron_analyser/specs/driver_io.py +27 -2
  23. dodal/devices/electron_analyser/vgscienta/__init__.py +1 -2
  24. dodal/devices/electron_analyser/vgscienta/detector.py +8 -22
  25. dodal/devices/electron_analyser/vgscienta/driver_io.py +31 -3
  26. dodal/devices/electron_analyser/vgscienta/region.py +0 -1
  27. dodal/devices/fast_grid_scan.py +1 -1
  28. dodal/devices/i04/murko_results.py +93 -96
  29. dodal/devices/i18/diode.py +37 -4
  30. dodal/devices/mx_phase1/beamstop.py +23 -6
  31. dodal/devices/oav/oav_detector.py +61 -23
  32. dodal/devices/oav/oav_parameters.py +46 -16
  33. dodal/devices/oav/oav_to_redis_forwarder.py +2 -2
  34. dodal/devices/robot.py +20 -1
  35. dodal/devices/smargon.py +43 -4
  36. dodal/devices/zebra/zebra.py +8 -0
  37. dodal/plans/configure_arm_trigger_and_disarm_detector.py +167 -0
  38. dodal/plan_stubs/electron_analyser/__init__.py +0 -3
  39. dodal/plan_stubs/electron_analyser/configure_driver.py +0 -92
  40. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/entry_points.txt +0 -0
  41. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/licenses/LICENSE +0 -0
  42. {dls_dodal-1.47.0.dist-info → dls_dodal-1.48.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.47.0
3
+ Version: 1.48.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.10.0a3
219
+ Requires-Dist: ophyd-async>=0.10.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -1,7 +1,7 @@
1
- dls_dodal-1.47.0.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
1
+ dls_dodal-1.48.0.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
2
2
  dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
3
3
  dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
4
- dodal/_version.py,sha256=Y6iZU_PznDkAHl3CGWcR9NILK6pHF1FYft0mkB-5hKM,513
4
+ dodal/_version.py,sha256=24VKZlawQ9AuOnPMmQ73o0O0fvXG6A-_3ZeLR40kRI0,513
5
5
  dodal/cli.py,sha256=NieWNUgLUxyck1rHoFAPJjX1xXLzHNdQ-s4wvxYFfps,3757
6
6
  dodal/log.py,sha256=Rt5O3hFZfMnJvQueZvgagQuXnPqHrFxhponOvVkpfrk,9871
7
7
  dodal/utils.py,sha256=rqQNalufZPxUPSD2SYuUgWSCpefb8FnqvR6N0t-YcEY,19675
@@ -10,25 +10,25 @@ dodal/beamline_specific_utils/i03.py,sha256=P6Ls4FoVtcacH0RJM3v6ZwwGx27oMppcBdW0
10
10
  dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
11
11
  dodal/beamlines/__init__.py,sha256=lueGFb7cW1kDB_LfFavhrgYdjqGErCwAOk5XoU3BY00,3176
12
12
  dodal/beamlines/adsim.py,sha256=uOmFYZIGyput93XHk9R5ydZdxnTrS_wA2zSEm62UCVU,1930
13
- dodal/beamlines/aithre.py,sha256=1q7zeMYunOBIWCm203NIkCl5tgVl_-jMWc0f5af-W_E,263
14
- dodal/beamlines/b01_1.py,sha256=hHv9YJtUVmxAQ0UqF00-9wUYC_OtNo9awd04RM8b_HI,1993
13
+ dodal/beamlines/aithre.py,sha256=gEIyCwvIewNgSxrEmvPsCDuyXVmHjYHt-Go69HITIrE,436
14
+ dodal/beamlines/b01_1.py,sha256=SdjnpssxlpdTwE1D2fuXUsf9WmvUsyg-MSp3DONXyQU,2008
15
15
  dodal/beamlines/b07.py,sha256=Fxsn9YDKySnE3zZgtpD8-LSb4IzWlb5xd6sLTCRrvFU,740
16
16
  dodal/beamlines/b07_1.py,sha256=nY5fMUDoxn91OG2miVh5cXNQDH8o881yMW9RfZMRlnQ,742
17
17
  dodal/beamlines/i02_1.py,sha256=d2IyqFMgeaSEyZYm7GMSjTKr7_02SakyC_oARx-XwnY,1204
18
- dodal/beamlines/i03.py,sha256=y-E_U9Zd8_qo8mslkdVEvuUK4b1nRqBzrmPh-vxhKOk,15037
19
- dodal/beamlines/i04.py,sha256=T5UfRuA-I7W-JdSQf2jtPJUcFHKLTjLnM401tzUjuEY,13355
18
+ dodal/beamlines/i03.py,sha256=jLiqH3R_TK2sHsI1zCZ91cYcATEtG28-5lMUcsQTXhU,15594
19
+ dodal/beamlines/i04.py,sha256=_ogXHZZbJVNoMIOKLZe_8TbLP3vC4wss5lqqmzctR40,13723
20
20
  dodal/beamlines/i09.py,sha256=cr75vG65pgyWkEYdpcdpuuqAhN_tkmBiBqJn76lQN3k,744
21
21
  dodal/beamlines/i09_1.py,sha256=UbBn1q4L8BZXjZ1rUZQImwO0zkIYqGd5T8FptlFFMyw,742
22
22
  dodal/beamlines/i10.py,sha256=k8tnUwAb6jX2xY8hgST3ZP4jX3s4I4ispL5M6HF-M5k,11221
23
23
  dodal/beamlines/i13_1.py,sha256=RF8AXBqVKPY7rVf4j1gOxcURAToYVk-Yo9t4FWyaphU,1650
24
- dodal/beamlines/i18.py,sha256=1BL5QA744ZGuCc2IXdsy_ZD2UV9SVXlUYAiMtpy0YNk,3656
25
- dodal/beamlines/i19_1.py,sha256=3mxRQzMQrg2ppMN19EKqEV0bMs5pNtorQYgkBBWRPks,2838
24
+ dodal/beamlines/i18.py,sha256=CbzdLHXcIhLl1T-GmXmnNOhwHojl8V3d3ikxVoCqXII,3657
25
+ dodal/beamlines/i19_1.py,sha256=RsHXje1S2OLwuPnaqkRva02aAIq5Ya1FvPbHEQKo0Uc,2925
26
26
  dodal/beamlines/i19_2.py,sha256=zairZIPj1mrs9-dG19CjdMEFeqztGmlyeBmIxj7Kl5I,2329
27
27
  dodal/beamlines/i19_optics.py,sha256=RztOdru0lvPXpaIXSUfzSsPVIuwAMKZsEA8vJFU4_Mk,1184
28
28
  dodal/beamlines/i20_1.py,sha256=Xp6XXofjXh3Yibrg5wSHet-pXikprJ9oprEhJg19OkI,1825
29
29
  dodal/beamlines/i22.py,sha256=GAS1KgRrtpdXhYb7tIO3yHHMRcffxOqcSIaCZyexnDk,7595
30
30
  dodal/beamlines/i23.py,sha256=pf3KmzLZYDVqUB4LkLcNJk6z9H4qkFpTdVB8_0MYehs,3066
31
- dodal/beamlines/i24.py,sha256=9rBQMCWGdKiRnFbcVvmjiBWiC9WJIJCtLh5m6LkHUtU,7096
31
+ dodal/beamlines/i24.py,sha256=D83MIeoyC-tzd5QcR0yiLUyzraAyBTObx7VnP5-okSk,7158
32
32
  dodal/beamlines/p38.py,sha256=bka6zsZfFiBAD-rrLSmIIVAOAw0FvupSkhOHGEG77xo,5708
33
33
  dodal/beamlines/p45.py,sha256=2snO895TGwf4LbNIvg4BkvAGSfvZcevdpv_82MRpXKo,2129
34
34
  dodal/beamlines/p60.py,sha256=IJQdemlEkvVMYcyqp2WkyEwPAQrjor33b52wrfEVDIs,615
@@ -43,7 +43,7 @@ dodal/common/types.py,sha256=fkL7UOwDbe3v2_VJ5f1W5RxR98Wx-Ra-LxUZWkNDtls,486
43
43
  dodal/common/udc_directory_provider.py,sha256=v5OBaCUwjtQZAsRQUw6LlVL58UvwwDO1l2MKlilXjdk,2403
44
44
  dodal/common/visit.py,sha256=BLpr3GrP7Ij95V135hRJLgg7gWtBKXVxyOibWtcO8RE,5782
45
45
  dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- dodal/common/beamlines/beamline_parameters.py,sha256=yQdChyUTQfCRpNRJvBkZZ_dxruvrwVGX-VJRMoznryg,3559
46
+ dodal/common/beamlines/beamline_parameters.py,sha256=H9d4fLwVist7G-KdKYcv9D28E0tkhPtGPfiJ4V_5iHI,2721
47
47
  dodal/common/beamlines/beamline_utils.py,sha256=uy-HWchyUwoIqYYUWAd4BOPPoDzqvvtgkWQGzuKStTg,5061
48
48
  dodal/common/beamlines/device_helpers.py,sha256=lh7eih7KoFiqxo8PLQIDjbpBbhHuAXSeApt7K3KF9to,1002
49
49
  dodal/devices/CTAB.py,sha256=5_261Ox6NG2cJIzzwnjWz289BG0nZoE0wKOaI5V5jqM,1998
@@ -60,7 +60,7 @@ dodal/devices/cryostream.py,sha256=K-ldpredpeDTzNt4qtQMg99nKJNjBYoXBbK0WJGexzw,6
60
60
  dodal/devices/diamond_filter.py,sha256=hySd7HnLdplpPNvBrLddLjO_3LqgD8-99Zr__Sy_GbI,689
61
61
  dodal/devices/eiger.py,sha256=pQmklNX9kVCT5DE0WhRd5bAsNNKEo_vfPZG-ZunW67Q,15836
62
62
  dodal/devices/eiger_odin.py,sha256=ytUH_18YuM1nJDhplS6OTdtADloYvHpO6ppENjVd4jU,7411
63
- dodal/devices/fast_grid_scan.py,sha256=iNSPcixbgL7jAXi16uJR8Ly2KUW1_Wq9c8sfBrUHnk8,11922
63
+ dodal/devices/fast_grid_scan.py,sha256=NfP746FfuHW-SWs7c7-O9oocWyVjBpu89WW7kaanlLM,11914
64
64
  dodal/devices/fluorescence_detector_motion.py,sha256=-1qCSvW0PdT0m6BcoLxrtc0OJ5UDIBsEe11EOLr-gFw,501
65
65
  dodal/devices/flux.py,sha256=1CDsq9yU2-ho8MfYBl50Tl9ABZwpUBHnV486PQXKNoQ,462
66
66
  dodal/devices/focusing_mirror.py,sha256=vdUPkwyCAZBSR3LQ-EojDOoxVy1ZmOaD_nevETbj7BA,6592
@@ -73,12 +73,12 @@ dodal/devices/pgm.py,sha256=am-AST9iTqma1PkGOKLozqAokZWbJUbM3TNcqXzB-6A,1132
73
73
  dodal/devices/positioner.py,sha256=qf_1uYOI1whS0U5sPA3O3mlZYKrPuW3i0gEKI_q-up0,1289
74
74
  dodal/devices/pressure_jump_cell.py,sha256=h5nMNtr2PMG_AKM6nOB7qNTYT70GRuiGBwC-Ol2Yby0,10548
75
75
  dodal/devices/qbpm.py,sha256=FfrWWAHHtYv3fGRT1qljyPpAwoHJYfbooT9CfKg-oXI,465
76
- dodal/devices/robot.py,sha256=4jiWZnPBz3DmvJJdEG6mKIrrWHty2a6bdbCv8KOn1HE,6009
76
+ dodal/devices/robot.py,sha256=BoaWRqPeO1Q9EhJ1fnq4od0GaiBconBunzg3u5kK5n0,6859
77
77
  dodal/devices/s4_slit_gaps.py,sha256=4KdarIQoRqX4ry3LUS1Km7fkjUFahA0VuTd2DvYEqQ8,446
78
78
  dodal/devices/scatterguard.py,sha256=jx03in9QgaThWxD4t1S8_Llent2kWrn_hThJ9KkUWTk,330
79
79
  dodal/devices/scintillator.py,sha256=PlD6cnJ39PTB_e7QrRspPliLYE4kL_K7ziJURzuxgdA,365
80
80
  dodal/devices/slits.py,sha256=b_7ku2sHlzhMHTvWrwiRwee6ufrbxNX9JB_Z0lvk15o,1105
81
- dodal/devices/smargon.py,sha256=tOHb9fjI8ZCIrboiC4OzS2j1QJDOKkAlQ2SORbBmaGo,4708
81
+ dodal/devices/smargon.py,sha256=hLalJ32VDSjWQCCjFMXq4PhO17dven9RD5-9hqy8zNM,5734
82
82
  dodal/devices/status.py,sha256=hVrJS1yooQo6PRumRACoIEh-SKBUKxvBlQl-MtLFUMQ,327
83
83
  dodal/devices/synchrotron.py,sha256=wLfClZ1lYQWA_D--UsM3NnKLG8bY8mvVsRYER6ob-Ew,2026
84
84
  dodal/devices/tetramm.py,sha256=cvlXiKwrvVgYNb3Kt2b_YyRMT5-fqMoKJrOGFNNR150,8643
@@ -88,7 +88,8 @@ dodal/devices/undulator.py,sha256=ZCdMQ8PKnW7mFV1BmrprOt0aSBCZMSKAH-2yyVH5Ihk,53
88
88
  dodal/devices/watsonmarlow323_pump.py,sha256=rwU94YE6esgGLYdh-pe8nBo_3tvgp6brrrbPDrqp5_M,1406
89
89
  dodal/devices/webcam.py,sha256=mef075ynDbzZ4pNAjfxR_9tdTTqF_rM7hAOVEEOV-Do,2408
90
90
  dodal/devices/xbpm_feedback.py,sha256=j8MHhhE0feoe6R54zPKqS5EbQ0bEDR-nOpLHzHhnHHQ,1156
91
- dodal/devices/aithre_lasershaping/goniometer.py,sha256=YEl0DEXW4Dl9b3nsyfwrM7FDiwEZCXK-evGxlyOJr8k,512
91
+ dodal/devices/aithre_lasershaping/goniometer.py,sha256=rZXnifj4-D0Nx3vStK0s-fBijvdepL1SXlHKocV7uKI,1840
92
+ dodal/devices/aithre_lasershaping/laser_robot.py,sha256=BPAHHRa9cYYSR4iv05CQEqRBjt1VKp0INSoVDg0ImRQ,763
92
93
  dodal/devices/areadetector/plugins/CAM.py,sha256=sZzJm5Ez3eWfXZi_EB67wluhZmMQm1UyOc2bJFfzd1U,964
93
94
  dodal/devices/areadetector/plugins/MJPG.py,sha256=QTsxCoWbofNpLMGPoOR2hWoM33KyntuLepbF0YmX0KE,3031
94
95
  dodal/devices/attenuator/attenuator.py,sha256=Vq9Zsyf56S5fePHGeluImTUtxdwEqttBa2YBIdU5tJU,3993
@@ -106,27 +107,27 @@ dodal/devices/detector/det_dist_to_beam_converter.py,sha256=nSkhiEESyuzdrWoPu6h3
106
107
  dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
107
108
  dodal/devices/detector/detector.py,sha256=DqQvlgdjIdKErrZqgM9IH7drc-r6N8nhkFk7KwlgYAk,4815
108
109
  dodal/devices/detector/detector_motion.py,sha256=UGDQriDWRluDZOZh1mDX9w_fPjMD-_BGe11kA36Kezs,1616
109
- dodal/devices/electron_analyser/__init__.py,sha256=rggAbDOvnckJQ1Ny9ujvzKEmJQSbQopioyi5mYZUMWE,168
110
+ dodal/devices/electron_analyser/__init__.py,sha256=zeTwdPFK8Su5kviLu-gertJRRth4jCED9d0NoZl11vg,484
110
111
  dodal/devices/electron_analyser/types.py,sha256=2QObyZln7pvWyLgixabGGWvfs3aIF98gVSz2B4NS1OM,120
111
112
  dodal/devices/electron_analyser/util.py,sha256=prZXwwxw3F3JD7S00WLuYTKQx04xvZqzpIC8xESdxJw,437
112
- dodal/devices/electron_analyser/abstract/__init__.py,sha256=Ebxs4diLlkJKYLgY_wW2Chk_c7IZeuWi6LvMQRx4hiQ,834
113
- dodal/devices/electron_analyser/abstract/base_detector.py,sha256=_j0qYnRj2G2njUT0uJCp6J_z1so4AHL0lwTW3kiRzl0,6659
114
- dodal/devices/electron_analyser/abstract/base_driver_io.py,sha256=4LAxaQ9mPhVXd2tp8hHZ1UejbMS18guVgbdjt5UvaWA,4768
115
- dodal/devices/electron_analyser/abstract/base_region.py,sha256=PfpauNttv2Iw9jKBxcweTX_0DfAOAxNPDkxQ8r-MLPw,3476
116
- dodal/devices/electron_analyser/specs/__init__.py,sha256=BckNUYLcpysBXz4fBvD_sX4V-ekq_f5XsU2y_4vwUNQ,281
117
- dodal/devices/electron_analyser/specs/detector.py,sha256=iNuBMq3rsYdtdGt5127umM6T1O28YugdfEo1ot6oAVY,1078
118
- dodal/devices/electron_analyser/specs/driver_io.py,sha256=Cj-NW7ZvShBRdv_tRLqtlMQwZMADQ70Sv95gH3fCxdk,2604
113
+ dodal/devices/electron_analyser/abstract/__init__.py,sha256=OJ8rm_23azSe-MHmiyQZEUztqDnew4bRTdC2eVaiHT4,572
114
+ dodal/devices/electron_analyser/abstract/base_detector.py,sha256=FKMpd2Igg_ZaHeqgLMfD6eKgZTpfovEMnW2FspXtKkw,7146
115
+ dodal/devices/electron_analyser/abstract/base_driver_io.py,sha256=ms3BwmDA6X9efBNihvq_RZWiWQc89eFAKPBCQ6IVDp8,8705
116
+ dodal/devices/electron_analyser/abstract/base_region.py,sha256=BE4NGNvSm9Gg7c9Vjq1W51dWpuhwEW5EIQWNR9rGf5M,3522
117
+ dodal/devices/electron_analyser/specs/__init__.py,sha256=zzVEeFczfxVsVlBnt6spWhht4ScjKaah_pHC3R4Zy5g,233
118
+ dodal/devices/electron_analyser/specs/detector.py,sha256=HgVuGkEI8Xx2WAYplXNycGE9zut__esv91i9-4ee73M,542
119
+ dodal/devices/electron_analyser/specs/driver_io.py,sha256=qNFMnUJdrR3dAcgJySm92lN73H816B8uG6m1nk0miyQ,3339
119
120
  dodal/devices/electron_analyser/specs/region.py,sha256=Z39jr_d28fQ13KQq7Z3NCeHVSM73rbCkDyZNXzDzPzI,862
120
- dodal/devices/electron_analyser/vgscienta/__init__.py,sha256=OmcRhKF0UFkuNo1dQbI_0FNwvryAI8_pejvPEanRvbU,393
121
- dodal/devices/electron_analyser/vgscienta/detector.py,sha256=Bubsl5PF7b4sJastxx4SDDmW86RkwH9XRtx4EEalQCM,1190
122
- dodal/devices/electron_analyser/vgscienta/driver_io.py,sha256=es0ju6N8ST-z24o02FftwUKWyMHiGoSlgmPanItQshk,1800
123
- dodal/devices/electron_analyser/vgscienta/region.py,sha256=4zLdKxGQvfM7PeTTg6gTxlFEkBMRB8XrVnP7HClPEzo,2548
121
+ dodal/devices/electron_analyser/vgscienta/__init__.py,sha256=LL_rvNUZcOFNUvWmuuqAapQ_YbjzNQn7ootJEhZFttI,337
122
+ dodal/devices/electron_analyser/vgscienta/detector.py,sha256=zMFV0YPI9h0WjU9QDsM1JfOOCXKLV8Umy3iuu6nVyb8,632
123
+ dodal/devices/electron_analyser/vgscienta/driver_io.py,sha256=L0dv7bPTD0ZH9RCEUULePtNwa_joHxhdc0ec5MfUTFo,2707
124
+ dodal/devices/electron_analyser/vgscienta/region.py,sha256=h3uQqjWNyZDqDkhDYeJkGBNgZAETn7lr3AfhWynK3Po,2502
124
125
  dodal/devices/i03/__init__.py,sha256=Kvukapy4a5lUQ20qaCqYCJzKNaqJn2DfXP5nKZ_Pec8,118
125
126
  dodal/devices/i03/dcm.py,sha256=zDcgxOdMRVOQZBGDsLaIlr7o4UJIK2vehPWHxAxt6VA,2268
126
127
  dodal/devices/i03/undulator_dcm.py,sha256=c5H-17Dpt3pIMAlU9fHCnU59lYDnmgKk3qE2qR9gg44,2594
127
128
  dodal/devices/i04/__init__.py,sha256=Kvukapy4a5lUQ20qaCqYCJzKNaqJn2DfXP5nKZ_Pec8,118
128
129
  dodal/devices/i04/constants.py,sha256=jHZe5Aeph0_hCDJotMx7Yi8v_a_6jyoI6p60AQ8GvGM,271
129
- dodal/devices/i04/murko_results.py,sha256=9otfp-fa3EVCtX6FXMM2oMXFMGypqnARI0nNq0ycRxY,7276
130
+ dodal/devices/i04/murko_results.py,sha256=1vVQKQdBGYAwcX22oQzWYheelIppoTQk5_git563y10,7055
130
131
  dodal/devices/i04/transfocator.py,sha256=sVI4Bgv-2-DH4-F1nIXMp5Aktevrm3agZnCA-WgjmW8,3780
131
132
  dodal/devices/i10/diagnostics.py,sha256=5nnf1oFKtUJZa9Pewh1VxXpFecLscqTR2VakHKr_PaQ,5432
132
133
  dodal/devices/i10/i10_apple2.py,sha256=ErObNNE59NuYssde6ojWJb8wo3SVohkQsvK0Bjnf1T8,13192
@@ -140,7 +141,7 @@ dodal/devices/i13_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
140
141
  dodal/devices/i13_1/merlin.py,sha256=mgTFSMJftRzLL-HXAUuJkOYxtyA3Rp8YX0L46JCb30Y,1019
141
142
  dodal/devices/i13_1/merlin_controller.py,sha256=XkY8E3UkSzZb9Pw_Ic4bv1DYJvBVADS_3okjHvY4nH4,1453
142
143
  dodal/devices/i18/KBMirror.py,sha256=W4R3TeulSjosUqAFIIznyWzje_Y2AoEf9f8N-NkisYM,710
143
- dodal/devices/i18/diode.py,sha256=q8ddVYT7yDXwURzxw5gfXlGT1tFirNfHBmiKnpvvXHk,406
144
+ dodal/devices/i18/diode.py,sha256=nk5kvn4LsbhczRpCwHOO0_jJTYOz7MP9qm_uvBWuv7c,1468
144
145
  dodal/devices/i18/table.py,sha256=f6OtVSqCFIpXyoHX97CPLpaVDVXUNc2EvgSFP3qVFKo,446
145
146
  dodal/devices/i18/thor_labs_stage.py,sha256=I9JSKY-UqTjN-yBxQWL4CycTNNkUj3vknRrXjA6KZR8,364
146
147
  dodal/devices/i19/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -163,12 +164,12 @@ dodal/devices/i24/i24_detector_motion.py,sha256=_HgdsZqFYY0tKqUgMzViHaPEUFXL3WlX
163
164
  dodal/devices/i24/pilatus_metadata.py,sha256=I-AR8vd67qf6p0vZnRPTv4aNPN5T4KpSt2Iog4_jvn0,1781
164
165
  dodal/devices/i24/pmac.py,sha256=UTcJdTyzr7DL5XanjtjIopsxEyAPn9pv2jwgh2ksWV4,7078
165
166
  dodal/devices/i24/vgonio.py,sha256=sxSmcYZayVJPJz_D_91j9PmNor7Tbl1RGQFRrdtESlw,533
166
- dodal/devices/mx_phase1/beamstop.py,sha256=r2buBXGWaZ4qSRSxKog_F6bbArq4dp-5-cUPn-0wJZU,2593
167
+ dodal/devices/mx_phase1/beamstop.py,sha256=MeSpp4YpHgIrWCifDU7OTUaJNAMLVpcmgxTMjmOy048,3170
167
168
  dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
169
  dodal/devices/oav/oav_calculations.py,sha256=qoaNz4MAdbpu0XHAkWTQ3rebFwsWfa8JA1eerUgISjA,2367
169
- dodal/devices/oav/oav_detector.py,sha256=e5OnOp3MKr2mRhrtb8imcHO-CR-2GLhFsj5mHUCNOqc,4647
170
- dodal/devices/oav/oav_parameters.py,sha256=gGN73TQGUiRzlIO5YKiqCRkjpTKsV6LFGo7Eu4Vs82g,6074
171
- dodal/devices/oav/oav_to_redis_forwarder.py,sha256=pfhaW6Uo_1wDNfywyPkS5UTrY8yhkerhjgJfRMqrJRA,6259
170
+ dodal/devices/oav/oav_detector.py,sha256=f6z5DIOZOba4nXJq3kusdOF-qpV0gJ-SeDh-oRpfqsM,5874
171
+ dodal/devices/oav/oav_parameters.py,sha256=nnlTwrX5F6eMVK6wUz_MU39aLfV_P-_EyklfTQFAjZ4,6856
172
+ dodal/devices/oav/oav_to_redis_forwarder.py,sha256=Nz_fOBK9NIsFTVO-G67JB-0qzDybWb_HS7RCkqrHfd8,6265
172
173
  dodal/devices/oav/utils.py,sha256=T-xg7J38ritzXwRrKjsWZ7daC_qR7aNhlbkXx75nJ8Q,3188
173
174
  dodal/devices/oav/pin_image_recognition/__init__.py,sha256=_eCq-rEtGNXVfrpahfKMLu53lEr49q5rtVqg0GhiODQ,6534
174
175
  dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
@@ -190,7 +191,7 @@ dodal/devices/util/test_utils.py,sha256=KEYkqyZrAyju438VCbtQ0Ujv-9GBuIuVGCgggDHU
190
191
  dodal/devices/xspress3/xspress3.py,sha256=75RdPuHpES4Xi-Lcywz0XUhaN2G3vZSoc-dzgcxfNvs,4636
191
192
  dodal/devices/xspress3/xspress3_channel.py,sha256=w8tAx2lz5kJ_LeJ_eb_4o--Dtt8MRijsYNgDG6oEIVg,1626
192
193
  dodal/devices/zebra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
- dodal/devices/zebra/zebra.py,sha256=PpgGVrtb7t5QTNchEalSG3bPeOqf6tPzOUHoOyARWLY,9290
194
+ dodal/devices/zebra/zebra.py,sha256=wDHi6t-I1t35_McRftB82pF9p7N50LQaOtdEl28c8dI,9510
194
195
  dodal/devices/zebra/zebra_constants_mapping.py,sha256=S2iXbmO3XVY5aYsTCi8Kw1YRJg5dGrdDaZppEeZN1Vk,4169
195
196
  dodal/devices/zebra/zebra_controlled_shutter.py,sha256=tcBq2WQxST9g2VrjVWu-tOomFX-zGLHLNDhYhL0DtHc,1871
196
197
  dodal/devices/zocalo/__init__.py,sha256=P9L31CzVJjXv3TQHau5qywYGFPTyopVaHLww8MOYnzc,440
@@ -203,17 +204,16 @@ dodal/plan_stubs/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z
203
204
  dodal/plan_stubs/data_session.py,sha256=Syc6XKaN1usf7bNWOez8_vAH3byrcROqskmBrSUWa4Y,2132
204
205
  dodal/plan_stubs/motor_utils.py,sha256=Mf8utOA_xmxUa2dLmQ1uRkdfyDTip7D8YcKeCBCQLUQ,4458
205
206
  dodal/plan_stubs/wrapped.py,sha256=kC8HH7bx3-sLYu2oieY_502tAdT2OECF8n-fqoL5Bfc,4266
206
- dodal/plan_stubs/electron_analyser/__init__.py,sha256=CBr0ikST8OfEu26TP3etKp_MxYg-0phwWPtMaUgczNE,163
207
- dodal/plan_stubs/electron_analyser/configure_driver.py,sha256=7hx4mhE5vthb3Y30e1EslDI6_voU4NCssvsUBDfqhCs,3199
208
207
  dodal/plans/__init__.py,sha256=nH1jNxw3DzDMg9O8Uda0kqKIalRVEWBrq07OLY6Ey38,93
208
+ dodal/plans/configure_arm_trigger_and_disarm_detector.py,sha256=pI1AkTH_5hIU56GmmrBdHMhepuDCuQz44V-O4XIaueg,5384
209
209
  dodal/plans/save_panda.py,sha256=1fumH7Ih8uDIv8ahAtgQ_vUuR3dz0sfUs4n9TEtEbSs,3053
210
210
  dodal/plans/scanspec.py,sha256=Q0AcvTKRT401iGMRDSqK-D523UX5_ofiVMZ_rNXKOx8,2074
211
211
  dodal/plans/verify_undulator_gap.py,sha256=OcDN09-eCoMzsmhKGxvzsH5EapG2zYz0yGCqUtQxLSc,568
212
212
  dodal/plans/wrapped.py,sha256=BPMw__RcWvk9v5XnhMsi9_k4KsDEbmXogzD2n1ecbUg,2098
213
213
  dodal/plans/preprocessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
214
  dodal/plans/preprocessors/verify_undulator_gap.py,sha256=cBZEGq8TW1jrXFXB00iClQVXSEaE_jP_rHMY9WTgYyY,1813
215
- dls_dodal-1.47.0.dist-info/METADATA,sha256=_bGWkGqNchQikp-Yd_gJM62yYhYkqGSCvljp9zJQ6g4,16806
216
- dls_dodal-1.47.0.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
217
- dls_dodal-1.47.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
218
- dls_dodal-1.47.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
219
- dls_dodal-1.47.0.dist-info/RECORD,,
215
+ dls_dodal-1.48.0.dist-info/METADATA,sha256=faFiABQKyznao1MadSS2zvfIcvbLIxz29YRaLXLtnDk,16806
216
+ dls_dodal-1.48.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
217
+ dls_dodal-1.48.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
218
+ dls_dodal-1.48.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
219
+ dls_dodal-1.48.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.7.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
dodal/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.47.0'
21
- __version_tuple__ = version_tuple = (1, 47, 0)
20
+ __version__ = version = '1.48.0'
21
+ __version_tuple__ = version_tuple = (1, 48, 0)
dodal/beamlines/aithre.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from dodal.common.beamlines.beamline_utils import device_factory
2
2
  from dodal.devices.aithre_lasershaping.goniometer import Goniometer
3
+ from dodal.devices.aithre_lasershaping.laser_robot import LaserRobot
3
4
 
4
5
  PREFIX = "LA18L"
5
6
 
@@ -7,3 +8,8 @@ PREFIX = "LA18L"
7
8
  @device_factory()
8
9
  def goniometer() -> Goniometer:
9
10
  return Goniometer(f"{PREFIX}-MO-LSR-01:", "goniometer")
11
+
12
+
13
+ @device_factory()
14
+ def robot() -> LaserRobot:
15
+ return LaserRobot("robot", f"{PREFIX}-MO-ROBOT-01:")
dodal/beamlines/b01_1.py CHANGED
@@ -24,7 +24,7 @@ set_utils_beamline(BL)
24
24
  set_path_provider(
25
25
  StaticVisitPathProvider(
26
26
  BL,
27
- Path("/dls/b01-1/data/"),
27
+ Path("/dls/b01-1/data/2025/cm40661-1/"),
28
28
  client=LocalDirectoryServiceClient(),
29
29
  )
30
30
  )
dodal/beamlines/i03.py CHANGED
@@ -1,3 +1,4 @@
1
+ from ophyd_async.fastcs.eiger import EigerDetector as FastEiger
1
2
  from ophyd_async.fastcs.panda import HDFPanda
2
3
 
3
4
  from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
@@ -28,8 +29,8 @@ from dodal.devices.i03 import Beamstop
28
29
  from dodal.devices.i03.dcm import DCM
29
30
  from dodal.devices.i03.undulator_dcm import UndulatorDCM
30
31
  from dodal.devices.motors import XYZPositioner
31
- from dodal.devices.oav.oav_detector import OAV
32
- from dodal.devices.oav.oav_parameters import OAVConfig
32
+ from dodal.devices.oav.oav_detector import OAVBeamCentreFile
33
+ from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
33
34
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
34
35
  from dodal.devices.qbpm import QBPM
35
36
  from dodal.devices.robot import BartRobot
@@ -172,6 +173,20 @@ def eiger(mock: bool = False) -> EigerDetector:
172
173
  )
173
174
 
174
175
 
176
+ @device_factory()
177
+ def fastcs_eiger() -> FastEiger:
178
+ """Get the i03 FastCS Eiger device, instantiate it if it hasn't already been.
179
+ If this is called when already instantiated in i03, it will return the existing object.
180
+ """
181
+
182
+ return FastEiger(
183
+ prefix=PREFIX.beamline_prefix,
184
+ path_provider=get_path_provider(),
185
+ drv_suffix="-EA-EIGER-02:",
186
+ hdf_suffix="-EA-EIGER-01:OD:",
187
+ )
188
+
189
+
175
190
  @device_factory()
176
191
  def zebra_fast_grid_scan() -> ZebraFastGridScan:
177
192
  """Get the i03 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
@@ -197,15 +212,15 @@ def panda_fast_grid_scan() -> PandAFastGridScan:
197
212
 
198
213
  @device_factory()
199
214
  def oav(
200
- params: OAVConfig | None = None,
201
- ) -> OAV:
215
+ params: OAVConfigBeamCentre | None = None,
216
+ ) -> OAVBeamCentreFile:
202
217
  """Get the i03 OAV device, instantiate it if it hasn't already been.
203
218
  If this is called when already instantiated in i03, it will return the existing object.
204
219
  """
205
- return OAV(
220
+ return OAVBeamCentreFile(
206
221
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
207
222
  name="oav",
208
- config=params or OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
223
+ config=params or OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
209
224
  )
210
225
 
211
226
 
dodal/beamlines/i04.py CHANGED
@@ -24,7 +24,7 @@ from dodal.devices.i04.transfocator import Transfocator
24
24
  from dodal.devices.ipin import IPin
25
25
  from dodal.devices.motors import XYZPositioner
26
26
  from dodal.devices.mx_phase1.beamstop import Beamstop
27
- from dodal.devices.oav.oav_detector import OAV
27
+ from dodal.devices.oav.oav_detector import OAVBeamCentrePV
28
28
  from dodal.devices.oav.oav_parameters import OAVConfig
29
29
  from dodal.devices.oav.oav_to_redis_forwarder import OAVToRedisForwarder
30
30
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
@@ -53,7 +53,7 @@ DISPLAY_CONFIG = "/dls_sw/i04/software/gda_versions/var/display.configuration"
53
53
  DAQ_CONFIGURATION_PATH = "/dls_sw/i04/software/daq_configuration"
54
54
 
55
55
 
56
- BL = get_beamline_name("s04")
56
+ BL = get_beamline_name("i04")
57
57
  set_log_beamline(BL)
58
58
  set_utils_beamline(BL)
59
59
 
@@ -297,18 +297,25 @@ def zebra() -> Zebra:
297
297
 
298
298
 
299
299
  @device_factory(skip=BL == "s04")
300
- def oav(
301
- wait_for_connection: bool = True,
302
- fake_with_ophyd_sim: bool = False,
303
- params: OAVConfig | None = None,
304
- ) -> OAV:
300
+ def oav(params: OAVConfig | None = None) -> OAVBeamCentrePV:
305
301
  """Get the i04 OAV device, instantiate it if it hasn't already been.
306
302
  If this is called when already instantiated in i04, it will return the existing object.
307
303
  """
308
- return OAV(
304
+ return OAVBeamCentrePV(
309
305
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
310
- name="oav",
311
- config=params or OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
306
+ config=params or OAVConfig(ZOOM_PARAMS_FILE),
307
+ )
308
+
309
+
310
+ @device_factory(skip=BL == "s04")
311
+ def oav_full_screen(params: OAVConfig | None = None) -> OAVBeamCentrePV:
312
+ """Get the i04 OAV device, instantiate it if it hasn't already been.
313
+ If this is called when already instantiated in i04, it will return the existing object.
314
+ """
315
+ return OAVBeamCentrePV(
316
+ prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
317
+ config=params or OAVConfig(ZOOM_PARAMS_FILE),
318
+ overlay_channel=3,
312
319
  )
313
320
 
314
321
 
dodal/beamlines/i18.py CHANGED
@@ -113,7 +113,7 @@ def hfm() -> KBMirror:
113
113
 
114
114
 
115
115
  @device_factory()
116
- def d7diode() -> Diode:
116
+ def d7_diode() -> Diode:
117
117
  return Diode(f"{PREFIX.beamline_prefix}-DI-PHDGN-07:")
118
118
 
119
119
 
dodal/beamlines/i19_1.py CHANGED
@@ -6,9 +6,12 @@ from dodal.common.beamlines.beamline_utils import (
6
6
  )
7
7
  from dodal.devices.i19.beamstop import BeamStop
8
8
  from dodal.devices.i19.blueapi_device import HutchState
9
- from dodal.devices.i19.shutter import AccessControlledShutter
10
- from dodal.devices.oav.oav_detector import OAV
11
- from dodal.devices.oav.oav_parameters import OAVConfig
9
+ from dodal.devices.i19.shutter import (
10
+ AccessControlledShutter,
11
+ HutchState,
12
+ )
13
+ from dodal.devices.oav.oav_detector import OAVBeamCentreFile
14
+ from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
12
15
  from dodal.devices.synchrotron import Synchrotron
13
16
  from dodal.devices.zebra.zebra import Zebra
14
17
  from dodal.devices.zebra.zebra_constants_mapping import (
@@ -48,10 +51,10 @@ def beamstop() -> BeamStop:
48
51
 
49
52
 
50
53
  @device_factory()
51
- def oav() -> OAV:
52
- return OAV(
54
+ def oav() -> OAVBeamCentreFile:
55
+ return OAVBeamCentreFile(
53
56
  prefix=f"{PREFIX.beamline_prefix}-EA-OAV-01:",
54
- config=OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
57
+ config=OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
55
58
  )
56
59
 
57
60
 
dodal/beamlines/i24.py CHANGED
@@ -15,8 +15,8 @@ from dodal.devices.i24.i24_detector_motion import DetectorMotion
15
15
  from dodal.devices.i24.pilatus_metadata import PilatusMetadata
16
16
  from dodal.devices.i24.pmac import PMAC
17
17
  from dodal.devices.i24.vgonio import VerticalGoniometer
18
- from dodal.devices.oav.oav_detector import OAV
19
- from dodal.devices.oav.oav_parameters import OAVConfig
18
+ from dodal.devices.oav.oav_detector import OAVBeamCentreFile
19
+ from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
20
20
  from dodal.devices.zebra.zebra import Zebra
21
21
  from dodal.devices.zebra.zebra_constants_mapping import (
22
22
  ZebraMapping,
@@ -150,11 +150,11 @@ def pmac() -> PMAC:
150
150
 
151
151
 
152
152
  @device_factory(skip=BL == "s24")
153
- def oav() -> OAV:
154
- return OAV(
153
+ def oav() -> OAVBeamCentreFile:
154
+ return OAVBeamCentreFile(
155
155
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
156
156
  name="oav",
157
- config=OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
157
+ config=OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
158
158
  )
159
159
 
160
160
 
@@ -1,3 +1,4 @@
1
+ import ast
1
2
  from typing import Any, cast
2
3
 
3
4
  from dodal.log import LOGGER
@@ -57,34 +58,7 @@ class GDABeamlineParameters:
57
58
 
58
59
  @classmethod
59
60
  def parse_value(cls, value: str):
60
- if value[0] == "[":
61
- return cls.parse_list(value[1:].strip())
62
- else:
63
- return cls.parse_list_element(value)
64
-
65
- @classmethod
66
- def parse_list_element(cls, value: str):
67
- if value == "Yes":
68
- return True
69
- elif value == "No":
70
- return False
71
- else:
72
- return float(value)
73
-
74
- @classmethod
75
- def parse_list(cls, value: str):
76
- list_output = []
77
- remaining = value.strip()
78
- i = 0
79
- while (i := remaining.find(",")) != -1:
80
- list_output.append(cls.parse_list_element(remaining[:i]))
81
- remaining = remaining[i + 1 :].lstrip()
82
- if (i := remaining.find("]")) != -1:
83
- list_output.append(cls.parse_list_element(remaining[:i]))
84
- remaining = remaining[i + 1 :].lstrip()
85
- else:
86
- raise ValueError("Missing closing ']' in list expression")
87
- return list_output
61
+ return ast.literal_eval(value.replace("Yes", "True").replace("No", "False"))
88
62
 
89
63
 
90
64
  def get_beamline_parameters(beamline_param_path: str | None = None):
@@ -1,9 +1,21 @@
1
- from ophyd_async.core import StandardReadable
1
+ import asyncio
2
+ import math
3
+
4
+ from ophyd_async.core import StandardReadable, derived_signal_rw
2
5
  from ophyd_async.epics.motor import Motor
3
6
 
4
7
 
5
8
  class Goniometer(StandardReadable):
6
- """Goniometer and the stages it sits on"""
9
+ """The Aithre lab goniometer and the XYZ stage it sits on.
10
+
11
+ `x`, `y` and `z` control the axes of the positioner at the base, while `sampy` and
12
+ `sampz` control the positioner of the sample. `omega` is the rotation about the
13
+ x-axis (along the length of the sample holder).
14
+
15
+ The `vertical_position` signal refers to the height of the sample from the point of
16
+ view of the OAV and setting this value moves the sample vertically in the OAV plane
17
+ regardless of the current rotation.
18
+ """
7
19
 
8
20
  def __init__(self, prefix: str, name: str = "") -> None:
9
21
  self.x = Motor(prefix + "X")
@@ -12,4 +24,26 @@ class Goniometer(StandardReadable):
12
24
  self.sampy = Motor(prefix + "SAMPY")
13
25
  self.sampz = Motor(prefix + "SAMPZ")
14
26
  self.omega = Motor(prefix + "OMEGA")
27
+ self.vertical_position = derived_signal_rw(
28
+ self._get,
29
+ self._set,
30
+ sampy=self.sampy,
31
+ sampz=self.sampz,
32
+ omega=self.omega,
33
+ )
15
34
  super().__init__(name)
35
+
36
+ def _get(self, sampz: float, sampy: float, omega: float) -> float:
37
+ z_component = sampz * math.cos(math.radians(omega))
38
+ y_component = sampy * math.sin(math.radians(omega))
39
+ return z_component + y_component
40
+
41
+ async def _set(self, value: float) -> None:
42
+ omega = await self.omega.user_readback.get_value()
43
+ z_component = value * math.cos(math.radians(omega))
44
+ y_component = value * math.sin(math.radians(omega))
45
+ await asyncio.gather(
46
+ self.sampy.set(y_component),
47
+ self.sampz.set(z_component),
48
+ self.omega.set(omega),
49
+ )
@@ -0,0 +1,27 @@
1
+ from ophyd_async.core import StrictEnum
2
+ from ophyd_async.epics.core import epics_signal_rw
3
+
4
+ from dodal.devices.robot import BartRobot
5
+
6
+
7
+ class ForceBit(StrictEnum):
8
+ ON = "On"
9
+ NO = "No"
10
+ OFF = "Off"
11
+
12
+
13
+ class LidHeatEnable(StrictEnum):
14
+ ENABLED = "Enabled"
15
+ DISABLED = "Disabled"
16
+
17
+
18
+ class LaserRobot(BartRobot):
19
+ def __init__(self, name: str, prefix: str) -> None:
20
+ self.dewar_lid_heater = epics_signal_rw(
21
+ LidHeatEnable, prefix + "DW_1_ENABLED", prefix + "DW_1_CTRL"
22
+ )
23
+ self.cryojet_retract = epics_signal_rw(ForceBit, prefix + "OP_24_FORCE_OPTION")
24
+ self.set_beamline_safe = epics_signal_rw(
25
+ ForceBit, prefix + "IP_16_FORCE_OPTION"
26
+ )
27
+ super().__init__(name=name, prefix=prefix)
@@ -1,3 +1,9 @@
1
+ from .abstract.base_detector import (
2
+ ElectronAnalyserDetector,
3
+ ElectronAnalyserRegionDetector,
4
+ TElectronAnalyserDetector,
5
+ TElectronAnalyserRegionDetector,
6
+ )
1
7
  from .types import EnergyMode
2
8
  from .util import to_binding_energy, to_kinetic_energy
3
9
 
@@ -5,4 +11,8 @@ __all__ = [
5
11
  "to_binding_energy",
6
12
  "to_kinetic_energy",
7
13
  "EnergyMode",
14
+ "ElectronAnalyserDetector",
15
+ "TElectronAnalyserDetector",
16
+ "ElectronAnalyserRegionDetector",
17
+ "TElectronAnalyserRegionDetector",
8
18
  ]
@@ -1,9 +1,6 @@
1
1
  from .base_detector import (
2
2
  AbstractAnalyserDriverIO,
3
3
  AbstractElectronAnalyserDetector,
4
- AbstractElectronAnalyserRegionDetector,
5
- TAbstractElectronAnalyserDetector,
6
- TAbstractElectronAnalyserRegionDetector,
7
4
  )
8
5
  from .base_driver_io import AbstractAnalyserDriverIO, TAbstractAnalyserDriverIO
9
6
  from .base_region import (
@@ -20,9 +17,6 @@ __all__ = [
20
17
  "TAbstractBaseSequence",
21
18
  "AbstractAnalyserDriverIO",
22
19
  "AbstractElectronAnalyserDetector",
23
- "AbstractElectronAnalyserRegionDetector",
24
- "TAbstractElectronAnalyserDetector",
25
- "TAbstractElectronAnalyserRegionDetector",
26
20
  "AbstractAnalyserDriverIO",
27
21
  "TAbstractAnalyserDriverIO",
28
22
  ]