dls-dodal 1.25.0__py3-none-any.whl → 1.26.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 (37) hide show
  1. {dls_dodal-1.25.0.dist-info → dls_dodal-1.26.0.dist-info}/METADATA +22 -1
  2. {dls_dodal-1.25.0.dist-info → dls_dodal-1.26.0.dist-info}/RECORD +36 -31
  3. dls_dodal-1.26.0.dist-info/entry_points.txt +2 -0
  4. dodal/__main__.py +1 -9
  5. dodal/_version.py +2 -2
  6. dodal/beamlines/README.md +3 -0
  7. dodal/beamlines/__init__.py +85 -0
  8. dodal/beamlines/i03.py +5 -5
  9. dodal/beamlines/i04.py +5 -5
  10. dodal/beamlines/i04_1.py +2 -2
  11. dodal/beamlines/i20_1.py +2 -2
  12. dodal/beamlines/i22.py +46 -12
  13. dodal/beamlines/i23.py +2 -2
  14. dodal/beamlines/i24.py +2 -2
  15. dodal/beamlines/p38.py +55 -10
  16. dodal/beamlines/p45.py +2 -2
  17. dodal/cli.py +68 -0
  18. dodal/common/beamlines/__init__.py +0 -0
  19. dodal/{beamlines → common/beamlines}/beamline_utils.py +2 -2
  20. dodal/{beamlines/_device_helpers.py → common/beamlines/device_helpers.py} +1 -2
  21. dodal/common/visit.py +1 -1
  22. dodal/devices/attenuator.py +61 -105
  23. dodal/devices/detector/detector.py +3 -0
  24. dodal/devices/eiger.py +8 -0
  25. dodal/devices/eiger_odin.py +1 -0
  26. dodal/devices/focusing_mirror.py +1 -1
  27. dodal/devices/i22/fswitch.py +43 -4
  28. dodal/devices/linkam3.py +108 -0
  29. dodal/devices/undulator.py +33 -2
  30. dodal/devices/undulator_dcm.py +3 -5
  31. dodal/devices/zebra_controlled_shutter.py +38 -0
  32. dodal/utils.py +64 -10
  33. dodal/devices/sample_shutter.py +0 -24
  34. {dls_dodal-1.25.0.dist-info → dls_dodal-1.26.0.dist-info}/LICENSE +0 -0
  35. {dls_dodal-1.25.0.dist-info → dls_dodal-1.26.0.dist-info}/WHEEL +0 -0
  36. {dls_dodal-1.25.0.dist-info → dls_dodal-1.26.0.dist-info}/top_level.txt +0 -0
  37. /dodal/{beamlines → common/beamlines}/beamline_parameters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dls-dodal
3
- Version: 1.25.0
3
+ Version: 1.26.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
@@ -213,6 +213,7 @@ Classifier: Programming Language :: Python :: 3.11
213
213
  Requires-Python: >=3.10
214
214
  Description-Content-Type: text/x-rst
215
215
  License-File: LICENSE
216
+ Requires-Dist: click
216
217
  Requires-Dist: ophyd
217
218
  Requires-Dist: ophyd-async >=0.3a5
218
219
  Requires-Dist: bluesky
@@ -265,6 +266,26 @@ Documentation https://DiamondLightSource.github.io/dodal
265
266
  Releases https://github.com/DiamondLightSource/dodal/releases
266
267
  ============== ==============================================================
267
268
 
269
+ Testing Connectivity
270
+ --------------------
271
+
272
+ You can test your connection to a beamline if it's PVs are visible to your machine with:
273
+
274
+ .. code:: shell
275
+
276
+ # On any workstation:
277
+ dodal connect <BEAMLINE>
278
+
279
+ # On a beamline workstation, this should suffice:
280
+ dodal connect ${BEAMLINE}
281
+
282
+
283
+ For more options, including a list of valid beamlines, type
284
+
285
+ .. code:: shell
286
+
287
+ dodal connect --help
288
+
268
289
 
269
290
  .. |code_ci| image:: https://github.com/DiamondLightSource/dodal/actions/workflows/code.yml/badge.svg?branch=main
270
291
  :target: https://github.com/DiamondLightSource/dodal/actions/workflows/code.yml
@@ -1,47 +1,51 @@
1
1
  dodal/__init__.py,sha256=y-VRpfiX-Lm5nchB9N0VfMy_6dwFqVxpSn5SiAQql9I,114
2
- dodal/__main__.py,sha256=7KR7t1SPAAUdVsMV-ldVBTw1bQQajjeh7ZfzgG4DG6k,322
3
- dodal/_version.py,sha256=izUYmj1xhfFSjyCg70rnNBT10Bx8qXrG5Kr9-Eo8CH4,413
2
+ dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
3
+ dodal/_version.py,sha256=ZreJF-rILTr9IBCA-InSDMjl6Bdsh4uJHrXyWFkH87M,413
4
4
  dodal/adsim.py,sha256=OW2dcS7ciD4Yq9WFw4PN_c5Bwccrmu7R-zr-u6ZCbQM,497
5
+ dodal/cli.py,sha256=z0UBESrNrq6Kq4rttp4uHcwS1fnOnRkKBRDHSriPpGY,2058
5
6
  dodal/log.py,sha256=grK5-c-V6UjMERwDqYPdKbc_BpycrNb8hP0uteLOVCY,8296
