dls-dodal 1.25.0__py3-none-any.whl → 1.27.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 (45) hide show
  1. {dls_dodal-1.25.0.dist-info → dls_dodal-1.27.0.dist-info}/METADATA +22 -1
  2. {dls_dodal-1.25.0.dist-info → dls_dodal-1.27.0.dist-info}/RECORD +43 -37
  3. dls_dodal-1.27.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 +29 -14
  9. dodal/beamlines/i04.py +43 -11
  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 +5 -3
  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/coordination.py +11 -9
  22. dodal/common/visit.py +1 -43
  23. dodal/devices/aperturescatterguard.py +41 -6
  24. dodal/devices/attenuator.py +61 -105
  25. dodal/devices/backlight.py +30 -14
  26. dodal/devices/detector/detector.py +3 -0
  27. dodal/devices/eiger.py +8 -0
  28. dodal/devices/eiger_odin.py +1 -0
  29. dodal/devices/fast_grid_scan.py +185 -192
  30. dodal/devices/focusing_mirror.py +1 -1
  31. dodal/devices/i22/fswitch.py +43 -4
  32. dodal/devices/linkam3.py +108 -0
  33. dodal/devices/robot.py +2 -0
  34. dodal/devices/thawer.py +15 -0
  35. dodal/devices/undulator.py +33 -2
  36. dodal/devices/undulator_dcm.py +3 -5
  37. dodal/devices/zebra_controlled_shutter.py +38 -0
  38. dodal/plans/data_session_metadata.py +46 -0
  39. dodal/utils.py +64 -10
  40. dodal/devices/panda_fast_grid_scan.py +0 -162
  41. dodal/devices/sample_shutter.py +0 -24
  42. {dls_dodal-1.25.0.dist-info → dls_dodal-1.27.0.dist-info}/LICENSE +0 -0
  43. {dls_dodal-1.25.0.dist-info → dls_dodal-1.27.0.dist-info}/WHEEL +0 -0
  44. {dls_dodal-1.25.0.dist-info → dls_dodal-1.27.0.dist-info}/top_level.txt +0 -0
  45. /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.27.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,56 +1,58 @@
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=XlqTK6aXcDzaFgsrMUHCuU_TY8zt9cjwfCWklVgy2Hg,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=nOWm9iUYOwqUDAkBXC4UkYmN2GGD1MbTgyCCMO_YXBw,16394
13
+ dodal/beamlines/i04.py,sha256=JOyNcUnC3wva4no2MHKp6b8gOKAcQXL_c4cBo7oneVs,13034
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=LIe8tu_ZJsoeQH7tYRZHSvqQ9C9zBGOXO6rb1DPCYjQ,4595
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
- dodal/common/coordination.py,sha256=psJ-UWNk4w9YUy-1Vc-CpSn9ea_Ugs2pY5wFKA7JBEY,1133
22
+ dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
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=MhrFbLptMG0Wvd2nHubBwQ44qAzoP4Bf4_z_-wO8rh0,6063
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
- dodal/devices/aperturescatterguard.py,sha256=2T1VKzE3-mb9hocZtHRwRqC4Eh_M_r8lCmiYwU_mndE,9906
33
- dodal/devices/attenuator.py,sha256=b6IsFZqplo8PREabV2tsyFuQAflN9oBM1zCuTuW2_S0,5487
34
- dodal/devices/backlight.py,sha256=9BJcAg1f1kGRlb7bNzeltSDlpBXcxjcW90f87ewnj5k,562
35
+ dodal/devices/aperturescatterguard.py,sha256=2JJsEPJGJHrI0ztv1cSaP7H5T6qdzDfUcN-VEQ39B8o,11012
36
+ dodal/devices/attenuator.py,sha256=OD7fElTIMHWk7ZopPqEu29lionm7WwgC0-Kvl8vBIb0,2599
37
+ dodal/devices/backlight.py,sha256=vsNGZB4C_mVMafllvJlOTghsfv6UqALMKUMLXu3WZ5k,1115
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
40
- dodal/devices/fast_grid_scan.py,sha256=cbM6Jqcu7Gao0zFH6u8iTuJfojDDYs0AvseAnRs8iMg,12134
41
+ dodal/devices/eiger.py,sha256=NE4tHdqgUZpUxJLQbd5lLUIHZcpeotppexJGlDNByzM,13868
42
+ dodal/devices/eiger_odin.py,sha256=U5Byb7uNwDdNscBRp7yBYQrsjKrKXl2l5WdSpL09lAw,6980
43
+ dodal/devices/fast_grid_scan.py,sha256=_jsiUxpMO2rAGDhTFPN8J35e6E0oreLpKYi6W8wQGzs,12798
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
48
52
  dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
49
- dodal/devices/panda_fast_grid_scan.py,sha256=cQmrs3pQ3P_J1e5C1IOdjDZibRthIHjqY98eaH5kLCE,5424
50
53
  dodal/devices/qbpm1.py,sha256=OY7-WbdxMiLGUK8Z57ezwqSXbHxoPP-y3GvBgj9kgMA,220
