dls-dodal 1.36.3__py3-none-any.whl → 1.37.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 (43) hide show
  1. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/METADATA +3 -3
  2. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/RECORD +43 -29
  3. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/WHEEL +1 -1
  4. dodal/_version.py +2 -2
  5. dodal/beamlines/i02_1.py +37 -0
  6. dodal/beamlines/i03.py +20 -3
  7. dodal/beamlines/i04.py +3 -3
  8. dodal/beamlines/i10.py +105 -0
  9. dodal/beamlines/i22.py +15 -0
  10. dodal/beamlines/i24.py +1 -1
  11. dodal/beamlines/p99.py +6 -2
  12. dodal/common/crystal_metadata.py +3 -3
  13. dodal/common/udc_directory_provider.py +3 -1
  14. dodal/devices/aperturescatterguard.py +3 -0
  15. dodal/devices/{attenuator.py → attenuator/attenuator.py} +29 -1
  16. dodal/devices/attenuator/filter.py +11 -0
  17. dodal/devices/attenuator/filter_selections.py +72 -0
  18. dodal/devices/bimorph_mirror.py +151 -0
  19. dodal/devices/current_amplifiers/__init__.py +34 -0
  20. dodal/devices/current_amplifiers/current_amplifier.py +103 -0
  21. dodal/devices/current_amplifiers/current_amplifier_detector.py +109 -0
  22. dodal/devices/current_amplifiers/femto.py +143 -0
  23. dodal/devices/current_amplifiers/sr570.py +214 -0
  24. dodal/devices/current_amplifiers/struck_scaler_counter.py +79 -0
  25. dodal/devices/detector/det_dim_constants.py +15 -0
  26. dodal/devices/eiger_odin.py +3 -3
  27. dodal/devices/fast_grid_scan.py +8 -3
  28. dodal/devices/i03/beamstop.py +85 -0
  29. dodal/devices/i04/transfocator.py +67 -53
  30. dodal/devices/i10/rasor/rasor_current_amp.py +72 -0
  31. dodal/devices/i10/rasor/rasor_motors.py +62 -0
  32. dodal/devices/i10/rasor/rasor_scaler_cards.py +12 -0
  33. dodal/devices/p99/sample_stage.py +2 -28
  34. dodal/devices/robot.py +2 -2
  35. dodal/devices/undulator_dcm.py +9 -11
  36. dodal/devices/zebra.py +6 -1
  37. dodal/devices/zocalo/zocalo_interaction.py +2 -1
  38. dodal/devices/zocalo/zocalo_results.py +22 -2
  39. dodal/log.py +2 -2
  40. dodal/plans/wrapped.py +3 -3
  41. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/LICENSE +0 -0
  42. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/entry_points.txt +0 -0
  43. {dls_dodal-1.36.3.dist-info → dls_dodal-1.37.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: dls-dodal
3
- Version: 1.36.3
3
+ Version: 1.37.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
@@ -228,7 +228,7 @@ Requires-Dist: pydantic>=2.0
228
228
  Requires-Dist: opencv-python-headless
229
229
  Requires-Dist: aioca
230
230
  Requires-Dist: p4p
231
- Requires-Dist: numpy<2.0
231
+ Requires-Dist: numpy
232
232
  Requires-Dist: aiofiles
233
233
  Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
@@ -1,8 +1,8 @@
1
1
  dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
2
2
  dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
3
- dodal/_version.py,sha256=zCUFph3NXnWsNVGniqwz8NKCDOFFa-siapasQGlkWD4,413
3
+ dodal/_version.py,sha256=G8h3RZ-rmov-shRSPQyyHBDC9-SRuF1mCqQtZVgfOsc,413
4
4
  dodal/cli.py,sha256=NieWNUgLUxyck1rHoFAPJjX1xXLzHNdQ-s4wvxYFfps,3757
5
- dodal/log.py,sha256=0to7CRsbzbgVfAAfKRAMhsaUuKqF2-7CGdQc-z8Uhno,9499
5
+ dodal/log.py,sha256=ry8WMq1S4WMIAPqtqGeKuegMRN7Jy3qdVTJlkpKXkL8,9503
6
6
  dodal/utils.py,sha256=h2sNmTlsaznfxusV1Xj_mXtNjzsWjWAgmps6I0YNA3U,18097
7
7
  dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  dodal/beamline_specific_utils/i03.py,sha256=P6Ls4FoVtcacH0RJM3v6ZwwGx27oMppcBdW0la-ohTY,377
@@ -10,25 +10,26 @@ dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
10
10
  dodal/beamlines/__init__.py,sha256=FsS1hMz9nqwTP12UtCJsfVn712mFElcBq2kKKpscp9k,3074
11
11
  dodal/beamlines/adsim.py,sha256=DUAFS1ueoZ6DK2cmZkiEm3NElnaro1mUvyodv14pSmU,1839
12
12
  dodal/beamlines/b01_1.py,sha256=0gLjg0O9ttMjHzszSyJ_GT3fnoAB6u4aJ4MdAfjJbHA,1788
13
- dodal/beamlines/i03.py,sha256=WOMkGTcrrKqoBNeRObumMA8Nlo404uIr2ccfn8gK-zs,18063
14
- dodal/beamlines/i04.py,sha256=z8LUbhyfUDU08oSp85hg7hFE8FJkAyLsqPUQScs5SUA,14567
15
- dodal/beamlines/i10.py,sha256=4VrbkRFi1HdNrXN_ItMWOROrx1BRbid-ZbtwcgMWP9w,9129
13
+ dodal/beamlines/i02_1.py,sha256=d2IyqFMgeaSEyZYm7GMSjTKr7_02SakyC_oARx-XwnY,1204
14
+ dodal/beamlines/i03.py,sha256=YMbZFpTWEYO3o0qrIbMqQEO8rDTaXqClIdrvdi45oS4,18651
15
+ dodal/beamlines/i04.py,sha256=pZvMEm4sHNQjGPEJowGNJn0NRzh6K2clGcj24BBpgVM,14614
16
+ dodal/beamlines/i10.py,sha256=lkn_xg0pt-vFuWkUGyl62A0xT-Rzs71JztJ1EeQkMi0,11487
16
17
  dodal/beamlines/i13_1.py,sha256=csXHrdwUh4sXTmb4X6ZiiSS_XxRkNShsVoBMxYI6rG0,1833
17
18
  dodal/beamlines/i20_1.py,sha256=MaPgONHqpoZuBtkiKEzYtViJnKBM2_ekeP4OdbmuXHE,1158
18
- dodal/beamlines/i22.py,sha256=tzx8w86uvJHo5TuwPoIUErB7C5mGhqTzlv45qrppld0,7228
19
+ dodal/beamlines/i22.py,sha256=ED6TtjwZzGn0Hot1WSgUhdOQ4amLDjkse5hBqEBD6Zg,7619
19
20
  dodal/beamlines/i23.py,sha256=2j5qLoqE_hg9ETHqNkOVu7LLkVB8qalgXeORnVYKN_I,1075
20
- dodal/beamlines/i24.py,sha256=bV1OqQP0KdJDM5SLsru6TGYLSxwXSy2GExpG44Qfo0w,8539
21
+ dodal/beamlines/i24.py,sha256=IXujBTX_O0zEL0sBVk0DDerHBZN84dYP0aMEEtbH9RA,8550
21
22
  dodal/beamlines/p38.py,sha256=JJbclLYoRdIxcpzpW4oTj77YJ001CdEAM0bKRk7seYI,8735
22
23
  dodal/beamlines/p45.py,sha256=N4SDTIFok3uMqb37higZHMr3xRjxItsT4ib_KacKKAE,2935
23
- dodal/beamlines/p99.py,sha256=I6c_3NbvEPOpy2z1uwLRqwCkd83Sf15-OXEykLkn0-c,910
24
+ dodal/beamlines/p99.py,sha256=k24QhYpoOHBd0188Fu3wvmpT6dsu8okiIVqVVckdBkw,1063
24
25
  dodal/beamlines/training_rig.py,sha256=qAsUV4X1hxQFIjuQG92UMwYtE0nu1_hL4cP1zSiCe3Y,1698
25
26
  dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
26
27
  dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
27
- dodal/common/crystal_metadata.py,sha256=IKhe_nCbsuIV2W5OvPzIQ-FXfusQ2d7VJ-xH899dZIc,1924
28
+ dodal/common/crystal_metadata.py,sha256=XGr-X81G9SZvPx5b4nBCH4FOnywyX_zYVy6zwDxIMVM,1926
28
29
  dodal/common/maths.py,sha256=K9x7iL3xXLtWYTV-xlFHDNSTIL9a2UP3Ws7wr6Dm2rQ,1803
29
30
  dodal/common/signal_utils.py,sha256=-p4h7xtGPp13t6HTjgFGcs5nN22kVArlkfCPVjpLuRU,1728
30
31
  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/udc_directory_provider.py,sha256=v5OBaCUwjtQZAsRQUw6LlVL58UvwwDO1l2MKlilXjdk,2403
32
33
  dodal/common/visit.py,sha256=2UbbCmgOjZWSCxFzE9RYiTJhA_IoVOegma-Jv-PJqps,5787
33
34
  dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
35
  dodal/common/beamlines/beamline_parameters.py,sha256=oIPHooqu5vTAwfqZutsKbzwdi9nvFF8568Mz7jrK5rI,3618
@@ -38,16 +39,16 @@ dodal/devices/CTAB.py,sha256=5_261Ox6NG2cJIzzwnjWz289BG0nZoE0wKOaI5V5jqM,1998
38
39
  dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
40
  dodal/devices/adsim.py,sha256=vCexraF4zLssHdjfPod-XuQGJE_sWoCttFdx__HDS8w,488
40
41
  dodal/devices/aperture.py,sha256=yyw2ei3gM_lmZWDQ6VTbydB58RCDTen_nqBZyoTP2IM,583
41
- dodal/devices/aperturescatterguard.py,sha256=PRNnGbxYKFWoa1m70Mz-6Ta4NtFG0ShUprBvv2viUeI,8993
42
+ dodal/devices/aperturescatterguard.py,sha256=T0ddbX_SH4Aru5XxhrrhEDQAG4Mzq_sZBMofNIIz8tc,9055
42
43
  dodal/devices/apple2_undulator.py,sha256=ls_qGM_nGsZdo4I_Zs_stFjUc1oZE6zB1puWrV8-2Wg,22470
43
- dodal/devices/attenuator.py,sha256=SEDnnNeUpwBArJbPcwHyr5BwkHO1Jvgsrw1bpFz5u-o,2894
44
44
  dodal/devices/backlight.py,sha256=nQIr3J-I-OXnOUoWmr3ruy3nhq_q2US1KXC4NrGG_2U,1634
45
+ dodal/devices/bimorph_mirror.py,sha256=kG9waIdTkKglUrvY_wD9w533oKPqa7fct1-wa_GCFW0,4797
45
46
  dodal/devices/cryostream.py,sha256=K-ldpredpeDTzNt4qtQMg99nKJNjBYoXBbK0WJGexzw,656
46
47
  dodal/devices/dcm.py,sha256=JbyxLnrS68nnnv39l9XEWgJgXUBqxX6aFo19MZnL36E,2574
47
48
  dodal/devices/diamond_filter.py,sha256=A--RHd7WuH-IBhvCyENcRCTP4K-mm_Kqpa0pojpHZow,1098
48
49
  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=dKF2-8CNmm-LaMXBkqkO31pTcAAwiAXznEeB6tg0f6E,11149
50
+ dodal/devices/eiger_odin.py,sha256=ytUH_18YuM1nJDhplS6OTdtADloYvHpO6ppENjVd4jU,7411
51
+ dodal/devices/fast_grid_scan.py,sha256=SNwbLuSJ6YnZ-Qx6t6veLZtStcrPNslRGrw8nouFx9g,11259
51
52
  dodal/devices/fluorescence_detector_motion.py,sha256=-1qCSvW0PdT0m6BcoLxrtc0OJ5UDIBsEe11EOLr-gFw,501
52
53
  dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
53
54
  dodal/devices/focusing_mirror.py,sha256=vdUPkwyCAZBSR3LQ-EojDOoxVy1ZmOaD_nevETbj7BA,6592
@@ -60,7 +61,7 @@ dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
60
61
  dodal/devices/pgm.py,sha256=am-AST9iTqma1PkGOKLozqAokZWbJUbM3TNcqXzB-6A,1132
61
62
  dodal/devices/pressure_jump_cell.py,sha256=ONvSHpnS-kA8hjOgyIks-J2n02pP6LhLm2SY1zC-i_8,9437
62
63
  dodal/devices/qbpm.py,sha256=FfrWWAHHtYv3fGRT1qljyPpAwoHJYfbooT9CfKg-oXI,465
63
- dodal/devices/robot.py,sha256=laLwekoO9RsZzfag_6UGf8NhcGZ5deP4JAutvHqo2KM,5336
64
+ dodal/devices/robot.py,sha256=Pw6k8rFGr2-hkM2TVkQw2Y_dYIdXdXN7QtqjSglkp3g,5289
64
65
  dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
65
66
  dodal/devices/scatterguard.py,sha256=jx03in9QgaThWxD4t1S8_Llent2kWrn_hThJ9KkUWTk,330
66
67
  dodal/devices/scintillator.py,sha256=PlD6cnJ39PTB_e7QrRspPliLYE4kL_K7ziJURzuxgdA,365
@@ -72,26 +73,39 @@ dodal/devices/tetramm.py,sha256=17uUbwcK7G7RTZ0Q37PgQ8HOot6iMJ_dPGFO8ZblEZM,8455
72
73
  dodal/devices/thawer.py,sha256=4t4yF4VDIrT_tQ8RwjmXe_hDMwVjR8A-4rDkPx19b28,1672
73
74
  dodal/devices/turbo_slit.py,sha256=B6SPXqviMnG-U4PnUF1BdTO0LBKmTuwAUKRbxMiNJXo,1125
74
75
  dodal/devices/undulator.py,sha256=rQjDhrvgf4uXUEO17CiLopNDEagWOgkmpa02BarozDE,5295
75
- dodal/devices/undulator_dcm.py,sha256=4Y1ZgKatBenQgg4DuZnMtKwLDOH2YvUMo1QkFE0aaXs,2432
76
+ dodal/devices/undulator_dcm.py,sha256=zulVn1wvu4-WEpf0BgLiDet58IsaKV7KW6qruAdRR_s,2391
76
77
  dodal/devices/watsonmarlow323_pump.py,sha256=rwU94YE6esgGLYdh-pe8nBo_3tvgp6brrrbPDrqp5_M,1406
77
78
  dodal/devices/webcam.py,sha256=mef075ynDbzZ4pNAjfxR_9tdTTqF_rM7hAOVEEOV-Do,2408
78
79
  dodal/devices/xbpm_feedback.py,sha256=j8MHhhE0feoe6R54zPKqS5EbQ0bEDR-nOpLHzHhnHHQ,1156
79
- dodal/devices/zebra.py,sha256=cOcohj57eDKWgd-747EsL1ypPQWrOVc68EB_9D4L8CI,9474
80
+ dodal/devices/zebra.py,sha256=sPMAKaZOrBHQy5V9ue4-TKE9r29OG8nTZCzQQC7OMFQ,9637
80
81
  dodal/devices/zebra_controlled_shutter.py,sha256=5-SH5HoXp_6P-xAtfDFJKQq6mBDwreubuCULSz78fgw,1852
81
82
  dodal/devices/areadetector/plugins/CAM.py,sha256=sZzJm5Ez3eWfXZi_EB67wluhZmMQm1UyOc2bJFfzd1U,964
82
83
  dodal/devices/areadetector/plugins/MJPG.py,sha256=QTsxCoWbofNpLMGPoOR2hWoM33KyntuLepbF0YmX0KE,3031
84
+ dodal/devices/attenuator/attenuator.py,sha256=eHJpM-E4XQfzy1mxGRk754y3n9q6i3youkCqQg_6SUM,3986
85
+ dodal/devices/attenuator/filter.py,sha256=ZoPsTWXjllyMtKBdSIFLB7Cbc88rGof5k3ymL13VczE,422
86
+ dodal/devices/attenuator/filter_selections.py,sha256=lcmTprCXgSggp2L6uQ6YU0xLMljXvbspAug-WWKCXks,1410
87
+ dodal/devices/current_amplifiers/__init__.py,sha256=-MhT-t-GJ83rrvTDBCoWub_NKYkRtu4sEj8-y5XZBP0,782
88
+ dodal/devices/current_amplifiers/current_amplifier.py,sha256=WwMD8WN479-4nfWoN30R2fWzONlM3haQ2uLMmN2JWRQ,2776
89
+ dodal/devices/current_amplifiers/current_amplifier_detector.py,sha256=IPAMsJpBiI_JP9szTnrN0ejX1Meq5c-29JTeKe96x1U,3961
90
+ dodal/devices/current_amplifiers/femto.py,sha256=gKr5884emKoF-8qyjX_LA5cDjaesLJIdF_AG5wfv9Bo,4572
91
+ dodal/devices/current_amplifiers/sr570.py,sha256=-BT0mLf2phZTpFqjc_CCWd2X0Z-Ucey4KwNwLQs3eZU,7660
92
+ dodal/devices/current_amplifiers/struck_scaler_counter.py,sha256=lMKClJsxsWFX-dtdDN99N6IUHMKcoGlna54wUTYVVmE,2591
83
93
  dodal/devices/detector/__init__.py,sha256=-RdACL3tzc3lLArWOoGNje48UUlv2fElOmGOz9yOuO0,317
84
- dodal/devices/detector/det_dim_constants.py,sha256=LNrVMd0DbFEcnyNFmXosCP-VYaZ71Ajuv6inwo4Mg3U,2299
94
+ dodal/devices/detector/det_dim_constants.py,sha256=arBWvzMwybatdSiCMAiwB4Bq1dX-wkLi54xPPfTfQhY,2772
85
95
  dodal/devices/detector/det_dist_to_beam_converter.py,sha256=7keoqZYfvgayePVx97lHYpcFRTJnQOfAk_PYP4EZTZQ,1951
86
96
  dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
87
97
  dodal/devices/detector/detector.py,sha256=syzkl52kGaMINXCXEviFuYPbgNatm5tioVPDmjgro8s,4768
88
98
  dodal/devices/detector/detector_motion.py,sha256=UGDQriDWRluDZOZh1mDX9w_fPjMD-_BGe11kA36Kezs,1616
89
99
  dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
100
+ dodal/devices/i03/beamstop.py,sha256=D1-QeGNpNlUE1qtFz-XxgzQGZbvM5bdb09f69yDB7U0,2802
101
+ dodal/devices/i04/transfocator.py,sha256=YrQYSHu9MNI6t4SUg5a-95h7Eh4iateSQm-Rk50chqI,3841
91
102
  dodal/devices/i10/i10_apple2.py,sha256=pEZes8wVCPHiOOcuVhEtqPvtnyphMxqbdp39mDp6xXQ,13165
92
103
  dodal/devices/i10/i10_setting_data.py,sha256=69XWgE-YNTiW7C3t67MNcTL5JDDhOo7h-X7DCTpFE5g,164
93
104
  dodal/devices/i10/mirrors.py,sha256=E0M5keGI3LGaDHyXQkCCyj6xmixNY1xTSkIaaYwtnP8,794
94
105
  dodal/devices/i10/slits.py,sha256=4X50bGiJhTIHxhsOrv-8DATBkQPwQgEaFMNa2OsPrFY,1201
106
+ dodal/devices/i10/rasor/rasor_current_amp.py,sha256=hImaPI3veKiS5YVfYwv-qrQ1AYNBjFVxG_MwTQqtkcc,2368
107
+ dodal/devices/i10/rasor/rasor_motors.py,sha256=0w31rKDuzRL-9tGbLDj0JZljaDjfXvKHQyzMs6fc3sw,1653
108
+ dodal/devices/i10/rasor/rasor_scaler_cards.py,sha256=wchXaIAWKLg_K14Zez4ZUmYLLk5pqL_QXegYLQO_6AY,463
95
109
  dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
110
  dodal/devices/i22/dcm.py,sha256=SQDh-Sj1OvplHZ9yTWblJwv8PJrUqxseDPupZOWmcLo,4701
97
111
  dodal/devices/i22/fswitch.py,sha256=LSMoo9aDkH0SLcojbUh2NxTWIpUXHZxauTqThc3XtSk,3073
@@ -121,7 +135,7 @@ dodal/devices/oav/snapshots/grid_overlay.py,sha256=CdvCdTKMCiwMwxm2lV28KpcIUSXls
121
135
  dodal/devices/oav/snapshots/snapshot_with_beam_centre.py,sha256=J77RfE3AGTLNdWc6hvsRn2DUdupzuk_FTDGvdP0jqbU,1962
122
136
  dodal/devices/oav/snapshots/snapshot_with_grid.py,sha256=EBoCtr1NmOKye2yQHqbTBxSg-DsEKFeyBtMFmOeGPRs,2269
123
137
  dodal/devices/p99/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- dodal/devices/p99/sample_stage.py,sha256=v2-KSvuxCmpreVUh0p2OLGj6d1MR_li56cvMBWbvF9g,1189
138
+ dodal/devices/p99/sample_stage.py,sha256=DvHU556Gp0wFiufZiwY3o2W4xmsCL5uSwNnhd8HPAnc,528
125
139
  dodal/devices/training_rig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
140
  dodal/devices/training_rig/sample_stage.py,sha256=jktTp837ij8wor5LidE3AajCk95L7DebJotMlO7QwTE,355
127
141
  dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -135,8 +149,8 @@ dodal/devices/xspress3/xspress3.py,sha256=75RdPuHpES4Xi-Lcywz0XUhaN2G3vZSoc-dzgc
135
149
  dodal/devices/xspress3/xspress3_channel.py,sha256=w8tAx2lz5kJ_LeJ_eb_4o--Dtt8MRijsYNgDG6oEIVg,1626
136
150
  dodal/devices/zocalo/__init__.py,sha256=dRAZ9o7B9TACqyE7aanT3yzvqWtt019YgV5ZJY7Ylso,517
137
151
  dodal/devices/zocalo/zocalo_constants.py,sha256=vu7Xjz7UNEpBUWEEBxDvP4bVFkZIN6NLGfQDpWbCjH8,98
138
- dodal/devices/zocalo/zocalo_interaction.py,sha256=8V9rAHYgdrFlPURnsxl5pLheEZemsm8cqMpv0E2fOS8,3555
139
- dodal/devices/zocalo/zocalo_results.py,sha256=Mpg8zUPdq5yL9dWODP3KT_pd7kTALM1HSEfhZ43FAp0,15273
152
+ dodal/devices/zocalo/zocalo_interaction.py,sha256=GFukU9xqagQtVSDg5BrL23jxl1w8wjs4b4NLLqdFfpk,3584
153
+ dodal/devices/zocalo/zocalo_results.py,sha256=MCHrhfiD6MGUak3MGLghoKOBskDncVufKx1pT5NJbHQ,16438
140
154
  dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
141
155
  dodal/plan_stubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
156
  dodal/plan_stubs/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
@@ -145,10 +159,10 @@ dodal/plan_stubs/motor_utils.py,sha256=4c93U_WgjfmX12uNiztVW2oKxGVWa_SKQdJYCUNms
145
159
  dodal/plan_stubs/wrapped.py,sha256=nriHKX4BF010CmrhdoUhY3-txClW5W8TPLz64kE_AXU,4533
146
160
  dodal/plans/__init__.py,sha256=nH1jNxw3DzDMg9O8Uda0kqKIalRVEWBrq07OLY6Ey38,93
147
161
  dodal/plans/scanspec.py,sha256=Q0AcvTKRT401iGMRDSqK-D523UX5_ofiVMZ_rNXKOx8,2074
148
- dodal/plans/wrapped.py,sha256=Cr2iOpQCuk2ORKo5CZOh-zbQXAjoTfaLrfm7r1--GhU,2098
149
- dls_dodal-1.36.3.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
150
- dls_dodal-1.36.3.dist-info/METADATA,sha256=kxGKgtp3OTCkpiOdg7edQ8FCV9G8Hw4klZobJMmibSA,16655
151
- dls_dodal-1.36.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
152
- dls_dodal-1.36.3.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
153
- dls_dodal-1.36.3.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
154
- dls_dodal-1.36.3.dist-info/RECORD,,
162
+ dodal/plans/wrapped.py,sha256=BPMw__RcWvk9v5XnhMsi9_k4KsDEbmXogzD2n1ecbUg,2098
163
+ dls_dodal-1.37.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
164
+ dls_dodal-1.37.0.dist-info/METADATA,sha256=HmPwH3laIqDE6a89MPQeRI_EeC-Oun96q4gGK8vV-AE,16651
165
+ dls_dodal-1.37.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
166
+ dls_dodal-1.37.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
167
+ dls_dodal-1.37.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
168
+ dls_dodal-1.37.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.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.36.3'
16
- __version_tuple__ = version_tuple = (1, 36, 3)
15
+ __version__ = version = '1.37.0'
16
+ __version_tuple__ = version_tuple = (1, 37, 0)
@@ -0,0 +1,37 @@
1
+ """Beamline i02-1 is also known as VMXm, or I02J"""
2
+
3
+ from dodal.common.beamlines.beamline_utils import (
4
+ device_factory,
5
+ )
6
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
7
+ from dodal.devices.attenuator.attenuator import EnumFilterAttenuator
8
+ from dodal.devices.attenuator.filter_selections import (
9
+ I02_1FilterFourSelections,
10
+ I02_1FilterOneSelections,
11
+ I02_1FilterThreeSelections,
12
+ I02_1FilterTwoSelections,
13
+ )
14
+ from dodal.log import set_beamline as set_log_beamline
15
+ from dodal.utils import BeamlinePrefix, get_beamline_name
16
+
17
+ BL = get_beamline_name("i02-1")
18
+ PREFIX = BeamlinePrefix(BL, suffix="J")
19
+ set_log_beamline(BL)
20
+ set_utils_beamline(BL)
21
+
22
+
23
+ @device_factory()
24
+ def attenuator() -> EnumFilterAttenuator:
25
+ """Get the i02-1 attenuator device, instantiate it if it hasn't already been.
26
+ If this is called when already instantiated in i02-1, it will return the existing object.
27
+ """
28
+
29
+ return EnumFilterAttenuator(
30
+ f"{PREFIX.beamline_prefix}-OP-ATTN-01:",
31
+ (
32
+ I02_1FilterOneSelections,
33
+ I02_1FilterTwoSelections,
34
+ I02_1FilterThreeSelections,
35
+ I02_1FilterFourSelections,
36
+ ),
37
+ )
dodal/beamlines/i03.py CHANGED
@@ -13,7 +13,7 @@ from dodal.devices.aperturescatterguard import (
13
13
  ApertureScatterguard,
14
14
  load_positions_from_beamline_parameters,
15
15
  )
16
- from dodal.devices.attenuator import Attenuator
16
+ from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
17
17
  from dodal.devices.backlight import Backlight
18
18
  from dodal.devices.cryostream import CryoStream
19
19
  from dodal.devices.dcm import DCM
@@ -24,6 +24,7 @@ from dodal.devices.eiger import EigerDetector
24
24
  from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
25
25
  from dodal.devices.flux import Flux
26
26
  from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
27
+ from dodal.devices.i03.beamstop import Beamstop
27
28
  from dodal.devices.motors import XYZPositioner
28
29
  from dodal.devices.oav.oav_detector import OAV
29
30
  from dodal.devices.oav.oav_parameters import OAVConfig
@@ -80,12 +81,12 @@ def aperture_scatterguard(
80
81
 
81
82
  def attenuator(
82
83
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
83
- ) -> Attenuator:
84
+ ) -> BinaryFilterAttenuator:
84
85
  """Get the i03 attenuator device, instantiate it if it hasn't already been.
85
86
  If this is called when already instantiated in i03, it will return the existing object.
86
87
  """
87
88
  return device_instantiation(
88
- Attenuator,
89
+ BinaryFilterAttenuator,
89
90
  "attenuator",
90
91
  "-EA-ATTN-01:",
91
92
  wait_for_connection,
@@ -93,6 +94,22 @@ def attenuator(
93
94
  )
94
95
 
95
96
 
97
+ def beamstop(
98
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
99
+ ) -> Beamstop:
100
+ """Get the i03 beamstop device, instantiate it if it hasn't already been.
101
+ If this is called when already instantiated in i03, it will return the existing object.
102
+ """
103
+ return device_instantiation(
104
+ Beamstop,
105
+ "beamstop",
106
+ "-MO-BS-01:",
107
+ wait_for_connection,
108
+ fake_with_ophyd_sim,
109
+ beamline_parameters=get_beamline_parameters(),
110
+ )
111
+
112
+
96
113
  def dcm(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -> DCM:
97
114
  """Get the i03 DCM device, instantiate it if it hasn't already been.
98
115
  If this is called when already instantiated in i03, it will return the existing object.
dodal/beamlines/i04.py CHANGED
@@ -6,7 +6,7 @@ from dodal.devices.aperturescatterguard import (
6
6
  ApertureScatterguard,
7
7
  load_positions_from_beamline_parameters,
8
8
  )
9
- from dodal.devices.attenuator import Attenuator
9
+ from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
10
10
  from dodal.devices.backlight import Backlight
11
11
  from dodal.devices.dcm import DCM
12
12
  from dodal.devices.detector import DetectorParams
@@ -138,12 +138,12 @@ def sample_shutter(
138
138
 
139
139
  def attenuator(
140
140
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
141
- ) -> Attenuator:
141
+ ) -> BinaryFilterAttenuator:
142
142
  """Get the i04 attenuator device, instantiate it if it hasn't already been.
143
143
  If this is called when already instantiated in i04, it will return the existing object.
144
144
  """
145
145
  return device_instantiation(
146
- Attenuator,
146
+ BinaryFilterAttenuator,
147
147
  "attenuator",
148
148
  "-EA-ATTN-01:",
149
149
  wait_for_connection,
dodal/beamlines/i10.py CHANGED
@@ -7,6 +7,7 @@ from dodal.devices.apple2_undulator import (
7
7
  UndulatorJawPhase,
8
8
  UndulatorPhaseAxes,
9
9
  )
10
+ from dodal.devices.current_amplifiers import CurrentAmpDet
10
11
  from dodal.devices.i10.i10_apple2 import (
11
12
  I10Apple2,
12
13
  I10Apple2PGM,
@@ -15,7 +16,16 @@ from dodal.devices.i10.i10_apple2 import (
15
16
  )
16
17
  from dodal.devices.i10.i10_setting_data import I10Grating
17
18
  from dodal.devices.i10.mirrors import PiezoMirror
19
+ from dodal.devices.i10.rasor.rasor_current_amp import RasorFemto, RasorSR570
20
+ from dodal.devices.i10.rasor.rasor_motors import (
21
+ DetSlits,
22
+ Diffractometer,
23
+ PaStage,
24
+ PinHole,
25
+ )
26
+ from dodal.devices.i10.rasor.rasor_scaler_cards import RasorScalerCard1
18
27
  from dodal.devices.i10.slits import I10PrimarySlits, I10Slits
28
+ from dodal.devices.motors import XYZPositioner
19
29
  from dodal.devices.pgm import PGM
20
30
  from dodal.devices.slits import MinimalSlits
21
31
  from dodal.log import set_beamline as set_log_beamline
@@ -322,3 +332,98 @@ def slit_6() -> I10Slits:
322
332
  return I10Slits(
323
333
  prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-06:",
324
334
  )
335
+
336
+
337
+ "Rasor devices"
338
+
339
+
340
+ @device_factory()
341
+ def pin_hole() -> PinHole:
342
+ return PinHole(prefix="ME01D-EA-PINH-01:")
343
+
344
+
345
+ @device_factory()
346
+ def det_slits() -> DetSlits:
347
+ return DetSlits(prefix="ME01D-MO-APTR-0")
348
+
349
+
350
+ @device_factory()
351
+ def diffractometer() -> Diffractometer:
352
+ return Diffractometer(prefix="ME01D-MO-DIFF-01:")
353
+
354
+
355
+ @device_factory()
356
+ def pa_stage() -> PaStage:
357
+ return PaStage(prefix="ME01D-MO-POLAN-01:")
358
+
359
+
360
+ @device_factory()
361
+ def simple_stage() -> XYZPositioner:
362
+ return XYZPositioner(prefix="ME01D-MO-CRYO-01:")
363
+
364
+
365
+ @device_factory()
366
+ def rasor_femto() -> RasorFemto:
367
+ return RasorFemto(
368
+ prefix="ME01D-EA-IAMP",
369
+ )
370
+
371
+
372
+ @device_factory()
373
+ def rasor_det_scalers() -> RasorScalerCard1:
374
+ return RasorScalerCard1(prefix="ME01D-EA-SCLR-01:SCALER1")
375
+
376
+
377
+ @device_factory()
378
+ def rasor_sr570() -> RasorSR570:
379
+ return RasorSR570(
380
+ prefix="ME01D-EA-IAMP",
381
+ )
382
+
383
+
384
+ @device_factory()
385
+ def rasor_sr570_pa_scaler_det() -> CurrentAmpDet:
386
+ return CurrentAmpDet(
387
+ current_amp=rasor_sr570().ca1,
388
+ counter=rasor_det_scalers().det,
389
+ )
390
+
391
+
392
+ @device_factory()
393
+ def rasor_femto_pa_scaler_det() -> CurrentAmpDet:
394
+ return CurrentAmpDet(
395
+ current_amp=rasor_femto().ca1,
396
+ counter=rasor_det_scalers().det,
397
+ )
398
+
399
+
400
+ @device_factory()
401
+ def rasor_sr570_fluo_scaler_det() -> CurrentAmpDet:
402
+ return CurrentAmpDet(
403
+ current_amp=rasor_sr570().ca2,
404
+ counter=rasor_det_scalers().fluo,
405
+ )
406
+
407
+
408
+ @device_factory()
409
+ def rasor_femto_fluo_scaler_det() -> CurrentAmpDet:
410
+ return CurrentAmpDet(
411
+ current_amp=rasor_femto().ca2,
412
+ counter=rasor_det_scalers().fluo,
413
+ )
414
+
415
+
416
+ @device_factory()
417
+ def rasor_sr570_drain_scaler_det() -> CurrentAmpDet:
418
+ return CurrentAmpDet(
419
+ current_amp=rasor_sr570().ca3,
420
+ counter=rasor_det_scalers().drain,
421
+ )
422
+
423
+
424
+ @device_factory()
425
+ def rasor_femto_drain_scaler_det() -> CurrentAmpDet:
426
+ return CurrentAmpDet(
427
+ current_amp=rasor_femto().ca3,
428
+ counter=rasor_det_scalers().drain,
429
+ )
dodal/beamlines/i22.py CHANGED
@@ -16,6 +16,7 @@ from dodal.common.crystal_metadata import (
16
16
  make_crystal_metadata_from_material,
17
17
  )
18
18
  from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
19
+ from dodal.devices.bimorph_mirror import BimorphMirror
19
20
  from dodal.devices.focusing_mirror import FocusingMirror
20
21
  from dodal.devices.i22.dcm import DoubleCrystalMonochromator
21
22
  from dodal.devices.i22.fswitch import FSwitch
@@ -125,6 +126,20 @@ def hfm() -> FocusingMirror:
125
126
  )
126
127
 
127
128
 
129
+ @device_factory()
130
+ def bimorph_hfm() -> BimorphMirror:
131
+ return BimorphMirror(
132
+ prefix=f"{PREFIX.beamline_prefix}-OP-KBM-01:G0:", number_of_channels=12
133
+ )
134
+
135
+
136
+ @device_factory()
137
+ def bimorph_vfm() -> BimorphMirror:
138
+ return BimorphMirror(
139
+ prefix=f"{PREFIX.beamline_prefix}-OP-KBM-01:G1:", number_of_channels=16
140
+ )
141
+
142
+
128
143
  @device_factory()
129
144
  def dcm() -> DoubleCrystalMonochromator:
130
145
  return DoubleCrystalMonochromator(
dodal/beamlines/i24.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from dodal.common.beamlines.beamline_utils import BL, device_instantiation
2
2
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
- from dodal.devices.attenuator import ReadOnlyAttenuator
3
+ from dodal.devices.attenuator.attenuator import ReadOnlyAttenuator
4
4
  from dodal.devices.detector import DetectorParams
5
5
  from dodal.devices.eiger import EigerDetector
6
6
  from dodal.devices.hutch_shutter import HutchShutter
dodal/beamlines/p99.py CHANGED
@@ -1,6 +1,8 @@
1
1
  from dodal.common.beamlines.beamline_utils import device_factory, set_beamline
2
+ from dodal.devices.attenuator.filter import FilterMotor
3
+ from dodal.devices.attenuator.filter_selections import P99FilterSelections
2
4
  from dodal.devices.motors import XYZPositioner
3
- from dodal.devices.p99.sample_stage import FilterMotor, SampleAngleStage
5
+ from dodal.devices.p99.sample_stage import SampleAngleStage
4
6
  from dodal.log import set_beamline as set_log_beamline
5
7
  from dodal.utils import BeamlinePrefix, get_beamline_name
6
8
 
@@ -17,7 +19,9 @@ def angle_stage() -> SampleAngleStage:
17
19
 
18
20
  @device_factory()
19
21
  def filter() -> FilterMotor:
20
- return FilterMotor(f"{PREFIX.beamline_prefix}-MO-STAGE-02:MP:SELECT")
22
+ return FilterMotor(
23
+ f"{PREFIX.beamline_prefix}-MO-STAGE-02:MP:SELECT", P99FilterSelections
24
+ )
21
25
 
22
26
 
23
27
  @device_factory()
@@ -55,7 +55,7 @@ def make_crystal_metadata_from_material(
55
55
  d_spacing = d_spacing_param or CrystalMetadata.calculate_default_d_spacing(
56
56
  material.value.lattice_parameter, reflection_plane
57
57
  )
58
- assert all(
59
- isinstance(i, int) and i > 0 for i in reflection_plane
60
- ), "Reflection plane indices must be positive integers"
58
+ assert all(isinstance(i, int) and i > 0 for i in reflection_plane), (
59
+ "Reflection plane indices must be positive integers"
60
+ )
61
61
  return CrystalMetadata(usage, material.value.name, reflection_plane, d_spacing)
@@ -46,7 +46,9 @@ class PandASubpathProvider(UpdatingPathProvider):
46
46
  self._filename_provider.suffix = suffix
47
47
 
48
48
  def __call__(self, device_name: str | None = None) -> PathInfo:
49
- assert self._output_directory, "Directory unknown for PandA to write into, update() needs to be called at least once"
49
+ assert self._output_directory, (
50
+ "Directory unknown for PandA to write into, update() needs to be called at least once"
51
+ )
50
52
  return PathInfo(
51
53
  directory_path=self._output_directory,
52
54
  filename=self._filename_provider(device_name),
@@ -87,6 +87,9 @@ class ApertureValue(StrictEnum):
87
87
  MEDIUM = "MEDIUM_APERTURE"
88
88
  LARGE = "LARGE_APERTURE"
89
89
 
90
+ def __str__(self):
91
+ return self.name.capitalize()
92
+
90
93
 
91
94
  def load_positions_from_beamline_parameters(
92
95
  params: GDABeamlineParameters,
@@ -7,10 +7,12 @@ from ophyd_async.core import (
7
7
  DeviceVector,
8
8
  SignalR,
9
9
  StandardReadable,
10
+ SubsetEnum,
10
11
  wait_for_value,
11
12
  )
12
13
  from ophyd_async.epics.core import epics_signal_r, epics_signal_rw, epics_signal_x
13
14
 
15
+ from dodal.devices.attenuator.filter import FilterMotor
14
16
  from dodal.log import LOGGER
15
17
 
16
18
 
@@ -27,8 +29,9 @@ class ReadOnlyAttenuator(StandardReadable):
27
29
  super().__init__(name)
28
30
 
29
31
 
30
- class Attenuator(ReadOnlyAttenuator, Movable):
32
+ class BinaryFilterAttenuator(ReadOnlyAttenuator, Movable):
31
33
  """The attenuator will insert filters into the beam to reduce its transmission.
34
+ In this attenuator, each filter can be in one of two states: IN or OUT
32
35
 
33
36
  This device should be set with:
34
37
  yield from bps.set(attenuator, desired_transmission)
@@ -83,3 +86,28 @@ class Attenuator(ReadOnlyAttenuator, Movable):
83
86
  for i in range(16)
84
87
  ]
85
88
  )
89
+
90
+
91
+ class EnumFilterAttenuator(ReadOnlyAttenuator):
92
+ """The attenuator will insert filters into the beam to reduce its transmission.
93
+
94
+ This device is currently working, but feature incomplete. See https://github.com/DiamondLightSource/dodal/issues/972
95
+
96
+ In this attenuator, the state of a filter corresponds to the selected material,
97
+ e.g Ag50, in contrast to being either 'IN' or 'OUT'; see BinaryFilterAttenuator.
98
+ """
99
+
100
+ def __init__(
101
+ self,
102
+ prefix: str,
103
+ filter_selection: tuple[type[SubsetEnum], ...],
104
+ name: str = "",
105
+ ):
106
+ with self.add_children_as_readables():
107
+ self.filters: DeviceVector[FilterMotor] = DeviceVector(
108
+ {
109
+ index: FilterMotor(f"{prefix}MP{index + 1}:", filter, name)
110
+ for index, filter in enumerate(filter_selection)
111
+ }
112
+ )
113
+ super().__init__(prefix, name=name)
@@ -0,0 +1,11 @@
1
+ from ophyd_async.core import StandardReadable, SubsetEnum
2
+ from ophyd_async.epics.core import epics_signal_rw
3
+
4
+
5
+ class FilterMotor(StandardReadable):
6
+ def __init__(
7
+ self, prefix: str, filter_selections: type[SubsetEnum], name: str = ""
8
+ ):
9
+ with self.add_children_as_readables():
10
+ self.user_setpoint = epics_signal_rw(filter_selections, f"{prefix}SELECT")
11
+ super().__init__(name=name)