6
- dodal/utils.py,sha256=eBSYkFyAKMzPRppDD2FVRs45NjcOHNS5NM2jrQKZ3H4,7818
7
+ dodal/utils.py,sha256=aH-W94t6NFOoGHZ7awbUKY8_k7qIYDourCFs3MKIjjA,10024
7
8
  dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
9
  dodal/beamline_specific_utils/i03.py,sha256=Ixe1anFQl-kwRJubmQx28TIW4Zw8qDxpElNNNapWQHI,396
9
- dodal/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- dodal/beamlines/_device_helpers.py,sha256=Dva35Cf2e-YX9H8fUoMcQ9K6X-5_ZkWRkoKFb-zv2V8,918
11
- dodal/beamlines/beamline_parameters.py,sha256=N22dtDLw3Hlo7EUmGxe4qFGcu7OnldwCz_mU7yK2rd0,3577
12
- dodal/beamlines/beamline_utils.py,sha256=qrRjbpsYWdFEHhrDzNWD5ETXqrCBOR2-O1gP3gG8l3g,4490
13
- dodal/beamlines/i03.py,sha256=GKD8iX_7p9bAuoUECQB1GSx9RGJzeEx0BJEIdd73wjA,15914
14
- dodal/beamlines/i04.py,sha256=eHHDyln_s_5_DbE9V2ktv2qfOlfwrRHHN4rOsS3-Ot8,12042
15
- dodal/beamlines/i04_1.py,sha256=rWBdKzNHqPWEwpK616PUMVSi_zLhX0f40HVq8drgobo,4717
16
- dodal/beamlines/i20_1.py,sha256=NCJdJ7htumHExFJww0-LzLtJcZX_KSTxK9e9KAeWy98,732
17
- dodal/beamlines/i22.py,sha256=m6S_F-jP4PFXdP056optvZt1AZ8Mxu5DF53QUn8S050,6634
18
- dodal/beamlines/i23.py,sha256=-KXU-x-WBPa_Vwy9h3yKOl9HGBSDjvIIcu8gOtGZYVo,1388
19
- dodal/beamlines/i24.py,sha256=pgUXceJRq3cOfMzBlsyex-ZiwhZTMFgvBuYWX1cQnl4,4555
20
- dodal/beamlines/p38.py,sha256=OrlfIYO__EqBhZWWSg3mCwGb5zyoTMGrjI2L6gr-SEE,6071
21
- dodal/beamlines/p45.py,sha256=T7EXD4LAvucoIr5MeLrDL1vsho4ELtzKDu2KLmFXziA,2943
10
+ dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
11
+ dodal/beamlines/__init__.py,sha256=U0dQYFEUloCdQOs24zyfpPTncJXOO4cDcfHSevVOAw4,2890
12
+ dodal/beamlines/i03.py,sha256=BsqiPR-z1svEm0psbTtmW3FR69xcC7_pJqLc5Z27mSQ,15935
13
+ dodal/beamlines/i04.py,sha256=2sa7qbNnIDK7r7d8-9Y296Fvzl8TzI_z_K2u7EsUQQw,12063
14
+ dodal/beamlines/i04_1.py,sha256=KDxSUQNhIs_NFiRaLY-Jiory0DeN7Y0ErvGuoTrwCDU,4731
15
+ dodal/beamlines/i20_1.py,sha256=XJpey1-XZnCVpjK6-tODRYeBofqV44BL8lK5OSdQgiI,746
16
+ dodal/beamlines/i22.py,sha256=TlXgAuRYM4JS733tyZyLMYDyC7ajwg85_XzYI5qh46U,7574
17
+ dodal/beamlines/i23.py,sha256=iEFkrA4sPQsRLGAmeD263jPMX4u2SF1NK4_KYqnVwow,1402
18
+ dodal/beamlines/i24.py,sha256=87ugX8yAv1gqpwskl4RDjqZPraySeD0TDJylI6zUytQ,4569
19
+ dodal/beamlines/p38.py,sha256=0uRL4GVs1sGobr0BZpDDbtStNJcipT6o4FvoA_OWLaE,7120
20
+ dodal/beamlines/p45.py,sha256=TNIkC-SBfj0ayZtlLLXW9xCSi5CzJkO8XpAMIo8fjao,2957
22
21
  dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
23
22
  dodal/common/coordination.py,sha256=psJ-UWNk4w9YUy-1Vc-CpSn9ea_Ugs2pY5wFKA7JBEY,1133
24
23
  dodal/common/maths.py,sha256=JRSBhbMzwlicKp1_Bsfu9gA79JJA_Dgq9EpbExFH65M,1829
25
24
  dodal/common/types.py,sha256=M0gZs9F7--gREF8VYJn-Y1Mt9mIEgp1aLY3oUpUkSno,546
26
25
  dodal/common/udc_directory_provider.py,sha256=zNlt_VgdAlyBtVN7neTHk_0tWBbI4pPUL7q9WQOzXvo,1260