51
- dodal/devices/robot.py,sha256=ITMKXiA83KVCAVI3ZpN-wWCLj62uDmxLBFO3PUheaRg,2379
54
+ dodal/devices/robot.py,sha256=V5Gk-e1ZczU7y8SqU4_1YXYQJ6knoVFtXLZmIDY9MI4,2530
52
55
  dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
53
- dodal/devices/sample_shutter.py,sha256=XsaEgmJBRPdB9YwgIda_T3trdLI_u0Ogw0Mn-LsCMI8,628
54
56
  dodal/devices/scatterguard.py,sha256=0qnvhoo3RjLsrxVgIoDJpryqunlgMVgaTsoyKRC2g4Y,331
55
57
  dodal/devices/scintillator.py,sha256=4Dej1a6HRom9GRwTDsaTKGfvloP20POUqIeHqsI8-R8,184
56
58
  dodal/devices/slits.py,sha256=URru9VN2N19KqeUPDZaBmyKYn0_JJiE0Vko4sZpfsl8,601
@@ -58,12 +60,14 @@ dodal/devices/smargon.py,sha256=ml96h7E1C31qPo8jocAepSouIVXgpIR0vuMF99nZjqM,2964
58
60
  dodal/devices/status.py,sha256=TuUGidZ4Ar-WCRc_sX0wn58DmL6brj1pMr8rNF5Z6VU,1198
59
61
  dodal/devices/synchrotron.py,sha256=E5vcSum-zoD5vIZxa2Xcl0gAkeRqY6a-AfZQICCwLHg,1947
60
62
  dodal/devices/tetramm.py,sha256=dHA15KkJhBHwtmbivDua_aVqFbvK47TVQG7KXmn8jQ8,8041
