dls-dodal 1.45.0__py3-none-any.whl → 1.46.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/METADATA +2 -2
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/RECORD +26 -25
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/WHEEL +1 -1
- dodal/_version.py +2 -2
- dodal/beamlines/i03.py +4 -4
- dodal/beamlines/i04.py +1 -1
- dodal/beamlines/i18.py +7 -4
- dodal/beamlines/i22.py +3 -3
- dodal/beamlines/i23.py +59 -4
- dodal/beamlines/p38.py +3 -3
- dodal/common/beamlines/beamline_utils.py +5 -0
- dodal/devices/common_dcm.py +77 -0
- dodal/devices/{dcm.py → i03/dcm.py} +8 -12
- dodal/devices/{undulator_dcm.py → i03/undulator_dcm.py} +6 -4
- dodal/devices/i13_1/merlin.py +3 -4
- dodal/devices/i13_1/merlin_controller.py +1 -1
- dodal/devices/i22/dcm.py +10 -12
- dodal/devices/i24/dcm.py +8 -17
- dodal/devices/tetramm.py +3 -4
- dodal/devices/turbo_slit.py +2 -2
- dodal/devices/zebra/zebra.py +4 -0
- dodal/plan_stubs/data_session.py +10 -1
- dodal/plans/verify_undulator_gap.py +2 -2
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/licenses/LICENSE +0 -0
- {dls_dodal-1.45.0.dist-info → dls_dodal-1.46.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.46.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
|
|
|
216
216
|
License-File: LICENSE
|
|
217
217
|
Requires-Dist: click
|
|
218
218
|
Requires-Dist: ophyd
|
|
219
|
-
Requires-Dist: ophyd-async>=0.10.
|
|
219
|
+
Requires-Dist: ophyd-async>=0.10.0a3
|
|
220
220
|
Requires-Dist: bluesky
|
|
221
221
|
Requires-Dist: pyepics
|
|
222
222
|
Requires-Dist: dataclasses-json
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
dls_dodal-1.
|
|
1
|
+
dls_dodal-1.46.0.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
2
2
|
dodal/__init__.py,sha256=Ksms_WJF8LTkbm38gEpm1jBpGqcQ8NGvmb2ZJlOE1j8,198
|
|
3
3
|
dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
|
|
4
|
-
dodal/_version.py,sha256
|
|
4
|
+
dodal/_version.py,sha256=rx9X6grU4HKVMuiliyERGBbevIYUheRbfXNhHBtDkEw,513
|
|
5
5
|
dodal/cli.py,sha256=NieWNUgLUxyck1rHoFAPJjX1xXLzHNdQ-s4wvxYFfps,3757
|
|
6
6
|
dodal/log.py,sha256=ry8WMq1S4WMIAPqtqGeKuegMRN7Jy3qdVTJlkpKXkL8,9503
|
|
7
7
|
dodal/utils.py,sha256=rqQNalufZPxUPSD2SYuUgWSCpefb8FnqvR6N0t-YcEY,19675
|
|
@@ -15,21 +15,21 @@ dodal/beamlines/b01_1.py,sha256=hHv9YJtUVmxAQ0UqF00-9wUYC_OtNo9awd04RM8b_HI,1993
|
|
|
15
15
|
dodal/beamlines/b07.py,sha256=OM_zdHeFO49IITT9fFHB3aOW-gDtmZTm0zrSauphQbo,799
|
|
16
16
|
dodal/beamlines/b07_1.py,sha256=o82BW38oNH8TLTscMgQYBSNOnvAiW8B9Z9DybDbvJ_k,763
|
|
17
17
|
dodal/beamlines/i02_1.py,sha256=d2IyqFMgeaSEyZYm7GMSjTKr7_02SakyC_oARx-XwnY,1204
|
|
18
|
-
dodal/beamlines/i03.py,sha256=
|
|
19
|
-
dodal/beamlines/i04.py,sha256=
|
|
18
|
+
dodal/beamlines/i03.py,sha256=Rm1F1bR2M1SBZhWpVkhJ5_wrn8XSvEp23mKgo_LDviA,15279
|
|
19
|
+
dodal/beamlines/i04.py,sha256=GHLjQWDt4zBweVd1viTz754RzMZFll8huagFmLeHeH0,12104
|
|
20
20
|
dodal/beamlines/i09.py,sha256=DTmgtjUbzFZT3vrFLnPJhFb5h6U1YEXuNewucAAGgZ8,765
|
|
21
21
|
dodal/beamlines/i09_1.py,sha256=pxgkcKBvetwVxXAm1KmlzBiK45GDdE30eO971w9zzoI,763
|
|
22
22
|
dodal/beamlines/i10.py,sha256=k8tnUwAb6jX2xY8hgST3ZP4jX3s4I4ispL5M6HF-M5k,11221
|
|
23
23
|
dodal/beamlines/i13_1.py,sha256=RF8AXBqVKPY7rVf4j1gOxcURAToYVk-Yo9t4FWyaphU,1650
|
|
24
|
-
dodal/beamlines/i18.py,sha256=
|
|
24
|
+
dodal/beamlines/i18.py,sha256=1BL5QA744ZGuCc2IXdsy_ZD2UV9SVXlUYAiMtpy0YNk,3656
|
|
25
25
|
dodal/beamlines/i19_1.py,sha256=3mxRQzMQrg2ppMN19EKqEV0bMs5pNtorQYgkBBWRPks,2838
|
|
26
26
|
dodal/beamlines/i19_2.py,sha256=zairZIPj1mrs9-dG19CjdMEFeqztGmlyeBmIxj7Kl5I,2329
|
|
27
27
|
dodal/beamlines/i19_optics.py,sha256=RztOdru0lvPXpaIXSUfzSsPVIuwAMKZsEA8vJFU4_Mk,1184
|
|
28
28
|
dodal/beamlines/i20_1.py,sha256=Xp6XXofjXh3Yibrg5wSHet-pXikprJ9oprEhJg19OkI,1825
|
|
29
|
-
dodal/beamlines/i22.py,sha256=
|
|
30
|
-
dodal/beamlines/i23.py,sha256=
|
|
29
|
+
dodal/beamlines/i22.py,sha256=GAS1KgRrtpdXhYb7tIO3yHHMRcffxOqcSIaCZyexnDk,7595
|
|
30
|
+
dodal/beamlines/i23.py,sha256=7NSbJDKPcw3O2oRs5oCsy2PbV4XaJAeReJuLoUqgPsI,2648
|
|
31
31
|
dodal/beamlines/i24.py,sha256=9rBQMCWGdKiRnFbcVvmjiBWiC9WJIJCtLh5m6LkHUtU,7096
|
|
32
|
-
dodal/beamlines/p38.py,sha256=
|
|
32
|
+
dodal/beamlines/p38.py,sha256=8rtf0a2UZJ0DKRXuSmQngae_iSIK_eJ4MhLGtatA_J0,5708
|
|
33
33
|
dodal/beamlines/p45.py,sha256=2snO895TGwf4LbNIvg4BkvAGSfvZcevdpv_82MRpXKo,2129
|
|
34
34
|
dodal/beamlines/p60.py,sha256=ybZwKvtsUoQvRwkSZvlK9I2PfAUI72JL3syCpt79O0k,674
|
|
35
35
|
dodal/beamlines/p99.py,sha256=k24QhYpoOHBd0188Fu3wvmpT6dsu8okiIVqVVckdBkw,1063
|
|
@@ -45,7 +45,7 @@ dodal/common/udc_directory_provider.py,sha256=v5OBaCUwjtQZAsRQUw6LlVL58UvwwDO1l2
|
|
|
45
45
|
dodal/common/visit.py,sha256=BLpr3GrP7Ij95V135hRJLgg7gWtBKXVxyOibWtcO8RE,5782
|
|
46
46
|
dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
47
|
dodal/common/beamlines/beamline_parameters.py,sha256=oIPHooqu5vTAwfqZutsKbzwdi9nvFF8568Mz7jrK5rI,3618
|
|
48
|
-
dodal/common/beamlines/beamline_utils.py,sha256=
|
|
48
|
+
dodal/common/beamlines/beamline_utils.py,sha256=uy-HWchyUwoIqYYUWAd4BOPPoDzqvvtgkWQGzuKStTg,5061
|
|
49
49
|
dodal/common/beamlines/device_helpers.py,sha256=lh7eih7KoFiqxo8PLQIDjbpBbhHuAXSeApt7K3KF9to,1002
|
|
50
50
|
dodal/devices/CTAB.py,sha256=5_261Ox6NG2cJIzzwnjWz289BG0nZoE0wKOaI5V5jqM,1998
|
|
51
51
|
dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -56,8 +56,8 @@ dodal/devices/apple2_undulator.py,sha256=R4KDgA4HcFj9zg1rPAEP9E0mKVzE06bhyxNRUrs
|
|
|
56
56
|
dodal/devices/backlight.py,sha256=RcgeA1hE3Z_5jA-jH8S8uLMpBfZjenRLz1lx6HTYeAo,1653
|
|
57
57
|
dodal/devices/baton.py,sha256=BnakfZxx3cIIX6Kxj8-abxn8Z9LaQODhcPbStbD0as4,485
|
|
58
58
|
dodal/devices/bimorph_mirror.py,sha256=D5PkrOggJRVAnv38lTdy8rErKLu_O2juLEvSqwcotxY,4825
|
|
59
|
+
dodal/devices/common_dcm.py,sha256=8QSRE6Z10RQjfL3g4JZhyHRNI_aCKxWlzKSsDgiJHhE,3049
|
|
59
60
|
dodal/devices/cryostream.py,sha256=K-ldpredpeDTzNt4qtQMg99nKJNjBYoXBbK0WJGexzw,656
|
|
60
|
-
dodal/devices/dcm.py,sha256=JbyxLnrS68nnnv39l9XEWgJgXUBqxX6aFo19MZnL36E,2574
|
|
61
61
|
dodal/devices/diamond_filter.py,sha256=A--RHd7WuH-IBhvCyENcRCTP4K-mm_Kqpa0pojpHZow,1098
|
|
62
62
|
dodal/devices/eiger.py,sha256=RN3klVASvdTT_jer2HJHUCZWZBKoOUQQdTpsKdgTPfo,15836
|
|
63
63
|
dodal/devices/eiger_odin.py,sha256=ytUH_18YuM1nJDhplS6OTdtADloYvHpO6ppENjVd4jU,7411
|
|
@@ -82,11 +82,10 @@ dodal/devices/slits.py,sha256=b_7ku2sHlzhMHTvWrwiRwee6ufrbxNX9JB_Z0lvk15o,1105
|
|
|
82
82
|
dodal/devices/smargon.py,sha256=tOHb9fjI8ZCIrboiC4OzS2j1QJDOKkAlQ2SORbBmaGo,4708
|
|
83
83
|
dodal/devices/status.py,sha256=hVrJS1yooQo6PRumRACoIEh-SKBUKxvBlQl-MtLFUMQ,327
|
|
84
84
|
dodal/devices/synchrotron.py,sha256=wLfClZ1lYQWA_D--UsM3NnKLG8bY8mvVsRYER6ob-Ew,2026
|
|
85
|
-
dodal/devices/tetramm.py,sha256=
|
|
85
|
+
dodal/devices/tetramm.py,sha256=i2akuxU9olINFZfEnQALTZQX2uXq3w9JmdD6_rN4CJs,8528
|
|
86
86
|
dodal/devices/thawer.py,sha256=mYrO9klUPYcSbpoUuJ4ZuZZEPcHWWaZ2px5jh8XNQ9Y,1675
|
|
87
|
-
dodal/devices/turbo_slit.py,sha256
|
|
87
|
+
dodal/devices/turbo_slit.py,sha256=xhcnhfbdcTYSYozogw6Li4fF4ofoPsc350rEyrRdaNE,1460
|
|
88
88
|
dodal/devices/undulator.py,sha256=ZCdMQ8PKnW7mFV1BmrprOt0aSBCZMSKAH-2yyVH5Ihk,5316
|
|
89
|
-
dodal/devices/undulator_dcm.py,sha256=olg8FrIKWqGmhJMuzuvJXH-LQTGhKytvXHPso3Br7C0,2398
|
|
90
89
|
dodal/devices/watsonmarlow323_pump.py,sha256=rwU94YE6esgGLYdh-pe8nBo_3tvgp6brrrbPDrqp5_M,1406
|
|
91
90
|
dodal/devices/webcam.py,sha256=mef075ynDbzZ4pNAjfxR_9tdTTqF_rM7hAOVEEOV-Do,2408
|
|
92
91
|
dodal/devices/xbpm_feedback.py,sha256=j8MHhhE0feoe6R54zPKqS5EbQ0bEDR-nOpLHzHhnHHQ,1156
|
|
@@ -117,6 +116,8 @@ dodal/devices/electron_analyser/vgscienta_analyser_io.py,sha256=q1L8G_JTjjUxfW-r
|
|
|
117
116
|
dodal/devices/electron_analyser/vgscienta_region.py,sha256=GYGvsvpMulwpMc-EVQEh4ZW7M3c35oz1_waXvyZRln8,2543
|
|
118
117
|
dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
118
|
dodal/devices/i03/beamstop.py,sha256=sJ2i9yEgaKPIbv23NNhUDTTIKIPN9MNfmwt2XqjBT1E,2806
|
|
119
|
+
dodal/devices/i03/dcm.py,sha256=zDcgxOdMRVOQZBGDsLaIlr7o4UJIK2vehPWHxAxt6VA,2268
|
|
120
|
+
dodal/devices/i03/undulator_dcm.py,sha256=c5H-17Dpt3pIMAlU9fHCnU59lYDnmgKk3qE2qR9gg44,2594
|
|
120
121
|
dodal/devices/i04/transfocator.py,sha256=sVI4Bgv-2-DH4-F1nIXMp5Aktevrm3agZnCA-WgjmW8,3780
|
|
121
122
|
dodal/devices/i10/diagnostics.py,sha256=TYqVtrCtf-IG-1e02D2nfq1R8jcYnaX1npKxqieLRDc,7018
|
|
122
123
|
dodal/devices/i10/i10_apple2.py,sha256=ErObNNE59NuYssde6ojWJb8wo3SVohkQsvK0Bjnf1T8,13192
|
|
@@ -127,8 +128,8 @@ dodal/devices/i10/rasor/rasor_current_amp.py,sha256=hImaPI3veKiS5YVfYwv-qrQ1AYNB
|
|
|
127
128
|
dodal/devices/i10/rasor/rasor_motors.py,sha256=0w31rKDuzRL-9tGbLDj0JZljaDjfXvKHQyzMs6fc3sw,1653
|
|
128
129
|
dodal/devices/i10/rasor/rasor_scaler_cards.py,sha256=sfWJKNx6pq342PEAlmg_Yt_Tijq7mO1XFjcCDtToQiU,467
|
|
129
130
|
dodal/devices/i13_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
|
-
dodal/devices/i13_1/merlin.py,sha256=
|
|
131
|
-
dodal/devices/i13_1/merlin_controller.py,sha256=
|
|
131
|
+
dodal/devices/i13_1/merlin.py,sha256=mgTFSMJftRzLL-HXAUuJkOYxtyA3Rp8YX0L46JCb30Y,1019
|
|
132
|
+
dodal/devices/i13_1/merlin_controller.py,sha256=XkY8E3UkSzZb9Pw_Ic4bv1DYJvBVADS_3okjHvY4nH4,1453
|
|
132
133
|
dodal/devices/i18/KBMirror.py,sha256=W4R3TeulSjosUqAFIIznyWzje_Y2AoEf9f8N-NkisYM,710
|
|
133
134
|
dodal/devices/i18/diode.py,sha256=q8ddVYT7yDXwURzxw5gfXlGT1tFirNfHBmiKnpvvXHk,406
|
|
134
135
|
dodal/devices/i18/table.py,sha256=f6OtVSqCFIpXyoHX97CPLpaVDVXUNc2EvgSFP3qVFKo,446
|
|
@@ -139,14 +140,14 @@ dodal/devices/i19/blueapi_device.py,sha256=Tsl4vsREz7FM2d-kKJK-9tGrYbyKq4SLxnMlE
|
|
|
139
140
|
dodal/devices/i19/hutch_access.py,sha256=hnClUWCL1qTYzuBMmhXX85jiNak7mbYfyHEh54tZ27U,377
|
|
140
141
|
dodal/devices/i19/shutter.py,sha256=Z3_UO3TmSczJrB8AcU5ohk8WlDN04a00XhSyDLAHvbc,1815
|
|
141
142
|
dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
-
dodal/devices/i22/dcm.py,sha256=
|
|
143
|
+
dodal/devices/i22/dcm.py,sha256=IbK56lSvX3PZlYKVeH7mIbRK83-mhJEIoTn1zjQfScE,4494
|
|
143
144
|
dodal/devices/i22/fswitch.py,sha256=LSMoo9aDkH0SLcojbUh2NxTWIpUXHZxauTqThc3XtSk,3073
|
|
144
145
|
dodal/devices/i22/nxsas.py,sha256=lFB_h6ns6yETPFZjDghOMZLg16nDnWveMOJV34TDSYk,5994
|
|
145
146
|
dodal/devices/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
147
|
dodal/devices/i24/aperture.py,sha256=XlnOyQsvdTom1dJHVUg8CUSthq3jlBlZFOUaa9b1eZ4,837
|
|
147
148
|
dodal/devices/i24/beam_center.py,sha256=m6LWsG9e_lhtPfZ8pc_hoLNyTYQQGGdRNav8J_2scTo,483
|
|
148
149
|
dodal/devices/i24/beamstop.py,sha256=89ncXUisia1rn1Faf5iWg3k0QW6Rm99j1vq9A8l9Xv8,1221
|
|
149
|
-
dodal/devices/i24/dcm.py,sha256=
|
|
150
|
+
dodal/devices/i24/dcm.py,sha256=9eNCGq-lpyFAftLxLxlhG_enzVmrx1nbwMxGFP_UBvU,1354
|
|
150
151
|
dodal/devices/i24/dual_backlight.py,sha256=CbQ9mYUNhhozVdNXqR5ac73tEIAWT2RnEpRwXB3EFog,2049
|
|
151
152
|
dodal/devices/i24/focus_mirrors.py,sha256=vkDUxnvGG3vqrsDR90YM84U8_fPUesmiD5XE1Fb4k2c,1863
|
|
152
153
|
dodal/devices/i24/i24_detector_motion.py,sha256=_HgdsZqFYY0tKqUgMzViHaPEUFXL3WlXXioGvDehRUw,364
|
|
@@ -178,7 +179,7 @@ dodal/devices/util/test_utils.py,sha256=KEYkqyZrAyju438VCbtQ0Ujv-9GBuIuVGCgggDHU
|
|
|
178
179
|
dodal/devices/xspress3/xspress3.py,sha256=75RdPuHpES4Xi-Lcywz0XUhaN2G3vZSoc-dzgcxfNvs,4636
|
|
179
180
|
dodal/devices/xspress3/xspress3_channel.py,sha256=w8tAx2lz5kJ_LeJ_eb_4o--Dtt8MRijsYNgDG6oEIVg,1626
|
|
180
181
|
dodal/devices/zebra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
181
|
-
dodal/devices/zebra/zebra.py,sha256=
|
|
182
|
+
dodal/devices/zebra/zebra.py,sha256=PpgGVrtb7t5QTNchEalSG3bPeOqf6tPzOUHoOyARWLY,9290
|
|
182
183
|
dodal/devices/zebra/zebra_constants_mapping.py,sha256=DCWMvBFvmN90rBpZ4aOVF_hbKm4K6QWubsG811R-MK8,4170
|
|
183
184
|
dodal/devices/zebra/zebra_controlled_shutter.py,sha256=tcBq2WQxST9g2VrjVWu-tOomFX-zGLHLNDhYhL0DtHc,1871
|
|
184
185
|
dodal/devices/zocalo/__init__.py,sha256=dRAZ9o7B9TACqyE7aanT3yzvqWtt019YgV5ZJY7Ylso,517
|
|
@@ -188,7 +189,7 @@ dodal/devices/zocalo/zocalo_results.py,sha256=cmKlgu-42CAu2X2aIgjxmfdUXypF4RHRNR
|
|
|
188
189
|
dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
|
|
189
190
|
dodal/plan_stubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
190
191
|
dodal/plan_stubs/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
|
|
191
|
-
dodal/plan_stubs/data_session.py,sha256=
|
|
192
|
+
dodal/plan_stubs/data_session.py,sha256=Syc6XKaN1usf7bNWOez8_vAH3byrcROqskmBrSUWa4Y,2132
|
|
192
193
|
dodal/plan_stubs/motor_utils.py,sha256=Mf8utOA_xmxUa2dLmQ1uRkdfyDTip7D8YcKeCBCQLUQ,4458
|
|
193
194
|
dodal/plan_stubs/wrapped.py,sha256=kC8HH7bx3-sLYu2oieY_502tAdT2OECF8n-fqoL5Bfc,4266
|
|
194
195
|
dodal/plan_stubs/electron_analyser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -196,12 +197,12 @@ dodal/plan_stubs/electron_analyser/configure_controller.py,sha256=wbQJc1Z0Vlzc5d
|
|
|
196
197
|
dodal/plans/__init__.py,sha256=nH1jNxw3DzDMg9O8Uda0kqKIalRVEWBrq07OLY6Ey38,93
|
|
197
198
|
dodal/plans/save_panda.py,sha256=1fumH7Ih8uDIv8ahAtgQ_vUuR3dz0sfUs4n9TEtEbSs,3053
|
|
198
199
|
dodal/plans/scanspec.py,sha256=Q0AcvTKRT401iGMRDSqK-D523UX5_ofiVMZ_rNXKOx8,2074
|
|
199
|
-
dodal/plans/verify_undulator_gap.py,sha256=
|
|
200
|
+
dodal/plans/verify_undulator_gap.py,sha256=OcDN09-eCoMzsmhKGxvzsH5EapG2zYz0yGCqUtQxLSc,568
|
|
200
201
|
dodal/plans/wrapped.py,sha256=BPMw__RcWvk9v5XnhMsi9_k4KsDEbmXogzD2n1ecbUg,2098
|
|
201
202
|
dodal/plans/preprocessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
202
203
|
dodal/plans/preprocessors/verify_undulator_gap.py,sha256=cBZEGq8TW1jrXFXB00iClQVXSEaE_jP_rHMY9WTgYyY,1813
|
|
203
|
-
dls_dodal-1.
|
|
204
|
-
dls_dodal-1.
|
|
205
|
-
dls_dodal-1.
|
|
206
|
-
dls_dodal-1.
|
|
207
|
-
dls_dodal-1.
|
|
204
|
+
dls_dodal-1.46.0.dist-info/METADATA,sha256=pRapE3URGvj3ihEkVa3VeglDUl2kXjmyhIdDGeUlqb0,16806
|
|
205
|
+
dls_dodal-1.46.0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
|
|
206
|
+
dls_dodal-1.46.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
|
|
207
|
+
dls_dodal-1.46.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
|
|
208
|
+
dls_dodal-1.46.0.dist-info/RECORD,,
|
dodal/_version.py
CHANGED
dodal/beamlines/i03.py
CHANGED
|
@@ -18,7 +18,6 @@ from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
|
18
18
|
from dodal.devices.backlight import Backlight
|
|
19
19
|
from dodal.devices.baton import Baton
|
|
20
20
|
from dodal.devices.cryostream import CryoStream
|
|
21
|
-
from dodal.devices.dcm import DCM
|
|
22
21
|
from dodal.devices.detector.detector_motion import DetectorMotion
|
|
23
22
|
from dodal.devices.diamond_filter import DiamondFilter, I03Filters
|
|
24
23
|
from dodal.devices.eiger import EigerDetector
|
|
@@ -26,6 +25,8 @@ from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
|
|
|
26
25
|
from dodal.devices.flux import Flux
|
|
27
26
|
from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
|
|
28
27
|
from dodal.devices.i03.beamstop import Beamstop
|
|
28
|
+
from dodal.devices.i03.dcm import DCM
|
|
29
|
+
from dodal.devices.i03.undulator_dcm import UndulatorDCM
|
|
29
30
|
from dodal.devices.motors import XYZPositioner
|
|
30
31
|
from dodal.devices.oav.oav_detector import OAV
|
|
31
32
|
from dodal.devices.oav.oav_parameters import OAVConfig
|
|
@@ -37,7 +38,6 @@ from dodal.devices.smargon import Smargon
|
|
|
37
38
|
from dodal.devices.synchrotron import Synchrotron
|
|
38
39
|
from dodal.devices.thawer import Thawer
|
|
39
40
|
from dodal.devices.undulator import Undulator
|
|
40
|
-
from dodal.devices.undulator_dcm import UndulatorDCM
|
|
41
41
|
from dodal.devices.webcam import Webcam
|
|
42
42
|
from dodal.devices.xbpm_feedback import XBPMFeedback
|
|
43
43
|
from dodal.devices.xspress3.xspress3 import Xspress3
|
|
@@ -113,8 +113,8 @@ def dcm() -> DCM:
|
|
|
113
113
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
114
114
|
"""
|
|
115
115
|
return DCM(
|
|
116
|
-
f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
117
|
-
"dcm",
|
|
116
|
+
prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
117
|
+
name="dcm",
|
|
118
118
|
)
|
|
119
119
|
|
|
120
120
|
|
dodal/beamlines/i04.py
CHANGED
|
@@ -10,13 +10,13 @@ from dodal.devices.aperturescatterguard import (
|
|
|
10
10
|
)
|
|
11
11
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
12
12
|
from dodal.devices.backlight import Backlight
|
|
13
|
-
from dodal.devices.dcm import DCM
|
|
14
13
|
from dodal.devices.detector import DetectorParams
|
|
15
14
|
from dodal.devices.detector.detector_motion import DetectorMotion
|
|
16
15
|
from dodal.devices.diamond_filter import DiamondFilter, I04Filters
|
|
17
16
|
from dodal.devices.eiger import EigerDetector
|
|
18
17
|
from dodal.devices.fast_grid_scan import ZebraFastGridScan
|
|
19
18
|
from dodal.devices.flux import Flux
|
|
19
|
+
from dodal.devices.i03.dcm import DCM
|
|
20
20
|
from dodal.devices.i04.transfocator import Transfocator
|
|
21
21
|
from dodal.devices.ipin import IPin
|
|
22
22
|
from dodal.devices.motors import XYZPositioner
|
dodal/beamlines/i18.py
CHANGED
|
@@ -12,7 +12,7 @@ from dodal.common.visit import (
|
|
|
12
12
|
LocalDirectoryServiceClient,
|
|
13
13
|
StaticVisitPathProvider,
|
|
14
14
|
)
|
|
15
|
-
from dodal.devices.
|
|
15
|
+
from dodal.devices.common_dcm import BaseDCM, PitchAndRollCrystal, RollCrystal
|
|
16
16
|
from dodal.devices.i18.diode import Diode
|
|
17
17
|
from dodal.devices.i18.KBMirror import KBMirror
|
|
18
18
|
from dodal.devices.i18.table import Table
|
|
@@ -54,12 +54,15 @@ def undulator() -> Undulator:
|
|
|
54
54
|
return Undulator(f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
# See https://github.com/DiamondLightSource/dodal/issues/1180
|
|
58
|
+
@device_factory(skip=True)
|
|
59
|
+
def dcm() -> BaseDCM[RollCrystal, PitchAndRollCrystal]:
|
|
59
60
|
# once spacing is added Si111 d-spacing is 3.135 angsterm , and Si311 is 1.637
|
|
60
61
|
# calculations are in gda/config/lookupTables/Si111/eV_Deg_converter.xml
|
|
61
|
-
return
|
|
62
|
+
return BaseDCM(
|
|
62
63
|
prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
64
|
+
xtal_1=RollCrystal,
|
|
65
|
+
xtal_2=PitchAndRollCrystal,
|
|
63
66
|
)
|
|
64
67
|
|
|
65
68
|
|
dodal/beamlines/i22.py
CHANGED
|
@@ -18,7 +18,7 @@ from dodal.common.crystal_metadata import (
|
|
|
18
18
|
from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
|
|
19
19
|
from dodal.devices.bimorph_mirror import BimorphMirror
|
|
20
20
|
from dodal.devices.focusing_mirror import FocusingMirror
|
|
21
|
-
from dodal.devices.i22.dcm import
|
|
21
|
+
from dodal.devices.i22.dcm import DCM
|
|
22
22
|
from dodal.devices.i22.fswitch import FSwitch
|
|
23
23
|
from dodal.devices.i22.nxsas import NXSasMetadataHolder, NXSasOAV, NXSasPilatus
|
|
24
24
|
from dodal.devices.linkam3 import Linkam3
|
|
@@ -141,8 +141,8 @@ def bimorph_vfm() -> BimorphMirror:
|
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
@device_factory()
|
|
144
|
-
def dcm() ->
|
|
145
|
-
return
|
|
144
|
+
def dcm() -> DCM:
|
|
145
|
+
return DCM(
|
|
146
146
|
prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
147
147
|
temperature_prefix=f"{PREFIX.beamline_prefix}-DI-DCM-01:",
|
|
148
148
|
crystal_1_metadata=make_crystal_metadata_from_material(
|
dodal/beamlines/i23.py
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
from
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from ophyd_async.epics.adpilatus import PilatusDetector
|
|
4
|
+
|
|
5
|
+
from dodal.common.beamlines.beamline_utils import (
|
|
6
|
+
device_factory,
|
|
7
|
+
get_path_provider,
|
|
8
|
+
set_path_provider,
|
|
9
|
+
)
|
|
2
10
|
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
11
|
+
from dodal.common.beamlines.device_helpers import HDF5_SUFFIX
|
|
12
|
+
from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
|
|
3
13
|
from dodal.devices.motors import SixAxisGonio
|
|
4
14
|
from dodal.devices.oav.pin_image_recognition import PinTipDetection
|
|
15
|
+
from dodal.devices.zebra.zebra import Zebra
|
|
16
|
+
from dodal.devices.zebra.zebra_constants_mapping import (
|
|
17
|
+
ZebraMapping,
|
|
18
|
+
ZebraSources,
|
|
19
|
+
ZebraTTLOutputs,
|
|
20
|
+
)
|
|
21
|
+
from dodal.devices.zebra.zebra_controlled_shutter import ZebraShutter
|
|
5
22
|
from dodal.log import set_beamline as set_log_beamline
|
|
6
23
|
from dodal.utils import BeamlinePrefix, get_beamline_name, get_hostname
|
|
7
24
|
|
|
@@ -9,8 +26,22 @@ BL = get_beamline_name("i23")
|
|
|
9
26
|
set_log_beamline(BL)
|
|
10
27
|
set_utils_beamline(BL)
|
|
11
28
|
|
|
29
|
+
set_path_provider(
|
|
30
|
+
StaticVisitPathProvider(
|
|
31
|
+
BL,
|
|
32
|
+
Path("/tmp"),
|
|
33
|
+
client=LocalDirectoryServiceClient(),
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
|
|
12
37
|
PREFIX = BeamlinePrefix(BL)
|
|
13
38
|
|
|
39
|
+
I23_ZEBRA_MAPPING = ZebraMapping(
|
|
40
|
+
outputs=ZebraTTLOutputs(TTL_DETECTOR=1, TTL_SHUTTER=4),
|
|
41
|
+
sources=ZebraSources(),
|
|
42
|
+
AND_GATE_FOR_AUTO_SHUTTER=2,
|
|
43
|
+
)
|
|
44
|
+
|
|
14
45
|
|
|
15
46
|
def _is_i23_machine():
|
|
16
47
|
"""
|
|
@@ -23,7 +54,7 @@ def _is_i23_machine():
|
|
|
23
54
|
|
|
24
55
|
@device_factory(skip=lambda: not _is_i23_machine())
|
|
25
56
|
def oav_pin_tip_detection() -> PinTipDetection:
|
|
26
|
-
"""Get the i23 OAV pin-tip detection device"""
|
|
57
|
+
"""Get the i23 OAV pin-tip detection device."""
|
|
27
58
|
|
|
28
59
|
return PinTipDetection(
|
|
29
60
|
f"{PREFIX.beamline_prefix}-DI-OAV-01:",
|
|
@@ -31,10 +62,34 @@ def oav_pin_tip_detection() -> PinTipDetection:
|
|
|
31
62
|
)
|
|
32
63
|
|
|
33
64
|
|
|
65
|
+
@device_factory()
|
|
66
|
+
def shutter() -> ZebraShutter:
|
|
67
|
+
"""Get the i23 zebra controlled shutter."""
|
|
68
|
+
return ZebraShutter(f"{PREFIX.beamline_prefix}-EA-SHTR-01:", "shutter")
|
|
69
|
+
|
|
70
|
+
|
|
34
71
|
@device_factory()
|
|
35
72
|
def gonio() -> SixAxisGonio:
|
|
36
73
|
"""Get the i23 goniometer"""
|
|
74
|
+
return SixAxisGonio(f"{PREFIX.beamline_prefix}-MO-GONIO-01:")
|
|
75
|
+
|
|
37
76
|
|
|
38
|
-
|
|
39
|
-
|
|
77
|
+
@device_factory()
|
|
78
|
+
def zebra() -> Zebra:
|
|
79
|
+
"""Get the i23 zebra"""
|
|
80
|
+
return Zebra(
|
|
81
|
+
name="zebra",
|
|
82
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-ZEBRA-01:ZEBRA:",
|
|
83
|
+
mapping=I23_ZEBRA_MAPPING,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@device_factory()
|
|
88
|
+
def pilatus() -> PilatusDetector:
|
|
89
|
+
"""Get the i23 pilatus"""
|
|
90
|
+
return PilatusDetector(
|
|
91
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-PILAT-01:",
|
|
92
|
+
path_provider=get_path_provider(),
|
|
93
|
+
drv_suffix="cam1:",
|
|
94
|
+
fileio_suffix=HDF5_SUFFIX,
|
|
40
95
|
)
|
dodal/beamlines/p38.py
CHANGED
|
@@ -16,7 +16,7 @@ from dodal.common.crystal_metadata import (
|
|
|
16
16
|
)
|
|
17
17
|
from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
|
|
18
18
|
from dodal.devices.focusing_mirror import FocusingMirror
|
|
19
|
-
from dodal.devices.i22.dcm import
|
|
19
|
+
from dodal.devices.i22.dcm import DCM
|
|
20
20
|
from dodal.devices.i22.fswitch import FSwitch
|
|
21
21
|
from dodal.devices.linkam3 import Linkam3
|
|
22
22
|
from dodal.devices.pressure_jump_cell import PressureJumpCell
|
|
@@ -143,8 +143,8 @@ def hfm() -> FocusingMirror:
|
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
@device_factory(mock=True)
|
|
146
|
-
def dcm() ->
|
|
147
|
-
return
|
|
146
|
+
def dcm() -> DCM:
|
|
147
|
+
return DCM(
|
|
148
148
|
temperature_prefix=f"{PREFIX.beamline_prefix}-DI-DCM-01:",
|
|
149
149
|
crystal_1_metadata=make_crystal_metadata_from_material(
|
|
150
150
|
MaterialsEnum.Si, (1, 1, 1)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from typing import Generic, TypeVar
|
|
2
|
+
|
|
3
|
+
from ophyd_async.core import (
|
|
4
|
+
StandardReadable,
|
|
5
|
+
)
|
|
6
|
+
from ophyd_async.epics.core import epics_signal_r
|
|
7
|
+
from ophyd_async.epics.motor import Motor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StationaryCrystal(StandardReadable):
|
|
11
|
+
def __init__(self, prefix):
|
|
12
|
+
super().__init__(prefix)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class RollCrystal(StationaryCrystal):
|
|
16
|
+
def __init__(self, prefix):
|
|
17
|
+
with self.add_children_as_readables():
|
|
18
|
+
self.roll_in_mrad = Motor(prefix + "ROLL")
|
|
19
|
+
super().__init__(prefix)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PitchAndRollCrystal(StationaryCrystal):
|
|
23
|
+
def __init__(self, prefix):
|
|
24
|
+
with self.add_children_as_readables():
|
|
25
|
+
self.pitch_in_mrad = Motor(prefix + "PITCH")
|
|
26
|
+
self.roll_in_mrad = Motor(prefix + "ROLL")
|
|
27
|
+
super().__init__(prefix)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Xtal_1 = TypeVar("Xtal_1", bound=StationaryCrystal)
|
|
31
|
+
Xtal_2 = TypeVar("Xtal_2", bound=StationaryCrystal)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class BaseDCM(StandardReadable, Generic[Xtal_1, Xtal_2]):
|
|
35
|
+
"""
|
|
36
|
+
Common device for the double crystal monochromator (DCM), used to select the energy of the beam.
|
|
37
|
+
|
|
38
|
+
Features common across all DCM's should include virtual motors to set energy/wavelength and contain two crystals,
|
|
39
|
+
each of which can be movable. Some DCM's contain crystals with roll motors, and some contain crystals with roll and pitch motors.
|
|
40
|
+
This base device accounts for all combinations of this.
|
|
41
|
+
|
|
42
|
+
This device should act as a parent for beamline-specific DCM's, in which any other missing signals can be added.
|
|
43
|
+
|
|
44
|
+
Bluesky plans using DCM's should be typed to specify which types of crystals are required. For example, a plan
|
|
45
|
+
which only requires one crystal which can roll should be typed 'def my_plan(dcm: BaseDCM[RollCrystal, StationaryCrystal])`
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(
|
|
49
|
+
self, prefix: str, xtal_1: type[Xtal_1], xtal_2: type[Xtal_2], name: str = ""
|
|
50
|
+
) -> None:
|
|
51
|
+
with self.add_children_as_readables():
|
|
52
|
+
# Virtual motor PV's which set the physical motors so that the DCM produces requested
|
|
53
|
+
# wavelength/energy
|
|
54
|
+
self.energy_in_kev = Motor(prefix + "ENERGY")
|
|
55
|
+
self.wavelength_in_a = Motor(prefix + "WAVELENGTH")
|
|
56
|
+
|
|
57
|
+
# Real motors
|
|
58
|
+
self.bragg_in_degrees = Motor(prefix + "BRAGG")
|
|
59
|
+
# Offset ensures that the beam exits the DCM at the same point, regardless of energy.
|
|
60
|
+
self.offset_in_mm = Motor(prefix + "OFFSET")
|
|
61
|
+
|
|
62
|
+
self.crystal_metadata_d_spacing_a = epics_signal_r(
|
|
63
|
+
float, prefix + "DSPACING:RBV"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
self._make_crystals(prefix, xtal_1, xtal_2)
|
|
67
|
+
|
|
68
|
+
super().__init__(name)
|
|
69
|
+
|
|
70
|
+
# Prefix convention is different depending on whether there are one or two controllable crystals
|
|
71
|
+
def _make_crystals(self, prefix: str, xtal_1: type[Xtal_1], xtal_2: type[Xtal_2]):
|
|
72
|
+
if StationaryCrystal not in [xtal_1, xtal_2]:
|
|
73
|
+
self.xtal_1 = xtal_1(f"{prefix}XTAL1:")
|
|
74
|
+
self.xtal_2 = xtal_2(f"{prefix}XTAL2:")
|
|
75
|
+
else:
|
|
76
|
+
self.xtal_1 = xtal_1(prefix)
|
|
77
|
+
self.xtal_2 = xtal_2(prefix)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import numpy as np
|
|
2
|
-
from ophyd_async.core import Array1D,
|
|
2
|
+
from ophyd_async.core import Array1D, soft_signal_r_and_setter
|
|
3
3
|
from ophyd_async.epics.core import epics_signal_r
|
|
4
4
|
from ophyd_async.epics.motor import Motor
|
|
5
5
|
|
|
@@ -8,9 +8,14 @@ from dodal.common.crystal_metadata import (
|
|
|
8
8
|
MaterialsEnum,
|
|
9
9
|
make_crystal_metadata_from_material,
|
|
10
10
|
)
|
|
11
|
+
from dodal.devices.common_dcm import (
|
|
12
|
+
BaseDCM,
|
|
13
|
+
PitchAndRollCrystal,
|
|
14
|
+
StationaryCrystal,
|
|
15
|
+
)
|
|
11
16
|
|
|
12
17
|
|
|
13
|
-
class DCM(
|
|
18
|
+
class DCM(BaseDCM[PitchAndRollCrystal, StationaryCrystal]):
|
|
14
19
|
"""
|
|
15
20
|
A double crystal monochromator (DCM), used to select the energy of the beam.
|
|
16
21
|
|
|
@@ -30,13 +35,7 @@ class DCM(StandardReadable):
|
|
|
30
35
|
MaterialsEnum.Si, (1, 1, 1)
|
|
31
36
|
)
|
|
32
37
|
with self.add_children_as_readables():
|
|
33
|
-
self.bragg_in_degrees = Motor(prefix + "BRAGG")
|
|
34
|
-
self.roll_in_mrad = Motor(prefix + "ROLL")
|
|
35
|
-
self.offset_in_mm = Motor(prefix + "OFFSET")
|
|
36
38
|
self.perp_in_mm = Motor(prefix + "PERP")
|
|
37
|
-
self.energy_in_kev = Motor(prefix + "ENERGY")
|
|
38
|
-
self.pitch_in_mrad = Motor(prefix + "PITCH")
|
|
39
|
-
self.wavelength = Motor(prefix + "WAVELENGTH")
|
|
40
39
|
|
|
41
40
|
# temperatures
|
|
42
41
|
self.xtal1_temp = epics_signal_r(float, prefix + "TEMP1")
|
|
@@ -58,7 +57,4 @@ class DCM(StandardReadable):
|
|
|
58
57
|
Array1D[np.uint64],
|
|
59
58
|
initial_value=reflection_array,
|
|
60
59
|
)
|
|
61
|
-
|
|
62
|
-
float, prefix + "DSPACING:RBV"
|
|
63
|
-
)
|
|
64
|
-
super().__init__(name)
|
|
60
|
+
super().__init__(prefix, PitchAndRollCrystal, StationaryCrystal, name)
|
|
@@ -4,10 +4,9 @@ from bluesky.protocols import Movable
|
|
|
4
4
|
from ophyd_async.core import AsyncStatus, Reference, StandardReadable
|
|
5
5
|
|
|
6
6
|
from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
|
|
7
|
-
|
|
8
|
-
from
|
|
9
|
-
from .
|
|
10
|
-
from .undulator import Undulator
|
|
7
|
+
from dodal.devices.i03.dcm import DCM
|
|
8
|
+
from dodal.devices.undulator import Undulator
|
|
9
|
+
from dodal.log import LOGGER
|
|
11
10
|
|
|
12
11
|
ENERGY_TIMEOUT_S: float = 30.0
|
|
13
12
|
|
|
@@ -23,6 +22,9 @@ class UndulatorDCM(StandardReadable, Movable[float]):
|
|
|
23
22
|
Calling unulator_dcm.set(energy) will move the DCM motor, perform a table lookup
|
|
24
23
|
and move the Undulator gap motor if needed. So the set method can be thought of as
|
|
25
24
|
a comprehensive way to set beam energy.
|
|
25
|
+
|
|
26
|
+
This class will be removed in the future. Use the separate Undulator and DCM devices
|
|
27
|
+
instead. See https://github.com/DiamondLightSource/dodal/issues/1092
|
|
26
28
|
"""
|
|
27
29
|
|
|
28
30
|
def __init__(
|
dodal/devices/i13_1/merlin.py
CHANGED
|
@@ -23,10 +23,9 @@ class Merlin(StandardDetector):
|
|
|
23
23
|
super().__init__(
|
|
24
24
|
MerlinController(self.drv),
|
|
25
25
|
adcore.ADHDFWriter(
|
|
26
|
-
self.hdf,
|
|
27
|
-
path_provider,
|
|
28
|
-
|
|
29
|
-
adcore.ADBaseDatasetDescriber(self.drv),
|
|
26
|
+
fileio=self.hdf,
|
|
27
|
+
path_provider=path_provider,
|
|
28
|
+
dataset_describer=adcore.ADBaseDatasetDescriber(self.drv),
|
|
30
29
|
),
|
|
31
30
|
config_sigs=(self.drv.acquire_period, self.drv.acquire_time),
|
|
32
31
|
name=name,
|
|
@@ -37,7 +37,7 @@ class MerlinController(ADBaseController):
|
|
|
37
37
|
DEFAULT_TIMEOUT + await self.driver.acquire_time.get_value()
|
|
38
38
|
)
|
|
39
39
|
await asyncio.gather(
|
|
40
|
-
self.driver.num_images.set(trigger_info.
|
|
40
|
+
self.driver.num_images.set(trigger_info.total_number_of_exposures),
|
|
41
41
|
self.driver.image_mode.set(ADImageMode.MULTIPLE),
|
|
42
42
|
)
|
|
43
43
|
|
dodal/devices/i22/dcm.py
CHANGED
|
@@ -5,7 +5,6 @@ from bluesky.protocols import Reading
|
|
|
5
5
|
from event_model.documents.event_descriptor import DataKey
|
|
6
6
|
from ophyd_async.core import (
|
|
7
7
|
Array1D,
|
|
8
|
-
StandardReadable,
|
|
9
8
|
StandardReadableFormat,
|
|
10
9
|
soft_signal_r_and_setter,
|
|
11
10
|
)
|
|
@@ -13,13 +12,18 @@ from ophyd_async.epics.core import epics_signal_r
|
|
|
13
12
|
from ophyd_async.epics.motor import Motor
|
|
14
13
|
|
|
15
14
|
from dodal.common.crystal_metadata import CrystalMetadata
|
|
15
|
+
from dodal.devices.common_dcm import (
|
|
16
|
+
BaseDCM,
|
|
17
|
+
PitchAndRollCrystal,
|
|
18
|
+
RollCrystal,
|
|
19
|
+
)
|
|
16
20
|
|
|
17
21
|
# Conversion constant for energy and wavelength, taken from the X-Ray data booklet
|
|
18
22
|
# Converts between energy in KeV and wavelength in angstrom
|
|
19
23
|
_CONVERSION_CONSTANT = 12.3984
|
|
20
24
|
|
|
21
25
|
|
|
22
|
-
class
|
|
26
|
+
class DCM(BaseDCM[RollCrystal, PitchAndRollCrystal]):
|
|
23
27
|
"""
|
|
24
28
|
A double crystal monochromator (DCM), used to select the energy of the beam.
|
|
25
29
|
|
|
@@ -39,13 +43,7 @@ class DoubleCrystalMonochromator(StandardReadable):
|
|
|
39
43
|
) -> None:
|
|
40
44
|
with self.add_children_as_readables():
|
|
41
45
|
# Positionable Parameters
|
|
42
|
-
self.bragg = Motor(prefix + "BRAGG")
|
|
43
|
-
self.offset = Motor(prefix + "OFFSET")
|
|
44
46
|
self.perp = Motor(prefix + "PERP")
|
|
45
|
-
self.energy = Motor(prefix + "ENERGY")
|
|
46
|
-
self.crystal_1_roll = Motor(prefix + "XTAL1:ROLL")
|
|
47
|
-
self.crystal_2_roll = Motor(prefix + "XTAL2:ROLL")
|
|
48
|
-
self.crystal_2_pitch = Motor(prefix + "XTAL2:PITCH")
|
|
49
47
|
|
|
50
48
|
# Temperatures
|
|
51
49
|
self.backplate_temp = epics_signal_r(float, temperature_prefix + "PT100-7")
|
|
@@ -93,12 +91,12 @@ class DoubleCrystalMonochromator(StandardReadable):
|
|
|
93
91
|
units=crystal_2_metadata.d_spacing[1],
|
|
94
92
|
)
|
|
95
93
|
|
|
96
|
-
super().__init__(name)
|
|
94
|
+
super().__init__(prefix, RollCrystal, PitchAndRollCrystal, name)
|
|
97
95
|
|
|
98
96
|
async def describe(self) -> dict[str, DataKey]:
|
|
99
97
|
default_describe = await super().describe()
|
|
100
98
|
return {
|
|
101
|
-
f"{self.name}-
|
|
99
|
+
f"{self.name}-wavelength_in_a": DataKey(
|
|
102
100
|
dtype="number",
|
|
103
101
|
shape=[],
|
|
104
102
|
source=self.name,
|
|
@@ -109,7 +107,7 @@ class DoubleCrystalMonochromator(StandardReadable):
|
|
|
109
107
|
|
|
110
108
|
async def read(self) -> dict[str, Reading]:
|
|
111
109
|
default_reading = await super().read()
|
|
112
|
-
energy: float = default_reading[f"{self.name}-
|
|
110
|
+
energy: float = default_reading[f"{self.name}-energy_in_kev"]["value"]
|
|
113
111
|
if energy > 0.0:
|
|
114
112
|
wavelength = _CONVERSION_CONSTANT / energy
|
|
115
113
|
else:
|
|
@@ -117,7 +115,7 @@ class DoubleCrystalMonochromator(StandardReadable):
|
|
|
117
115
|
|
|
118
116
|
return {
|
|
119
117
|
**default_reading,
|
|
120
|
-
f"{self.name}-
|
|
118
|
+
f"{self.name}-wavelength_in_a": Reading(
|
|
121
119
|
value=wavelength,
|
|
122
120
|
timestamp=time.time(),
|
|
123
121
|
),
|
dodal/devices/i24/dcm.py
CHANGED
|
@@ -1,28 +1,19 @@
|
|
|
1
|
-
from ophyd_async.core import StandardReadable
|
|
2
1
|
from ophyd_async.epics.core import epics_signal_r
|
|
3
|
-
from ophyd_async.epics.motor import Motor
|
|
4
2
|
|
|
3
|
+
from dodal.devices.common_dcm import (
|
|
4
|
+
BaseDCM,
|
|
5
|
+
PitchAndRollCrystal,
|
|
6
|
+
RollCrystal,
|
|
7
|
+
)
|
|
5
8
|
|
|
6
|
-
|
|
9
|
+
|
|
10
|
+
class DCM(BaseDCM[RollCrystal, PitchAndRollCrystal]):
|
|
7
11
|
"""
|
|
8
12
|
A double crystal monocromator device, used to select the beam energy.
|
|
9
13
|
"""
|
|
10
14
|
|
|
11
15
|
def __init__(self, prefix: str, name: str = "") -> None:
|
|
12
16
|
with self.add_children_as_readables():
|
|
13
|
-
# Motors
|
|
14
|
-
self.bragg_in_degrees = Motor(prefix + "-MO-DCM-01:BRAGG")
|
|
15
|
-
self.x_translation_in_mm = Motor(prefix + "-MO-DCM-01:X")
|
|
16
|
-
self.offset_in_mm = Motor(prefix + "-MO-DCM-01:OFFSET")
|
|
17
|
-
self.gap_in_mm = Motor(prefix + "-MO-DCM-01:GAP")
|
|
18
|
-
self.energy_in_kev = Motor(prefix + "-MO-DCM-01:ENERGY")
|
|
19
|
-
self.xtal1_roll = Motor(prefix + "-MO-DCM-01:XTAL1:ROLL")
|
|
20
|
-
self.xtal2_roll = Motor(prefix + "-MO-DCM-01:XTAL2:ROLL")
|
|
21
|
-
self.xtal2_pitch = Motor(prefix + "-MO-DCM-01:XTAL2:PITCH")
|
|
22
|
-
|
|
23
|
-
# Wavelength is calculated in epics from the energy
|
|
24
|
-
self.wavelength_in_a = epics_signal_r(float, prefix + "-MO-DCM-01:LAMBDA")
|
|
25
|
-
|
|
26
17
|
# Temperatures
|
|
27
18
|
self.xtal1_temp = epics_signal_r(float, prefix + "-DI-DCM-01:PT100-1")
|
|
28
19
|
self.xtal1_heater_temp = epics_signal_r(
|
|
@@ -39,4 +30,4 @@ class DCM(StandardReadable):
|
|
|
39
30
|
self.b1_plate_temp = epics_signal_r(float, prefix + "-DI-DCM-01:PT100-7")
|
|
40
31
|
self.gap_temp = epics_signal_r(float, prefix + "-DI-DCM-01:TC-1")
|
|
41
32
|
|
|
42
|
-
super().__init__(name)
|
|
33
|
+
super().__init__(prefix + "-MO-DCM-01:", RollCrystal, PitchAndRollCrystal, name)
|
dodal/devices/tetramm.py
CHANGED
|
@@ -244,10 +244,9 @@ class TetrammDetector(StandardDetector):
|
|
|
244
244
|
super().__init__(
|
|
245
245
|
controller,
|
|
246
246
|
ADHDFWriter(
|
|
247
|
-
self.hdf,
|
|
248
|
-
path_provider,
|
|
249
|
-
|
|
250
|
-
TetrammDatasetDescriber(controller),
|
|
247
|
+
fileio=self.hdf,
|
|
248
|
+
path_provider=path_provider,
|
|
249
|
+
dataset_describer=TetrammDatasetDescriber(controller),
|
|
251
250
|
plugins=plugins,
|
|
252
251
|
),
|
|
253
252
|
config_signals,
|
dodal/devices/turbo_slit.py
CHANGED
|
@@ -13,9 +13,9 @@ class TurboSlit(StandardReadable, Movable[float]):
|
|
|
13
13
|
The xfine motor can move the slit in x direction at high frequencies for different scans.
|
|
14
14
|
These slits can be scanned continously or in step mode.
|
|
15
15
|
The relationship between the three motors is as follows:
|
|
16
|
-
- arc - position of the middle of the gap (coarse/ macro) extension
|
|
16
|
+
- arc - position of the middle of the gap in degrees (coarse/ macro) extension
|
|
17
17
|
- gap - width in mm, provides energy resolution
|
|
18
|
-
- xfine selects the energy as part of the high frequency scan
|
|
18
|
+
- xfine - main scanning axis in mm, selects the energy as part of the high frequency scan
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
def __init__(self, prefix: str, name: str = ""):
|
dodal/devices/zebra/zebra.py
CHANGED
dodal/plan_stubs/data_session.py
CHANGED
|
@@ -33,7 +33,11 @@ def attach_data_session_metadata_wrapper(
|
|
|
33
33
|
Yields:
|
|
34
34
|
Iterator[Msg]: Plan messages
|
|
35
35
|
"""
|
|
36
|
-
|
|
36
|
+
try:
|
|
37
|
+
provider = provider or get_path_provider()
|
|
38
|
+
except NameError:
|
|
39
|
+
provider = None
|
|
40
|
+
|
|
37
41
|
if isinstance(provider, UpdatingPathProvider):
|
|
38
42
|
yield from bps.wait_for([provider.update])
|
|
39
43
|
ress = yield from bps.wait_for([provider.data_session])
|
|
@@ -41,6 +45,11 @@ def attach_data_session_metadata_wrapper(
|
|
|
41
45
|
# https://github.com/DiamondLightSource/dodal/issues/452
|
|
42
46
|
# As part of 452, write each dataCollection into their own folder, then can use resource_dir directly
|
|
43
47
|
yield from bpp.inject_md_wrapper(plan, md={DATA_SESSION: data_session})
|
|
48
|
+
elif provider is None:
|
|
49
|
+
logging.warning(
|
|
50
|
+
f"There is no PathProvider set, {attach_data_session_metadata_wrapper.__name__} will have no effect"
|
|
51
|
+
)
|
|
52
|
+
yield from plan
|
|
44
53
|
else:
|
|
45
54
|
logging.warning(
|
|
46
55
|
f"{provider} is not an UpdatingPathProvider, {attach_data_session_metadata_wrapper.__name__} will have no effect"
|
|
@@ -2,14 +2,14 @@ from typing import Protocol, runtime_checkable
|
|
|
2
2
|
|
|
3
3
|
from bluesky import plan_stubs as bps
|
|
4
4
|
|
|
5
|
-
from dodal.devices.
|
|
5
|
+
from dodal.devices.common_dcm import BaseDCM
|
|
6
6
|
from dodal.devices.undulator import Undulator
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@runtime_checkable
|
|
10
10
|
class CheckUndulatorDevices(Protocol):
|
|
11
11
|
undulator: Undulator
|
|
12
|
-
dcm:
|
|
12
|
+
dcm: BaseDCM
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def verify_undulator_gap(devices: CheckUndulatorDevices):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|