27
- dodal/common/visit.py,sha256=vyyFhk8nxfm3SMucshqwkUozOXb7wqqQF_qs9BimgEo,7538
26
+ dodal/common/visit.py,sha256=8q-cee1r59tU_ywsxBvUzRMyP3Mn6zRHbE-pQAzBPVM,7545
27
+ dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ dodal/common/beamlines/beamline_parameters.py,sha256=N22dtDLw3Hlo7EUmGxe4qFGcu7OnldwCz_mU7yK2rd0,3577
29
+ dodal/common/beamlines/beamline_utils.py,sha256=AgmH9wpnFQ4DHAA7_Yo0COa2piX2ksFxukFt2_600kA,4488
30
+ dodal/common/beamlines/device_helpers.py,sha256=s79js7no9k8JMfG7NvdmFomSP5m5VDQ6th_Hsbx1znA,939
28
31
  dodal/devices/CTAB.py,sha256=_MfL_KH4uDPxq_RuHFEZ9HVXOpUnQb5be3csoz9DdAs,1630
29
32
  dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
33
  dodal/devices/adsim.py,sha256=dMU0TKIuiODHYFHQOH4_5UvB8iJtaJEtjqaEDGjcU-w,311
31
34
  dodal/devices/aperture.py,sha256=0MtTzKMDZ5DVAz0DE0kXI0M76VCp0y9vFsrMggEMpxk,586
32
35
  dodal/devices/aperturescatterguard.py,sha256=2T1VKzE3-mb9hocZtHRwRqC4Eh_M_r8lCmiYwU_mndE,9906
33
- dodal/devices/attenuator.py,sha256=b6IsFZqplo8PREabV2tsyFuQAflN9oBM1zCuTuW2_S0,5487
36
+ dodal/devices/attenuator.py,sha256=OD7fElTIMHWk7ZopPqEu29lionm7WwgC0-Kvl8vBIb0,2599
34
37
  dodal/devices/backlight.py,sha256=9BJcAg1f1kGRlb7bNzeltSDlpBXcxjcW90f87ewnj5k,562
35
38
  dodal/devices/beamstop.py,sha256=8L3qhlk-3ZBOp10xK1i8qZqYTGOXX1mVF1MgXoN0dfg,215
36
39
  dodal/devices/cryostream.py,sha256=6MU4rXIOL33C-8F3DVfAtv0ZnwiysTtawjkeePd5IrQ,332
37
40
  dodal/devices/dcm.py,sha256=vfyGYDzfSwTiNqlzkfNjkrL-Q1hNVSgJddvJ5Un_lvg,1610
38
- dodal/devices/eiger.py,sha256=6r08BWa-RNs8TK0x1OC3HmyyKAEuiA5vqDEd9q5rJEI,13403
39
- dodal/devices/eiger_odin.py,sha256=cKPYkTXvhjF7xzXeaC7JnbnKWyJpF95vqPIqdqXXuZw,6914
41
+ dodal/devices/eiger.py,sha256=NE4tHdqgUZpUxJLQbd5lLUIHZcpeotppexJGlDNByzM,13868
42
+ dodal/devices/eiger_odin.py,sha256=U5Byb7uNwDdNscBRp7yBYQrsjKrKXl2l5WdSpL09lAw,6980
40
43
  dodal/devices/fast_grid_scan.py,sha256=cbM6Jqcu7Gao0zFH6u8iTuJfojDDYs0AvseAnRs8iMg,12134
41
44
  dodal/devices/fluorescence_detector_motion.py,sha256=RrXfPmJzWnAjcjp9u0AnJEfjvWPMKburVTySB2hxYbw,181
42
45
  dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
43
- dodal/devices/focusing_mirror.py,sha256=5rEa6RC-bxBvH-TSksQelCs9Xcx1AOhSilyDaNhYn1o,6430
46
+ dodal/devices/focusing_mirror.py,sha256=aRqBkE3OgaXpH6lP3v1VbSYgHsMMbSsPPXzeyAGf_Pg,6435
44
47
  dodal/devices/ipin.py,sha256=OGMXwAE4KDDonZRPFkUmR9Vsk6X4Ox-hEvPT5drP-mQ,208
48
+ dodal/devices/linkam3.py,sha256=TPhiQ1D9i_HIlKHAlfnVfX7H6aPOAeXPEJLdmvwdKWQ,3776
45
49
  dodal/devices/logging_ophyd_device.py,sha256=xw4lbyqq5_ehESGterVEfubJsBiJTWvBp5b9k62gSkg,666
46
50
  dodal/devices/lower_gonio_stages.py,sha256=oJ_Xeuqs5E8AWAoZX52jD1qV6pCSjCOjdwnXFKz_xjw,229
47
51
  dodal/devices/motors.py,sha256=aKtMv5q_4b1eFhzyuk2-D6zDsY_6cqAmG59y5LWUz1s,1328
@@ -50,7 +54,6 @@ dodal/devices/panda_fast_grid_scan.py,sha256=cQmrs3pQ3P_J1e5C1IOdjDZibRthIHjqY98
50
54
  dodal/devices/qbpm1.py,sha256=OY7-WbdxMiLGUK8Z57ezwqSXbHxoPP-y3GvBgj9kgMA,220
51
55
  dodal/devices/robot.py,sha256=ITMKXiA83KVCAVI3ZpN-wWCLj62uDmxLBFO3PUheaRg,2379
52
56
  dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
53
- dodal/devices/sample_shutter.py,sha256=XsaEgmJBRPdB9YwgIda_T3trdLI_u0Ogw0Mn-LsCMI8,628
54
57
  dodal/devices/scatterguard.py,sha256=0qnvhoo3RjLsrxVgIoDJpryqunlgMVgaTsoyKRC2g4Y,331