63
+ dodal/devices/thawer.py,sha256=L5OYSdzGvx6dIkGgcTbITAbFAm0OKEVVqYBb4MPstOg,382
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,10 @@ 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
+ dodal/plans/data_session_metadata.py,sha256=QNx9rb1EfGBHb21eFekIi7KjNhC0PL-SVKBCggDuNeg,1650
117
+ dls_dodal-1.27.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
118
+ dls_dodal-1.27.0.dist-info/METADATA,sha256=mkrOjI4F9mwAZOTOLTSPRfNZu5W1wqlqDo3FOOWn6qs,16837
119
+ dls_dodal-1.27.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
120
+ dls_dodal-1.27.0.dist-info/entry_points.txt,sha256=wpzz9FsTiYxI8OBwLKX9V9ResLwThBSmtRMcPwII0FA,46
121
+ dls_dodal-1.27.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
122
+ dls_dodal-1.27.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.27.0'
16
+ __version_tuple__ = version_tuple = (1, 27, 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
@@ -14,24 +14,24 @@ from dodal.devices.dcm import DCM
14
14
  from dodal.devices.detector import DetectorParams
15
15
  from dodal.devices.detector.detector_motion import DetectorMotion
16
16
  from dodal.devices.eiger import EigerDetector
17
- from dodal.devices.fast_grid_scan import FastGridScan
17
+ from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
18
18
  from dodal.devices.flux import Flux
19
19
  from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, VFMMirrorVoltages
20
20
  from dodal.devices.oav.oav_detector import OAV, OAVConfigParams
21
21
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
22
- from dodal.devices.panda_fast_grid_scan import PandAFastGridScan
23
22
  from dodal.devices.qbpm1 import QBPM1
24
23
  from dodal.devices.robot import BartRobot
25
24
  from dodal.devices.s4_slit_gaps import S4SlitGaps
26
- from dodal.devices.sample_shutter import SampleShutter
27
25
  from dodal.devices.smargon import Smargon
28
26
  from dodal.devices.synchrotron import Synchrotron
27
+ from dodal.devices.thawer import Thawer
29
28
  from dodal.devices.undulator import Undulator
30
29
  from dodal.devices.undulator_dcm import UndulatorDCM
31
30
  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
@@ -199,16 +199,16 @@ def eiger(
199
199
  )
200
200
 
201
201
 
202
- def fast_grid_scan(
202
+ def zebra_fast_grid_scan(
203
203
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
204
- ) -> FastGridScan:
205
- """Get the i03 fast_grid_scan device, instantiate it if it hasn't already been.
204
+ ) -> ZebraFastGridScan:
205
+ """Get the i03 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
206
206
  If this is called when already instantiated in i03, it will return the existing object.
207
207
  """
208
208
  return device_instantiation(
209
- device_factory=FastGridScan,
210
- name="fast_grid_scan",
211
- prefix="-MO-SGON-01:",
209
+ device_factory=ZebraFastGridScan,
210
+ name="zebra_fast_grid_scan",
211
+ prefix="-MO-SGON-01:FGS:",
212
212
  wait=wait_for_connection,
213
213
  fake=fake_with_ophyd_sim,
214
214
  )
@@ -219,7 +219,7 @@ def panda_fast_grid_scan(
219
219
  ) -> PandAFastGridScan:
220
220
  """Get the i03 panda_fast_grid_scan device, instantiate it if it hasn't already been.
221
221
  If this is called when already instantiated in i03, it will return the existing object.
222
- This is used instead of the fast_grid_scan device when using the PandA.
222
+ This is used instead of the zebra_fast_grid_scan device when using the PandA.
223
223
  """
224
224
  return device_instantiation(
225
225
  device_factory=PandAFastGridScan,
@@ -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,
@@ -480,3 +480,18 @@ def webcam(
480
480
  fake_with_ophyd_sim,
481
481
  url="http://i03-webcam1/axis-cgi/jpg/image.cgi",
482
482
  )
483
+
484
+
485
+ def thawer(
486
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
487
+ ) -> Thawer:
488
+ """Get the i03 thawer, instantiate it if it hasn't already been.
489
+ If this is called when already instantiated in i03, it will return the existing object.
490
+ """
491
+ return device_instantiation(
492
+ Thawer,
493
+ "thawer",
494
+ "-EA-THAW-01",
495
+ wait_for_connection,
496
+ fake_with_ophyd_sim,
497
+ )
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
@@ -8,19 +8,21 @@ from dodal.devices.dcm import DCM
8
8
  from dodal.devices.detector import DetectorParams
9
9
  from dodal.devices.detector.detector_motion import DetectorMotion
10
10
  from dodal.devices.eiger import EigerDetector
11
- from dodal.devices.fast_grid_scan import FastGridScan
11
+ from dodal.devices.fast_grid_scan import ZebraFastGridScan
12
12
  from dodal.devices.flux import Flux
13
13
  from dodal.devices.i04.transfocator import Transfocator
14
14
  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
+ from dodal.devices.robot import BartRobot
17
18
  from dodal.devices.s4_slit_gaps import S4SlitGaps
18
- from dodal.devices.sample_shutter import SampleShutter
19
19
  from dodal.devices.smargon import Smargon
20
20
  from dodal.devices.synchrotron import Synchrotron
21
+ from dodal.devices.thawer import Thawer
21
22
  from dodal.devices.undulator import Undulator
22
23
  from dodal.devices.xbpm_feedback import XBPMFeedbackI04
23
24
  from dodal.devices.zebra import Zebra
25
+ from dodal.devices.zebra_controlled_shutter import ZebraShutter
24
26
  from dodal.log import set_beamline as set_log_beamline
25
27
  from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
26
28
 
@@ -110,12 +112,12 @@ def beamstop(
110
112
 
111
113
  def sample_shutter(
112
114
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
113
- ) -> SampleShutter:
115
+ ) -> ZebraShutter:
114
116
  """Get the i04 sample shutter device, instantiate it if it hasn't already been.
115
117
  If this is called when already instantiated in i04, it will return the existing object.
116
118
  """
117
119
  return device_instantiation(
118
- SampleShutter,
120
+ ZebraShutter,
119
121
  "sample_shutter",
120
122
  "-EA-SHTR-01:",
121
123
  wait_for_connection,
@@ -258,15 +260,15 @@ def eiger(
258
260
  )
259
261
 
260
262
 
261
- def fast_grid_scan(
263
+ def zebra_fast_grid_scan(
262
264
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
263
- ) -> FastGridScan:
264
- """Get the i04 fast_grid_scan device, instantiate it if it hasn't already been.
265
+ ) -> ZebraFastGridScan:
266
+ """Get the i04 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
265
267
  If this is called when already instantiated in i04, it will return the existing object.
266
268
  """
267
269
  return device_instantiation(
268
- device_factory=FastGridScan,
269
- name="fast_grid_scan",
270
+ device_factory=ZebraFastGridScan,
271
+ name="zebra_fast_grid_scan",
270
272
  prefix="-MO-SGON-01:",
271
273
  wait=wait_for_connection,
272
274
  fake=fake_with_ophyd_sim,
@@ -363,3 +365,33 @@ def detector_motion(
363
365
  wait=wait_for_connection,
364
366
  fake=fake_with_ophyd_sim,
365
367
  )
368
+
369
+
370
+ def thawer(
371
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
372
+ ) -> Thawer:
373
+ """Get the i04 thawer, instantiate it if it hasn't already been.
374
+ If this is called when already instantiated in i04, it will return the existing object.
375
+ """
376
+ return device_instantiation(
377
+ Thawer,
378
+ "thawer",
379
+ "-EA-THAW-01",
380
+ wait_for_connection,
381
+ fake_with_ophyd_sim,
382
+ )
383
+
384
+
385
+ def robot(
386
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
387
+ ) -> BartRobot:
388
+ """Get the i04 robot device, instantiate it if it hasn't already been.
389
+ If this is called when already instantiated in i04, it will return the existing object.
390
+ """
391
+ return device_instantiation(
392
+ BartRobot,
393
+ "robot",
394
+ "-MO-ROBOT-01:",
395
+ wait_for_connection,
396
+ fake_with_ophyd_sim,
397
+ )
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
+ )