55
58
  dodal/devices/scintillator.py,sha256=4Dej1a6HRom9GRwTDsaTKGfvloP20POUqIeHqsI8-R8,184
56
59
  dodal/devices/slits.py,sha256=URru9VN2N19KqeUPDZaBmyKYn0_JJiE0Vko4sZpfsl8,601
@@ -59,11 +62,12 @@ dodal/devices/status.py,sha256=TuUGidZ4Ar-WCRc_sX0wn58DmL6brj1pMr8rNF5Z6VU,1198
59
62
  dodal/devices/synchrotron.py,sha256=E5vcSum-zoD5vIZxa2Xcl0gAkeRqY6a-AfZQICCwLHg,1947
60
63
  dodal/devices/tetramm.py,sha256=dHA15KkJhBHwtmbivDua_aVqFbvK47TVQG7KXmn8jQ8,8041
61
64
  dodal/devices/turbo_slit.py,sha256=W3ZRIqDhq4iMhr5GcIiWvl2U1GaPtGanqkL7upQOZTY,1132
62
- dodal/devices/undulator.py,sha256=74uYuwch10dzvP3lKWuHl9SoFHwrRngyFtM9ZOkQzWc,1061
63
- dodal/devices/undulator_dcm.py,sha256=ugvIwGyh3SoAdKyVRZGUsL6yt7-zaC6lsN8FmSaDSXY,5180
65
+ dodal/devices/undulator.py,sha256=kn84MQpuBHtQj7H7HeBoAYKXu5buGKvTgs3tf2gdEdw,2074
66
+ dodal/devices/undulator_dcm.py,sha256=TC9fO55r1YIG_88PPbGGtzfjcRJcaoC2ny51JiDOEX4,5199
64
67
  dodal/devices/webcam.py,sha256=dvNWJ6hHQR7BUsMRC9TH4XiCCofVhlgZ8HYfVCvd2og,1367
65
68
  dodal/devices/xbpm_feedback.py,sha256=a4evzdoMANbwoboQCbdMkcrxRogXLnHs966SZJsywYQ,1521
66
69
  dodal/devices/zebra.py,sha256=XE2oEm6kLkXd86ev4dYP8bh3tI9Fesb1SmU61RSMHBA,9082
70
+ dodal/devices/zebra_controlled_shutter.py,sha256=MqX4KE6w0FliZRDBltswcLCNSsp6vQrD_iBY640IljI,1094
67
71
  dodal/devices/areadetector/__init__.py,sha256=8IwLxuZMW0MOJpJp_ZDdlaE20hrtsH_PXWGaKgMiYs4,240
68
72
  dodal/devices/areadetector/adaravis.py,sha256=pwbmmnakarjhD59XoyAIXJdakS-nqDG09Xmwq17AVw4,3787
69
73
  dodal/devices/areadetector/adsim.py,sha256=3U7kS93RM3Xeh-XWKjeuw5jXbIGWAbrs59LfxtvB7OU,1907
@@ -73,12 +77,12 @@ dodal/devices/detector/__init__.py,sha256=XEwjopgTtBq93RRuFthVVVI9DT1jUvpOJzWOHa
73
77
  dodal/devices/detector/det_dim_constants.py,sha256=MZ4w2nsTKzj4eN7yGsSs1pqKWIuU4vc6UzcSll02uWg,2305
74
78
  dodal/devices/detector/det_dist_to_beam_converter.py,sha256=f6JFp-eEB2v8NzZg27UrN0VDP5CMjRnaPU6BTA7_n_s,1937
75
79
  dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
76
- dodal/devices/detector/detector.py,sha256=spRf_l9FOdLOjMMmKkdd-FJ3rHT3oAXB2GZ_ayS6vCs,4526
80
+ dodal/devices/detector/detector.py,sha256=UDw_hLbhfUo_ECasGQ_Ud8bVQzE9D8uaAMagVAa_R4g,4647
77
81
  dodal/devices/detector/detector_motion.py,sha256=REREva2kyPcIzOZmahN9rT0jDSuUbV0qUDl4IcBnutA,1221
78
82
  dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
83
  dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
80
84
  dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- dodal/devices/i22/fswitch.py,sha256=PKMrgsJ_DT0G865VEIlNhC_DwES17ypNuYdVsQFgvtg,1735
85
+ dodal/devices/i22/fswitch.py,sha256=AdYtnkCBuhivyJGZqelg_7sjB2pHN7vl1JTtlO4vHo4,3061
82
86
  dodal/devices/i23/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
87
  dodal/devices/i23/gonio.py,sha256=cxqD2Kd578c4-K4h2sHdJjoap2gPGC46Qr4SPudHLTs,864
84
88
  dodal/devices/i24/I24_detector_motion.py,sha256=bKbb44Qs24oguwJ780N4e5XGNtka_3ZZCGGq6BQu99Y,229
@@ -109,8 +113,9 @@ dodal/devices/zocalo/zocalo_interaction.py,sha256=B6TBTDwUlluksLTwC4TiEEgfFzWLOm
109
113
  dodal/devices/zocalo/zocalo_results.py,sha256=U4Vk4OF-eL8w0BR-fbw3k4jyRo6G3Ywaf8NMAkjr4Hs,9658
110
114
  dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
111
115
  dodal/plans/check_topup.py,sha256=VOkHak88_r-pdTsSnwAJnbvlK2_UhKnO5I36pJmWKvQ,2985
112
- dls_dodal-1.25.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
113
- dls_dodal-1.25.0.dist-info/METADATA,sha256=Wk1-HZALxYm9H-aFDgXey-voV4SQQt8my-m5nwNa_Rs,16420
114
- dls_dodal-1.25.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
115
- dls_dodal-1.25.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
116
- dls_dodal-1.25.0.dist-info/RECORD,,
116
+ dls_dodal-1.26.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
117
+ dls_dodal-1.26.0.dist-info/METADATA,sha256=0fEtRaibwFzXvFI-JP3xbxw29Sp_H1ocnv23eMgU5xk,16837
118
+ dls_dodal-1.26.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
119
+ dls_dodal-1.26.0.dist-info/entry_points.txt,sha256=wpzz9FsTiYxI8OBwLKX9V9ResLwThBSmtRMcPwII0FA,46
120
+ dls_dodal-1.26.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
121
+ dls_dodal-1.26.0.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ dodal = dodal.__main__:main
dodal/__main__.py CHANGED
@@ -1,16 +1,8 @@
1
- from argparse import ArgumentParser
2
-
3
- from . import __version__
1
+ from .cli import main
4
2
 
5
3
  __all__ = ["main"]
6
4
 
7
5
 
8
- def main(args=None):
9
- parser = ArgumentParser()
10
- parser.add_argument("-v", "--version", action="version", version=__version__)
11
- args = parser.parse_args(args)
12
-
13
-
14
6
  # test with: python -m dodal
15
7
  if __name__ == "__main__":
16
8
  main()
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.25.0'
16
- __version_tuple__ = version_tuple = (1, 25, 0)
15
+ __version__ = version = '1.26.0'
16
+ __version_tuple__ = version_tuple = (1, 26, 0)
@@ -0,0 +1,3 @@
1
+ # Beamlines
2
+
3
+ Beamline modules are code-as-configuration. They define the set of devices and common device settings needed for a particular beamline or group of similar beamlines (e.g. a beamline and its digital twin). Some of our tooling depends on the convention of _only_ beamline modules going in this package. Common utilities should go somewhere else e.g. `dodal.utils` or `dodal.beamlines.common`.
@@ -0,0 +1,85 @@
1
+ import importlib.util
2
+ from functools import lru_cache
3
+ from pathlib import Path
4
+ from typing import Iterable, Mapping
5
+
6
+ # Where beamline names (per the ${BEAMLINE} environment variable don't always
7
+ # match up, we have to map between them bidirectionally). The most common use case is
8
+ # beamlines with a "-"" in the name such as "i04-1", which is not valid in a Python
9
+ # module name. Add any new beamlines whose name differs from their module name to this
10
+ # dictionary, which maps ${BEAMLINE} to dodal.beamlines.<MODULE NAME>
11
+ _BEAMLINE_NAME_OVERRIDES = {
12
+ "i04-1": "i04_1",
13
+ "i20-1": "i20_1",
14
+ "s03": "i03",
15
+ }
16
+
17
+
18
+ def all_beamline_modules() -> Iterable[str]:
19
+ """
20
+ Get the names of all importable modules in beamlines
21
+
22
+ Returns:
23
+ Iterable[str]: Generator of beamline module names
24
+ """
25
+
26
+ # This is done by inspecting file names rather than modules to avoid
27
+ # premature importing
28
+ spec = importlib.util.find_spec(__name__)
29
+ if spec is not None:
30
+ search_paths = [Path(path) for path in spec.submodule_search_locations]
31
+ for path in search_paths:
32
+ for subpath in path.glob("**/*"):
33
+ if (
34
+ subpath.name.endswith(".py")
35
+ and subpath.name != "__init__.py"
36
+ and ("__pycache__" not in str(subpath))
37
+ ):
38
+ yield subpath.with_suffix("").name
39
+ else:
40
+ raise KeyError(f"Unable to find {__name__} module")
41
+
42
+
43
+ def all_beamline_names() -> Iterable[str]:
44
+ """
45
+ Get the names of all beamlines as per the ${BEAMLINE} environment variable
46
+
47
+ Returns:
48
+ Iterable[str]: Generator of beamline names that dodal supports
49
+ """
50
+ inverse_mapping = _module_name_overrides()
51
+ for module_name in all_beamline_modules():
52
+ yield from inverse_mapping.get(module_name, set()).union({module_name})
53
+
54
+
55
+ @lru_cache
56
+ def _module_name_overrides() -> Mapping[str, set[str]]:
57
+ """
58
+ Get the inverse of _BEAMLINE_NAME_OVERRIDES so that modules can be mapped back to
59
+ beamlines. _BEAMLINE_NAME_OVERRIDES is expected to be a constant so the return
60
+ value is cached.
61
+
62
+ Returns:
63
+ Mapping[str, set[str]]: A dictionary mapping the name of a dodal module to the
64
+ set of beamlines it supports.
65
+ """
66
+
67
+ inverse_mapping: dict[str, set[str]] = {}
68
+ for beamline, module in _BEAMLINE_NAME_OVERRIDES.items():
69
+ inverse_mapping[module] = inverse_mapping.get(module, set()).union({beamline})
70
+ return inverse_mapping
71
+
72
+
73
+ def module_name_for_beamline(beamline: str) -> str:
74
+ """
75
+ Get the module name for a particular beamline, it may differ from the beamline
76
+ name e.g. i04-1 -> i04_1
77
+
78
+ Args:
79
+ beamline: The beamline name as per the ${BEAMLINE} environment variable
80
+
81
+ Returns:
82
+ str: The importable module name
83
+ """
84
+
85
+ return _BEAMLINE_NAME_OVERRIDES.get(beamline, beamline)
dodal/beamlines/i03.py CHANGED
@@ -1,11 +1,11 @@
1
1
  from ophyd_async.panda import HDFPanda
2
2
 
3
- from dodal.beamlines.beamline_utils import (
3
+ from dodal.common.beamlines.beamline_utils import (
4
4
  device_instantiation,
5
5
  get_directory_provider,
6
6
  set_directory_provider,
7
7
  )
8
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
8
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
9
9
  from dodal.common.udc_directory_provider import PandASubdirectoryProvider
10
10
  from dodal.devices.aperturescatterguard import AperturePositions, ApertureScatterguard
11
11
  from dodal.devices.attenuator import Attenuator
@@ -23,7 +23,6 @@ from dodal.devices.panda_fast_grid_scan import PandAFastGridScan
23
23
  from dodal.devices.qbpm1 import QBPM1
24
24
  from dodal.devices.robot import BartRobot
25
25
  from dodal.devices.s4_slit_gaps import S4SlitGaps
26
- from dodal.devices.sample_shutter import SampleShutter
27
26
  from dodal.devices.smargon import Smargon
28
27
  from dodal.devices.synchrotron import Synchrotron
29
28
  from dodal.devices.undulator import Undulator
@@ -32,6 +31,7 @@ from dodal.devices.webcam import Webcam
32
31
  from dodal.devices.xbpm_feedback import XBPMFeedback
33
32
  from dodal.devices.xspress3_mini.xspress3_mini import Xspress3Mini
34
33
  from dodal.devices.zebra import Zebra
34
+ from dodal.devices.zebra_controlled_shutter import ZebraShutter
35
35
  from dodal.devices.zocalo import ZocaloResults
36
36
  from dodal.log import set_beamline as set_log_beamline
37
37
  from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
@@ -394,12 +394,12 @@ def panda(
394
394
  @skip_device(lambda: BL == "s03")
395
395
  def sample_shutter(
396
396
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
397
- ) -> SampleShutter:
397
+ ) -> ZebraShutter:
398
398
  """Get the i03 sample shutter device, instantiate it if it hasn't already been.
399
399
  If this is called when already instantiated in i03, it will return the existing object.
400
400
  """
401
401
  return device_instantiation(
402
- SampleShutter,
402
+ ZebraShutter,
403
403
  "sample_shutter",
404
404
  "-EA-SHTR-01:",
405
405
  wait_for_connection,
dodal/beamlines/i04.py CHANGED
@@ -1,5 +1,5 @@
1
- from dodal.beamlines.beamline_utils import device_instantiation
2
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
1
+ from dodal.common.beamlines.beamline_utils import device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
3
  from dodal.devices.aperturescatterguard import AperturePositions, ApertureScatterguard
4
4
  from dodal.devices.attenuator import Attenuator
5
5
  from dodal.devices.backlight import Backlight
@@ -15,12 +15,12 @@ from dodal.devices.ipin import IPin
15
15
  from dodal.devices.motors import XYZPositioner
16
16
  from dodal.devices.oav.oav_detector import OAV, OAVConfigParams
17
17
  from dodal.devices.s4_slit_gaps import S4SlitGaps
18
- from dodal.devices.sample_shutter import SampleShutter
19
18
  from dodal.devices.smargon import Smargon
20
19
  from dodal.devices.synchrotron import Synchrotron
21
20
  from dodal.devices.undulator import Undulator
22
21
  from dodal.devices.xbpm_feedback import XBPMFeedbackI04
23
22
  from dodal.devices.zebra import Zebra
23
+ from dodal.devices.zebra_controlled_shutter import ZebraShutter
24
24
  from dodal.log import set_beamline as set_log_beamline
25
25
  from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
26
26
 
@@ -110,12 +110,12 @@ def beamstop(
110
110
 
111
111
  def sample_shutter(
112
112
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
113
- ) -> SampleShutter:
113
+ ) -> ZebraShutter:
114
114
  """Get the i04 sample shutter device, instantiate it if it hasn't already been.
115
115
  If this is called when already instantiated in i04, it will return the existing object.
116
116
  """
117
117
  return device_instantiation(
118
- SampleShutter,
118
+ ZebraShutter,
119
119
  "sample_shutter",
120
120
  "-EA-SHTR-01:",
121
121
  wait_for_connection,
dodal/beamlines/i04_1.py CHANGED
@@ -1,5 +1,5 @@
1
- from dodal.beamlines.beamline_utils import device_instantiation
2
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
1
+ from dodal.common.beamlines.beamline_utils import device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
3
  from dodal.devices.backlight import Backlight
4
4
  from dodal.devices.detector import DetectorParams
5
5
  from dodal.devices.eiger import EigerDetector
dodal/beamlines/i20_1.py CHANGED
@@ -1,5 +1,5 @@
1
- from dodal.beamlines.beamline_utils import device_instantiation
2
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
1
+ from dodal.common.beamlines.beamline_utils import device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
3
  from dodal.devices.turbo_slit import TurboSlit
4
4
  from dodal.log import set_beamline as set_log_beamline
5
5
  from dodal.utils import get_beamline_name
dodal/beamlines/i22.py CHANGED
@@ -3,23 +3,22 @@ from pathlib import Path
3
3
  from ophyd_async.epics.areadetector import AravisDetector, PilatusDetector
4
4
  from ophyd_async.panda import HDFPanda
5
5
 
6
- from dodal.beamlines.beamline_utils import (
6
+ from dodal.common.beamlines.beamline_utils import (
7
7
  device_instantiation,
8
8
  get_directory_provider,
9
9
  set_directory_provider,
10
10
  )
11
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
11
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
12
+ from dodal.common.beamlines.device_helpers import numbered_slits
12
13
  from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitDirectoryProvider
13
14
  from dodal.devices.focusing_mirror import FocusingMirror
14
15
  from dodal.devices.i22.fswitch import FSwitch
16
+ from dodal.devices.linkam3 import Linkam3
15
17
  from dodal.devices.slits import Slits
16
18
  from dodal.devices.tetramm import TetrammDetector
19
+ from dodal.devices.undulator import Undulator
17
20
  from dodal.log import set_beamline as set_log_beamline
18
- from dodal.utils import get_beamline_name, skip_device
19
-
20
- from ._device_helpers import numbered_slits
21
- from .beamline_utils import device_instantiation, get_directory_provider
22
- from .beamline_utils import set_beamline as set_utils_beamline
21
+ from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
23
22
 
24
23
  BL = get_beamline_name("i22")
25
24
  set_log_beamline(BL)
@@ -123,6 +122,22 @@ def hfm(
123
122
  )
124
123
 
125
124
 
125
+ def undulator(
126
+ wait_for_connection: bool = True,
127
+ fake_with_ophyd_sim: bool = False,
128
+ ) -> Undulator:
129
+ return device_instantiation(
130
+ Undulator,
131
+ "undulator",
132
+ f"{BeamlinePrefix(BL).insertion_prefix}-MO-SERVC-01:",
133
+ wait_for_connection,
134
+ fake_with_ophyd_sim,
135
+ bl_prefix=False,
136
+ poles=80,
137
+ length=2.0,
138
+ )
139
+
140
+
126
141
  def slits_1(
127
142
  wait_for_connection: bool = True,
128
143
  fake_with_ophyd_sim: bool = False,
@@ -200,13 +215,15 @@ def fswitch(
200
215
  "-MO-FSWT-01:",
201
216
  wait_for_connection,
202
217
  fake_with_ophyd_sim,
218
+ lens_geometry="paraboloid",
219
+ cylindrical=True,
220
+ lens_material="Beryllium",
203
221
  )
204
222
 
205
223
 
206
224
  # Must find which PandA IOC(s) are compatible
207
225
  # Must document what PandAs are physically connected to
208
226
  # See: https://github.com/bluesky/ophyd-async/issues/284
209
- @skip_device
210
227
  def panda1(
211
228
  wait_for_connection: bool = True,
212
229
  fake_with_ophyd_sim: bool = False,
@@ -214,9 +231,10 @@ def panda1(
214
231
  return device_instantiation(
215
232
  HDFPanda,
216
233
  "panda1",
217
- "-MO-PANDA-01:",
234
+ "-EA-PANDA-01:",
218
235
  wait_for_connection,
219
236
  fake_with_ophyd_sim,
237
+ directory_provider=get_directory_provider(),
220
238
  )
221
239
 
222
240
 
@@ -228,9 +246,10 @@ def panda2(
228
246
  return device_instantiation(
229
247
  HDFPanda,
230
248
  "panda2",
231
- "-MO-PANDA-02:",
249
+ "-EA-PANDA-02:",
232
250
  wait_for_connection,
233
251
  fake_with_ophyd_sim,
252
+ directory_provider=get_directory_provider(),
234
253
  )
235
254
 
236
255
 
@@ -242,9 +261,10 @@ def panda3(
242
261
  return device_instantiation(
243
262
  HDFPanda,
244
263
  "panda3",
245
- "-MO-PANDA-03:",
264
+ "-EA-PANDA-03:",
246
265
  wait_for_connection,
247
266
  fake_with_ophyd_sim,
267
+ directory_provider=get_directory_provider(),
248
268
  )
249
269
 
250
270
 
@@ -256,9 +276,10 @@ def panda4(
256
276
  return device_instantiation(
257
277
  HDFPanda,
258
278
  "panda4",
259
- "-MO-PANDA-04:",
279
+ "-EA-PANDA-04:",
260
280
  wait_for_connection,
261
281
  fake_with_ophyd_sim,
282
+ directory_provider=get_directory_provider(),
262
283
  )
263
284
 
264
285
 
@@ -275,3 +296,16 @@ def oav(
275
296
  hdf_suffix="HDF5:",
276
297
  directory_provider=get_directory_provider(),
277
298
  )
299
+
300
+
301
+ @skip_device
302
+ def linkam(
303
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
304
+ ) -> Linkam3:
305
+ return device_instantiation(
306
+ Linkam3,
307
+ "linkam",
308
+ "-EA-TEMPC-05",
309
+ wait_for_connection,
310
+ fake_with_ophyd_sim,
311
+ )
dodal/beamlines/i23.py CHANGED
@@ -1,5 +1,5 @@
1
- from dodal.beamlines.beamline_utils import device_instantiation
2
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
1
+ from dodal.common.beamlines.beamline_utils import device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
3
  from dodal.devices.i23.gonio import Gonio
4
4
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
5
5
  from dodal.log import set_beamline as set_log_beamline
dodal/beamlines/i24.py CHANGED
@@ -1,5 +1,5 @@
1
- from dodal.beamlines.beamline_utils import BL, device_instantiation
2
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
1
+ from dodal.common.beamlines.beamline_utils import BL, device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
3
  from dodal.devices.detector import DetectorParams
4
4
  from dodal.devices.eiger import EigerDetector
5
5
  from dodal.devices.i24.dual_backlight import DualBacklight
dodal/beamlines/p38.py CHANGED
@@ -3,22 +3,22 @@ from pathlib import Path
3
3
  from ophyd_async.epics.areadetector import AravisDetector
4
4
  from ophyd_async.panda import HDFPanda
5
5
 
6
- from dodal.beamlines.beamline_utils import (
6
+ from dodal.common.beamlines.beamline_utils import (
7
7
  device_instantiation,
8
8
  get_directory_provider,
9
9
  set_directory_provider,
10
10
  )
11
- from dodal.beamlines.beamline_utils import set_beamline as set_utils_beamline
11
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
12
+ from dodal.common.beamlines.device_helpers import numbered_slits
12
13
  from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitDirectoryProvider
13
14
  from dodal.devices.focusing_mirror import FocusingMirror
15
+ from dodal.devices.i22.fswitch import FSwitch
16
+ from dodal.devices.linkam3 import Linkam3
14
17
  from dodal.devices.slits import Slits
15
18
  from dodal.devices.tetramm import TetrammDetector
19
+ from dodal.devices.undulator import Undulator
16
20
  from dodal.log import set_beamline as set_log_beamline
17
- from dodal.utils import get_beamline_name, skip_device
18
-
19
- from ._device_helpers import numbered_slits
20
- from .beamline_utils import device_instantiation, get_directory_provider
21
- from .beamline_utils import set_beamline as set_utils_beamline
21
+ from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
22
22
 
23
23
  BL = get_beamline_name("p38")
24
24
  set_log_beamline(BL)
@@ -172,6 +172,22 @@ def slits_6(
172
172
  )
173
173
 
174
174
 
175
+ def fswitch(
176
+ wait_for_connection: bool = True,
177
+ fake_with_ophyd_sim: bool = True,
178
+ ) -> FSwitch:
179
+ return device_instantiation(
180
+ FSwitch,
181
+ "fswitch",
182
+ "-MO-FSWT-01:",
183
+ wait_for_connection,
184
+ fake_with_ophyd_sim,
185
+ lens_geometry="paraboloid",
186
+ cylindrical=True,
187
+ lens_material="Beryllium",
188
+ )
189
+
190
+
175
191
  def vfm(
176
192
  wait_for_connection: bool = True,
177
193
  fake_with_ophyd_sim: bool = True,
@@ -198,6 +214,22 @@ def hfm(
198
214
  )
199
215
 
200
216
 
217
+ def undulator(
218
+ wait_for_connection: bool = True,
219
+ fake_with_ophyd_sim: bool = True,
220
+ ) -> Undulator:
221
+ return device_instantiation(
222
+ Undulator,
223
+ "undulator",
224
+ f"{BeamlinePrefix(BL).insertion_prefix}-MO-SERVC-01:",
225
+ wait_for_connection,
226
+ fake_with_ophyd_sim,
227
+ bl_prefix=False,
228
+ poles=80,
229
+ length=2.0,
230
+ )
231
+
232
+
201
233
  # Must find which PandA IOC(s) are compatible
202
234
  # Must document what PandAs are physically connected to
203
235
  # See: https://github.com/bluesky/ophyd-async/issues/284
@@ -209,7 +241,7 @@ def panda1(
209
241
  return device_instantiation(
210
242
  HDFPanda,
211
243
  "panda1",
212
- "-MO-PANDA-01:",
244
+ "-EA-PANDA-01:",
213
245
  wait_for_connection,
214
246
  fake_with_ophyd_sim,
215
247
  directory_provider=get_directory_provider(),
@@ -224,7 +256,7 @@ def panda2(
224
256
  return device_instantiation(
225
257
  HDFPanda,
226
258
  "panda2",
227
- "-MO-PANDA-02:",
259
+ "-EA-PANDA-02:",
228
260
  wait_for_connection,
229
261
  fake_with_ophyd_sim,
230
262
  directory_provider=get_directory_provider(),
@@ -239,8 +271,21 @@ def panda3(
239
271
  return device_instantiation(
240
272
  HDFPanda,
241
273
  "panda3",
242
- "-MO-PANDA-03:",
274
+ "-EA-PANDA-03:",
243
275
  wait_for_connection,
244
276
  fake_with_ophyd_sim,
245
277
  directory_provider=get_directory_provider(),
246
278
  )
279
+
280
+
281
+ @skip_device
282
+ def linkam(
283
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
284
+ ) -> Linkam3:
285
+ return device_instantiation(
286
+ Linkam3,
287
+ "linkam",
288
+ "-EA-LINKM-02:",
289
+ wait_for_connection,
290
+ fake_with_ophyd_sim,
291
+ )