dls-dodal 1.26.0__py3-none-any.whl → 1.28.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.26.0.dist-info → dls_dodal-1.28.0.dist-info}/METADATA +1 -1
- {dls_dodal-1.26.0.dist-info → dls_dodal-1.28.0.dist-info}/RECORD +25 -24
- dodal/_version.py +2 -2
- dodal/beamlines/i03.py +40 -9
- dodal/beamlines/i04.py +38 -6
- dodal/beamlines/i22.py +43 -0
- dodal/beamlines/i24.py +3 -1
- dodal/beamlines/p38.py +29 -0
- dodal/common/coordination.py +11 -9
- dodal/common/visit.py +1 -43
- dodal/devices/aperturescatterguard.py +41 -6
- dodal/devices/backlight.py +30 -14
- dodal/devices/detector/detector.py +5 -1
- dodal/devices/fast_grid_scan.py +204 -192
- dodal/devices/i22/dcm.py +152 -0
- dodal/devices/motors.py +8 -4
- dodal/devices/oav/utils.py +60 -0
- dodal/devices/robot.py +2 -0
- dodal/devices/tetramm.py +6 -1
- dodal/devices/thawer.py +15 -0
- dodal/plans/data_session_metadata.py +46 -0
- dodal/devices/lower_gonio_stages.py +0 -8
- dodal/devices/panda_fast_grid_scan.py +0 -162
- {dls_dodal-1.26.0.dist-info → dls_dodal-1.28.0.dist-info}/LICENSE +0 -0
- {dls_dodal-1.26.0.dist-info → dls_dodal-1.28.0.dist-info}/WHEEL +0 -0
- {dls_dodal-1.26.0.dist-info → dls_dodal-1.28.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.26.0.dist-info → dls_dodal-1.28.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
dodal/__init__.py,sha256=y-VRpfiX-Lm5nchB9N0VfMy_6dwFqVxpSn5SiAQql9I,114
|
|
2
2
|
dodal/__main__.py,sha256=kP2S2RPitnOWpNGokjZ1Yq-1umOtp5sNOZk2B3tBPLM,111
|
|
3
|
-
dodal/_version.py,sha256=
|
|
3
|
+
dodal/_version.py,sha256=RW6USZoeFR_9ttdXBH9tb0lK1erQEYot3NzmBpWXDMs,413
|
|
4
4
|
dodal/adsim.py,sha256=OW2dcS7ciD4Yq9WFw4PN_c5Bwccrmu7R-zr-u6ZCbQM,497
|
|
5
5
|
dodal/cli.py,sha256=z0UBESrNrq6Kq4rttp4uHcwS1fnOnRkKBRDHSriPpGY,2058
|
|
6
6
|
dodal/log.py,sha256=grK5-c-V6UjMERwDqYPdKbc_BpycrNb8hP0uteLOVCY,8296
|
|
@@ -9,21 +9,21 @@ dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
9
9
|
dodal/beamline_specific_utils/i03.py,sha256=Ixe1anFQl-kwRJubmQx28TIW4Zw8qDxpElNNNapWQHI,396
|
|
10
10
|
dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
|
|
11
11
|
dodal/beamlines/__init__.py,sha256=U0dQYFEUloCdQOs24zyfpPTncJXOO4cDcfHSevVOAw4,2890
|
|
12
|
-
dodal/beamlines/i03.py,sha256=
|
|
13
|
-
dodal/beamlines/i04.py,sha256=
|
|
12
|
+
dodal/beamlines/i03.py,sha256=LcE9Vir0cCjt9pxO2wcevlM0NTP6NBCxp6DNtShPV0E,16914
|
|
13
|
+
dodal/beamlines/i04.py,sha256=JOyNcUnC3wva4no2MHKp6b8gOKAcQXL_c4cBo7oneVs,13034
|
|
14
14
|
dodal/beamlines/i04_1.py,sha256=KDxSUQNhIs_NFiRaLY-Jiory0DeN7Y0ErvGuoTrwCDU,4731
|
|
15
15
|
dodal/beamlines/i20_1.py,sha256=XJpey1-XZnCVpjK6-tODRYeBofqV44BL8lK5OSdQgiI,746
|
|
16
|
-
dodal/beamlines/i22.py,sha256=
|
|
16
|
+
dodal/beamlines/i22.py,sha256=Lk5S5AHu9hCnqlJJHZj1fhSDm1sTOgEVMe1S20nVqeY,8786
|
|
17
17
|
dodal/beamlines/i23.py,sha256=iEFkrA4sPQsRLGAmeD263jPMX4u2SF1NK4_KYqnVwow,1402
|
|
18
|
-
dodal/beamlines/i24.py,sha256=
|
|
19
|
-
dodal/beamlines/p38.py,sha256=
|
|
18
|
+
dodal/beamlines/i24.py,sha256=LIe8tu_ZJsoeQH7tYRZHSvqQ9C9zBGOXO6rb1DPCYjQ,4595
|
|
19
|
+
dodal/beamlines/p38.py,sha256=TC78u4GwEnj6X0r5cnHhqNdBbbDRnh8lY8pEucBZjEU,8006
|
|
20
20
|
dodal/beamlines/p45.py,sha256=TNIkC-SBfj0ayZtlLLXW9xCSi5CzJkO8XpAMIo8fjao,2957
|
|
21
21
|
dodal/common/__init__.py,sha256=ZC4ICKUDB0BDxRaVy8nmqclVmDBne-dPtk6UJsoFq6I,258
|
|
22
|
-
dodal/common/coordination.py,sha256=
|
|
22
|
+
dodal/common/coordination.py,sha256=OxIjDiO1-9A9KESRPFtzwkvvQlavbgA5RHemlbubBPg,1168
|
|
23
23
|
dodal/common/maths.py,sha256=JRSBhbMzwlicKp1_Bsfu9gA79JJA_Dgq9EpbExFH65M,1829
|
|
24
24
|
dodal/common/types.py,sha256=M0gZs9F7--gREF8VYJn-Y1Mt9mIEgp1aLY3oUpUkSno,546
|
|
25
25
|
dodal/common/udc_directory_provider.py,sha256=zNlt_VgdAlyBtVN7neTHk_0tWBbI4pPUL7q9WQOzXvo,1260
|
|
26
|
-
dodal/common/visit.py,sha256=
|
|
26
|
+
dodal/common/visit.py,sha256=MhrFbLptMG0Wvd2nHubBwQ44qAzoP4Bf4_z_-wO8rh0,6063
|
|
27
27
|
dodal/common/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
dodal/common/beamlines/beamline_parameters.py,sha256=N22dtDLw3Hlo7EUmGxe4qFGcu7OnldwCz_mU7yK2rd0,3577
|
|
29
29
|
dodal/common/beamlines/beamline_utils.py,sha256=AgmH9wpnFQ4DHAA7_Yo0COa2piX2ksFxukFt2_600kA,4488
|
|
@@ -32,27 +32,25 @@ dodal/devices/CTAB.py,sha256=_MfL_KH4uDPxq_RuHFEZ9HVXOpUnQb5be3csoz9DdAs,1630
|
|
|
32
32
|
dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
dodal/devices/adsim.py,sha256=dMU0TKIuiODHYFHQOH4_5UvB8iJtaJEtjqaEDGjcU-w,311
|
|
34
34
|
dodal/devices/aperture.py,sha256=0MtTzKMDZ5DVAz0DE0kXI0M76VCp0y9vFsrMggEMpxk,586
|
|
35
|
-
dodal/devices/aperturescatterguard.py,sha256=
|
|
35
|
+
dodal/devices/aperturescatterguard.py,sha256=2JJsEPJGJHrI0ztv1cSaP7H5T6qdzDfUcN-VEQ39B8o,11012
|
|
36
36
|
dodal/devices/attenuator.py,sha256=OD7fElTIMHWk7ZopPqEu29lionm7WwgC0-Kvl8vBIb0,2599
|
|
37
|
-
dodal/devices/backlight.py,sha256=
|
|
37
|
+
dodal/devices/backlight.py,sha256=vsNGZB4C_mVMafllvJlOTghsfv6UqALMKUMLXu3WZ5k,1115
|
|
38
38
|
dodal/devices/beamstop.py,sha256=8L3qhlk-3ZBOp10xK1i8qZqYTGOXX1mVF1MgXoN0dfg,215
|
|
39
39
|
dodal/devices/cryostream.py,sha256=6MU4rXIOL33C-8F3DVfAtv0ZnwiysTtawjkeePd5IrQ,332
|
|
40
40
|
dodal/devices/dcm.py,sha256=vfyGYDzfSwTiNqlzkfNjkrL-Q1hNVSgJddvJ5Un_lvg,1610
|
|
41
41
|
dodal/devices/eiger.py,sha256=NE4tHdqgUZpUxJLQbd5lLUIHZcpeotppexJGlDNByzM,13868
|
|
42
42
|
dodal/devices/eiger_odin.py,sha256=U5Byb7uNwDdNscBRp7yBYQrsjKrKXl2l5WdSpL09lAw,6980
|
|
43
|
-
dodal/devices/fast_grid_scan.py,sha256=
|
|
43
|
+
dodal/devices/fast_grid_scan.py,sha256=qp0jdzhTjkDtaf7ngdPcegcFLlp1EmWUDbU_knCBDpc,13438
|
|
44
44
|
dodal/devices/fluorescence_detector_motion.py,sha256=RrXfPmJzWnAjcjp9u0AnJEfjvWPMKburVTySB2hxYbw,181
|
|
45
45
|
dodal/devices/flux.py,sha256=RtPStHw7Mad0igVKntKWVZfuZn2clokVJqH14HLix6M,198
|
|
46
46
|
dodal/devices/focusing_mirror.py,sha256=aRqBkE3OgaXpH6lP3v1VbSYgHsMMbSsPPXzeyAGf_Pg,6435
|
|
47
47
|
dodal/devices/ipin.py,sha256=OGMXwAE4KDDonZRPFkUmR9Vsk6X4Ox-hEvPT5drP-mQ,208
|
|
48
48
|
dodal/devices/linkam3.py,sha256=TPhiQ1D9i_HIlKHAlfnVfX7H6aPOAeXPEJLdmvwdKWQ,3776
|
|
49
49
|
dodal/devices/logging_ophyd_device.py,sha256=xw4lbyqq5_ehESGterVEfubJsBiJTWvBp5b9k62gSkg,666
|
|
50
|
-
dodal/devices/
|
|
51
|
-
dodal/devices/motors.py,sha256=aKtMv5q_4b1eFhzyuk2-D6zDsY_6cqAmG59y5LWUz1s,1328
|
|
50
|
+
dodal/devices/motors.py,sha256=T0wKGpRKhgduAQj3jE8CGmxy3cWMAFl9_glyjVZwjnA,1473
|
|
52
51
|
dodal/devices/p45.py,sha256=jzBW2fGRhIbGzSRs5Fgupxro6aqE611n1RTcrTTG-yY,1047
|
|
53
|
-
dodal/devices/panda_fast_grid_scan.py,sha256=cQmrs3pQ3P_J1e5C1IOdjDZibRthIHjqY98eaH5kLCE,5424
|
|
54
52
|
dodal/devices/qbpm1.py,sha256=OY7-WbdxMiLGUK8Z57ezwqSXbHxoPP-y3GvBgj9kgMA,220
|
|
55
|
-
dodal/devices/robot.py,sha256=
|
|
53
|
+
dodal/devices/robot.py,sha256=V5Gk-e1ZczU7y8SqU4_1YXYQJ6knoVFtXLZmIDY9MI4,2530
|
|
56
54
|
dodal/devices/s4_slit_gaps.py,sha256=j3kgF9WfGFaU9xdUuiAh-QqI5u_vhiAftaDVINt91SM,243
|
|
57
55
|
dodal/devices/scatterguard.py,sha256=0qnvhoo3RjLsrxVgIoDJpryqunlgMVgaTsoyKRC2g4Y,331
|
|
58
56
|
dodal/devices/scintillator.py,sha256=4Dej1a6HRom9GRwTDsaTKGfvloP20POUqIeHqsI8-R8,184
|
|
@@ -60,7 +58,8 @@ dodal/devices/slits.py,sha256=URru9VN2N19KqeUPDZaBmyKYn0_JJiE0Vko4sZpfsl8,601
|
|
|
60
58
|
dodal/devices/smargon.py,sha256=ml96h7E1C31qPo8jocAepSouIVXgpIR0vuMF99nZjqM,2964
|
|
61
59
|
dodal/devices/status.py,sha256=TuUGidZ4Ar-WCRc_sX0wn58DmL6brj1pMr8rNF5Z6VU,1198
|
|
62
60
|
dodal/devices/synchrotron.py,sha256=E5vcSum-zoD5vIZxa2Xcl0gAkeRqY6a-AfZQICCwLHg,1947
|
|
63
|
-
dodal/devices/tetramm.py,sha256=
|
|
61
|
+
dodal/devices/tetramm.py,sha256=Xdy3dXFo4Wn6HHsRo4e1tTgMzvDa8MwkVvcDFZxFrYQ,8280
|
|
62
|
+
dodal/devices/thawer.py,sha256=L5OYSdzGvx6dIkGgcTbITAbFAm0OKEVVqYBb4MPstOg,382
|
|
64
63
|
dodal/devices/turbo_slit.py,sha256=W3ZRIqDhq4iMhr5GcIiWvl2U1GaPtGanqkL7upQOZTY,1132
|
|
65
64
|
dodal/devices/undulator.py,sha256=kn84MQpuBHtQj7H7HeBoAYKXu5buGKvTgs3tf2gdEdw,2074
|
|
66
65
|
dodal/devices/undulator_dcm.py,sha256=TC9fO55r1YIG_88PPbGGtzfjcRJcaoC2ny51JiDOEX4,5199
|
|
@@ -77,11 +76,12 @@ dodal/devices/detector/__init__.py,sha256=XEwjopgTtBq93RRuFthVVVI9DT1jUvpOJzWOHa
|
|
|
77
76
|
dodal/devices/detector/det_dim_constants.py,sha256=MZ4w2nsTKzj4eN7yGsSs1pqKWIuU4vc6UzcSll02uWg,2305
|
|
78
77
|
dodal/devices/detector/det_dist_to_beam_converter.py,sha256=f6JFp-eEB2v8NzZg27UrN0VDP5CMjRnaPU6BTA7_n_s,1937
|
|
79
78
|
dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32HdrKc2kftHfKQA,3253
|
|
80
|
-
dodal/devices/detector/detector.py,sha256=
|
|
79
|
+
dodal/devices/detector/detector.py,sha256=arP27DbrgOjYZhE6Ibp9kDBglfmqZpPBk53S5ItsrvE,4756
|
|
81
80
|
dodal/devices/detector/detector_motion.py,sha256=REREva2kyPcIzOZmahN9rT0jDSuUbV0qUDl4IcBnutA,1221
|
|
82
81
|
dodal/devices/i03/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
82
|
dodal/devices/i04/transfocator.py,sha256=uieByXIj0JRbmvMB_om5NOAEbEJkzfkCD24bl2aEo1g,3154
|
|
84
83
|
dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
dodal/devices/i22/dcm.py,sha256=ZJL-K7GdJxyH-0wKsV0psX8iaFYJINpqBZljfAyuLbs,6046
|
|
85
85
|
dodal/devices/i22/fswitch.py,sha256=AdYtnkCBuhivyJGZqelg_7sjB2pHN7vl1JTtlO4vHo4,3061
|
|
86
86
|
dodal/devices/i23/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
87
|
dodal/devices/i23/gonio.py,sha256=cxqD2Kd578c4-K4h2sHdJjoap2gPGC46Qr4SPudHLTs,864
|
|
@@ -97,7 +97,7 @@ dodal/devices/oav/oav_calculations.py,sha256=wt71vFcyQrr98FvX8oyUM2n5vmKi3K7PyOT
|
|
|
97
97
|
dodal/devices/oav/oav_detector.py,sha256=JtzRdFQVXUdVK4Qyd9knDhsfkK6tsXoD_rIWDpLdpD4,3654
|
|
98
98
|
dodal/devices/oav/oav_errors.py,sha256=cc4mGnaTiAc5WIlOt_BIYOc7CRSkrCdnBaavfAJ0pXY,754
|
|
99
99
|
dodal/devices/oav/oav_parameters.py,sha256=4XybkhKeG7IEjPRfx0PVM9KNenuyN0rAGWBZG7H3zvQ,7941
|
|
100
|
-
dodal/devices/oav/utils.py,sha256=
|
|
100
|
+
dodal/devices/oav/utils.py,sha256=BkTk0aTqqhIHCZInhcUAYjCRPxumPOlTg9m21skncTc,3018
|
|
101
101
|
dodal/devices/oav/pin_image_recognition/__init__.py,sha256=qEX3BRnrcP1BLZD-f_smHiMMPLJPkWQZQbIWTbW25JA,6499
|
|
102
102
|
dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
|
|
103
103
|
dodal/devices/oav/pin_image_recognition/utils.py,sha256=-7-Zs-331UVTq_AZrfdF-zwZdmMn7eitTkBSqnBrxnk,8620
|
|
@@ -113,9 +113,10 @@ dodal/devices/zocalo/zocalo_interaction.py,sha256=B6TBTDwUlluksLTwC4TiEEgfFzWLOm
|
|
|
113
113
|
dodal/devices/zocalo/zocalo_results.py,sha256=U4Vk4OF-eL8w0BR-fbw3k4jyRo6G3Ywaf8NMAkjr4Hs,9658
|
|
114
114
|
dodal/parameters/experiment_parameter_base.py,sha256=O7JamfuJ5cYHkPf9tsHJPqn-OMHTAGouigvM1cDFehE,313
|
|
115
115
|
dodal/plans/check_topup.py,sha256=VOkHak88_r-pdTsSnwAJnbvlK2_UhKnO5I36pJmWKvQ,2985
|
|
116
|
-
|
|
117
|
-
dls_dodal-1.
|
|
118
|
-
dls_dodal-1.
|
|
119
|
-
dls_dodal-1.
|
|
120
|
-
dls_dodal-1.
|
|
121
|
-
dls_dodal-1.
|
|
116
|
+
dodal/plans/data_session_metadata.py,sha256=QNx9rb1EfGBHb21eFekIi7KjNhC0PL-SVKBCggDuNeg,1650
|
|
117
|
+
dls_dodal-1.28.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
|
118
|
+
dls_dodal-1.28.0.dist-info/METADATA,sha256=1EiYYnvAHwt0rilBYosSJaPDpF34SdatvnYUuqud9lE,16837
|
|
119
|
+
dls_dodal-1.28.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
120
|
+
dls_dodal-1.28.0.dist-info/entry_points.txt,sha256=wpzz9FsTiYxI8OBwLKX9V9ResLwThBSmtRMcPwII0FA,46
|
|
121
|
+
dls_dodal-1.28.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
|
|
122
|
+
dls_dodal-1.28.0.dist-info/RECORD,,
|
dodal/_version.py
CHANGED
dodal/beamlines/i03.py
CHANGED
|
@@ -14,17 +14,18 @@ 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
|
|
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
|
+
from dodal.devices.motors import XYZPositioner
|
|
20
21
|
from dodal.devices.oav.oav_detector import OAV, OAVConfigParams
|
|
21
22
|
from dodal.devices.oav.pin_image_recognition import PinTipDetection
|
|
22
|
-
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
26
|
from dodal.devices.smargon import Smargon
|
|
27
27
|
from dodal.devices.synchrotron import Synchrotron
|
|
28
|
+
from dodal.devices.thawer import Thawer
|
|
28
29
|
from dodal.devices.undulator import Undulator
|
|
29
30
|
from dodal.devices.undulator_dcm import UndulatorDCM
|
|
30
31
|
from dodal.devices.webcam import Webcam
|
|
@@ -199,15 +200,15 @@ def eiger(
|
|
|
199
200
|
)
|
|
200
201
|
|
|
201
202
|
|
|
202
|
-
def
|
|
203
|
+
def zebra_fast_grid_scan(
|
|
203
204
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
204
|
-
) ->
|
|
205
|
-
"""Get the i03
|
|
205
|
+
) -> ZebraFastGridScan:
|
|
206
|
+
"""Get the i03 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
|
|
206
207
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
207
208
|
"""
|
|
208
209
|
return device_instantiation(
|
|
209
|
-
device_factory=
|
|
210
|
-
name="
|
|
210
|
+
device_factory=ZebraFastGridScan,
|
|
211
|
+
name="zebra_fast_grid_scan",
|
|
211
212
|
prefix="-MO-SGON-01:",
|
|
212
213
|
wait=wait_for_connection,
|
|
213
214
|
fake=fake_with_ophyd_sim,
|
|
@@ -219,12 +220,12 @@ def panda_fast_grid_scan(
|
|
|
219
220
|
) -> PandAFastGridScan:
|
|
220
221
|
"""Get the i03 panda_fast_grid_scan device, instantiate it if it hasn't already been.
|
|
221
222
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
222
|
-
This is used instead of the
|
|
223
|
+
This is used instead of the zebra_fast_grid_scan device when using the PandA.
|
|
223
224
|
"""
|
|
224
225
|
return device_instantiation(
|
|
225
226
|
device_factory=PandAFastGridScan,
|
|
226
227
|
name="panda_fast_grid_scan",
|
|
227
|
-
prefix="-MO-SGON-01:
|
|
228
|
+
prefix="-MO-SGON-01:",
|
|
228
229
|
wait=wait_for_connection,
|
|
229
230
|
fake=fake_with_ophyd_sim,
|
|
230
231
|
)
|
|
@@ -480,3 +481,33 @@ def webcam(
|
|
|
480
481
|
fake_with_ophyd_sim,
|
|
481
482
|
url="http://i03-webcam1/axis-cgi/jpg/image.cgi",
|
|
482
483
|
)
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def thawer(
|
|
487
|
+
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
488
|
+
) -> Thawer:
|
|
489
|
+
"""Get the i03 thawer, instantiate it if it hasn't already been.
|
|
490
|
+
If this is called when already instantiated in i03, it will return the existing object.
|
|
491
|
+
"""
|
|
492
|
+
return device_instantiation(
|
|
493
|
+
Thawer,
|
|
494
|
+
"thawer",
|
|
495
|
+
"-EA-THAW-01",
|
|
496
|
+
wait_for_connection,
|
|
497
|
+
fake_with_ophyd_sim,
|
|
498
|
+
)
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
def lower_gonio_positioner(
|
|
502
|
+
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
503
|
+
) -> XYZPositioner:
|
|
504
|
+
"""Get the i03 lower gonio device, instantiate it if it hasn't already been.
|
|
505
|
+
If this is called when already instantiated in i03, it will return the existing object.
|
|
506
|
+
"""
|
|
507
|
+
return device_instantiation(
|
|
508
|
+
XYZPositioner,
|
|
509
|
+
"lower_gonio_positioner",
|
|
510
|
+
"-MO-GONP-01:",
|
|
511
|
+
wait_for_connection,
|
|
512
|
+
fake_with_ophyd_sim,
|
|
513
|
+
)
|
dodal/beamlines/i04.py
CHANGED
|
@@ -8,15 +8,17 @@ 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
|
|
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
19
|
from dodal.devices.smargon import Smargon
|
|
19
20
|
from dodal.devices.synchrotron import Synchrotron
|
|
21
|
+
from dodal.devices.thawer import Thawer
|
|
20
22
|
from dodal.devices.undulator import Undulator
|
|
21
23
|
from dodal.devices.xbpm_feedback import XBPMFeedbackI04
|
|
22
24
|
from dodal.devices.zebra import Zebra
|
|
@@ -258,15 +260,15 @@ def eiger(
|
|
|
258
260
|
)
|
|
259
261
|
|
|
260
262
|
|
|
261
|
-
def
|
|
263
|
+
def zebra_fast_grid_scan(
|
|
262
264
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
263
|
-
) ->
|
|
264
|
-
"""Get the i04
|
|
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=
|
|
269
|
-
name="
|
|
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/i22.py
CHANGED
|
@@ -12,9 +12,11 @@ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beam
|
|
|
12
12
|
from dodal.common.beamlines.device_helpers import numbered_slits
|
|
13
13
|
from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitDirectoryProvider
|
|
14
14
|
from dodal.devices.focusing_mirror import FocusingMirror
|
|
15
|
+
from dodal.devices.i22.dcm import CrystalMetadata, DoubleCrystalMonochromator
|
|
15
16
|
from dodal.devices.i22.fswitch import FSwitch
|
|
16
17
|
from dodal.devices.linkam3 import Linkam3
|
|
17
18
|
from dodal.devices.slits import Slits
|
|
19
|
+
from dodal.devices.synchrotron import Synchrotron
|
|
18
20
|
from dodal.devices.tetramm import TetrammDetector
|
|
19
21
|
from dodal.devices.undulator import Undulator
|
|
20
22
|
from dodal.log import set_beamline as set_log_beamline
|
|
@@ -53,6 +55,18 @@ def saxs(
|
|
|
53
55
|
)
|
|
54
56
|
|
|
55
57
|
|
|
58
|
+
def synchrotron(
|
|
59
|
+
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
60
|
+
) -> Synchrotron:
|
|
61
|
+
return device_instantiation(
|
|
62
|
+
Synchrotron,
|
|
63
|
+
"synchrotron",
|
|
64
|
+
"",
|
|
65
|
+
wait_for_connection,
|
|
66
|
+
fake_with_ophyd_sim,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
56
70
|
def waxs(
|
|
57
71
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
58
72
|
) -> PilatusDetector:
|
|
@@ -122,6 +136,34 @@ def hfm(
|
|
|
122
136
|
)
|
|
123
137
|
|
|
124
138
|
|
|
139
|
+
def dcm(
|
|
140
|
+
wait_for_connection: bool = True,
|
|
141
|
+
fake_with_ophyd_sim: bool = False,
|
|
142
|
+
) -> DoubleCrystalMonochromator:
|
|
143
|
+
return device_instantiation(
|
|
144
|
+
DoubleCrystalMonochromator,
|
|
145
|
+
"dcm",
|
|
146
|
+
"",
|
|
147
|
+
wait_for_connection,
|
|
148
|
+
fake_with_ophyd_sim,
|
|
149
|
+
bl_prefix=False,
|
|
150
|
+
motion_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-MO-DCM-01:",
|
|
151
|
+
temperature_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-DI-DCM-01:",
|
|
152
|
+
crystal_1_metadata=CrystalMetadata(
|
|
153
|
+
usage="Bragg",
|
|
154
|
+
type="silicon",
|
|
155
|
+
reflection=(1, 1, 1),
|
|
156
|
+
d_spacing=3.13475,
|
|
157
|
+
),
|
|
158
|
+
crystal_2_metadata=CrystalMetadata(
|
|
159
|
+
usage="Bragg",
|
|
160
|
+
type="silicon",
|
|
161
|
+
reflection=(1, 1, 1),
|
|
162
|
+
d_spacing=3.13475,
|
|
163
|
+
),
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
|
|
125
167
|
def undulator(
|
|
126
168
|
wait_for_connection: bool = True,
|
|
127
169
|
fake_with_ophyd_sim: bool = False,
|
|
@@ -283,6 +325,7 @@ def panda4(
|
|
|
283
325
|
)
|
|
284
326
|
|
|
285
327
|
|
|
328
|
+
@skip_device
|
|
286
329
|
def oav(
|
|
287
330
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
288
331
|
) -> AravisDetector:
|
dodal/beamlines/i24.py
CHANGED
|
@@ -11,7 +11,9 @@ from dodal.devices.zebra import Zebra
|
|
|
11
11
|
from dodal.log import set_beamline as set_log_beamline
|
|
12
12
|
from dodal.utils import get_beamline_name, skip_device
|
|
13
13
|
|
|
14
|
-
ZOOM_PARAMS_FILE =
|
|
14
|
+
ZOOM_PARAMS_FILE = (
|
|
15
|
+
"/dls_sw/i24/software/gda_versions/gda_9_34/config/xml/jCameraManZoomLevels.xml"
|
|
16
|
+
)
|
|
15
17
|
DISPLAY_CONFIG = "/dls_sw/i24/software/gda_versions/var/display.configuration"
|
|
16
18
|
|
|
17
19
|
BL = get_beamline_name("s24")
|
dodal/beamlines/p38.py
CHANGED
|
@@ -12,6 +12,7 @@ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beam
|
|
|
12
12
|
from dodal.common.beamlines.device_helpers import numbered_slits
|
|
13
13
|
from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitDirectoryProvider
|
|
14
14
|
from dodal.devices.focusing_mirror import FocusingMirror
|
|
15
|
+
from dodal.devices.i22.dcm import CrystalMetadata, DoubleCrystalMonochromator
|
|
15
16
|
from dodal.devices.i22.fswitch import FSwitch
|
|
16
17
|
from dodal.devices.linkam3 import Linkam3
|
|
17
18
|
from dodal.devices.slits import Slits
|
|
@@ -214,6 +215,34 @@ def hfm(
|
|
|
214
215
|
)
|
|
215
216
|
|
|
216
217
|
|
|
218
|
+
def dcm(
|
|
219
|
+
wait_for_connection: bool = True,
|
|
220
|
+
fake_with_ophyd_sim: bool = True,
|
|
221
|
+
) -> DoubleCrystalMonochromator:
|
|
222
|
+
return device_instantiation(
|
|
223
|
+
DoubleCrystalMonochromator,
|
|
224
|
+
"dcm",
|
|
225
|
+
"",
|
|
226
|
+
wait_for_connection,
|
|
227
|
+
fake_with_ophyd_sim,
|
|
228
|
+
bl_prefix=False,
|
|
229
|
+
motion_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-MO-DCM-01:",
|
|
230
|
+
temperature_prefix=f"{BeamlinePrefix(BL).beamline_prefix}-DI-DCM-01:",
|
|
231
|
+
crystal_1_metadata=CrystalMetadata(
|
|
232
|
+
usage="Bragg",
|
|
233
|
+
type="silicon",
|
|
234
|
+
reflection=(1, 1, 1),
|
|
235
|
+
d_spacing=3.13475,
|
|
236
|
+
),
|
|
237
|
+
crystal_2_metadata=CrystalMetadata(
|
|
238
|
+
usage="Bragg",
|
|
239
|
+
type="silicon",
|
|
240
|
+
reflection=(1, 1, 1),
|
|
241
|
+
d_spacing=3.13475,
|
|
242
|
+
),
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
|
|
217
246
|
def undulator(
|
|
218
247
|
wait_for_connection: bool = True,
|
|
219
248
|
fake_with_ophyd_sim: bool = True,
|
dodal/common/coordination.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import uuid
|
|
2
|
+
from typing import Any
|
|
2
3
|
|
|
3
4
|
from dodal.common.types import Group
|
|
4
5
|
|
|
@@ -16,19 +17,20 @@ def group_uuid(name: str) -> Group:
|
|
|
16
17
|
return f"{name}-{str(uuid.uuid4())[:6]}"
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
def inject(name: str): # type: ignore
|
|
20
|
+
def inject(name: str) -> Any: # type: ignore
|
|
20
21
|
"""
|
|
21
|
-
Function to mark a
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
e.g. For a 1-dimensional scan, that is usually performed on a
|
|
27
|
-
|
|
22
|
+
Function to mark a defaulted argument of a plan as a reference to a device stored
|
|
23
|
+
in another context and not available to be referenced directly.
|
|
24
|
+
Bypasses type checking, returning x as Any and therefore valid as a default
|
|
25
|
+
argument, leaving handling to the context from which the plan is called.
|
|
26
|
+
Assumes that device.name is unique.
|
|
27
|
+
e.g. For a 1-dimensional scan, that is usually performed on a Movable with
|
|
28
|
+
name "stage_x"
|
|
29
|
+
|
|
28
30
|
def scan(x: Movable = inject("stage_x"), start: float = 0.0 ...)
|
|
29
31
|
|
|
30
32
|
Args:
|
|
31
|
-
name (str): Name of a
|
|
33
|
+
name (str): Name of a Device to be fetched from an external context
|
|
32
34
|
|
|
33
35
|
Returns:
|
|
34
36
|
Any: name but without typing checking, valid as any default type
|
dodal/common/visit.py
CHANGED
|
@@ -3,14 +3,10 @@ from pathlib import Path
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
5
|
from aiohttp import ClientSession
|
|
6
|
-
from bluesky import plan_stubs as bps
|
|
7
|
-
from bluesky import preprocessors as bpp
|
|
8
|
-
from bluesky.utils import make_decorator
|
|
9
6
|
from ophyd_async.core import DirectoryInfo
|
|
10
7
|
from pydantic import BaseModel
|
|
11
8
|
|
|
12
|
-
from dodal.common.
|
|
13
|
-
from dodal.common.types import MsgGenerator, UpdatingDirectoryProvider
|
|
9
|
+
from dodal.common.types import UpdatingDirectoryProvider
|
|
14
10
|
from dodal.log import LOGGER
|
|
15
11
|
|
|
16
12
|
"""
|
|
@@ -156,41 +152,3 @@ class StaticVisitDirectoryProvider(UpdatingDirectoryProvider):
|
|
|
156
152
|
raise ValueError(
|
|
157
153
|
"No current collection, update() needs to be called at least once"
|
|
158
154
|
)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
DATA_SESSION = "data_session"
|
|
162
|
-
DATA_GROUPS = "data_groups"
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def attach_metadata(
|
|
166
|
-
plan: MsgGenerator, provider: UpdatingDirectoryProvider | None
|
|
167
|
-
) -> MsgGenerator:
|
|
168
|
-
"""
|
|
169
|
-
Attach data session metadata to the runs within a plan and make it correlate
|
|
170
|
-
with an ophyd-async DirectoryProvider.
|
|
171
|
-
|
|
172
|
-
This updates the directory provider (which in turn makes a call to to a service
|
|
173
|
-
to figure out which scan number we are using for such a scan), and ensures the
|
|
174
|
-
start document contains the correct data session.
|
|
175
|
-
|
|
176
|
-
Args:
|
|
177
|
-
plan: The plan to preprocess
|
|
178
|
-
provider: The directory provider that participating detectors are aware of.
|
|
179
|
-
|
|
180
|
-
Returns:
|
|
181
|
-
MsgGenerator: A plan
|
|
182
|
-
|
|
183
|
-
Yields:
|
|
184
|
-
Iterator[Msg]: Plan messages
|
|
185
|
-
"""
|
|
186
|
-
if provider is None:
|
|
187
|
-
provider = beamline_utils.get_directory_provider()
|
|
188
|
-
yield from bps.wait_for([provider.update])
|
|
189
|
-
directory_info: DirectoryInfo = provider()
|
|
190
|
-
# https://github.com/DiamondLightSource/dodal/issues/452
|
|
191
|
-
# As part of 452, write each dataCollection into their own folder, then can use resource_dir directly
|
|
192
|
-
data_session = directory_info.prefix.removesuffix("-")
|
|
193
|
-
yield from bpp.inject_md_wrapper(plan, md={DATA_SESSION: data_session})
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
attach_metadata_decorator = make_decorator(attach_metadata)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from collections import OrderedDict, namedtuple
|
|
3
3
|
from dataclasses import asdict, dataclass
|
|
4
|
+
from enum import Enum
|
|
4
5
|
|
|
5
6
|
from bluesky.protocols import Movable, Reading
|
|
6
7
|
from ophyd_async.core import AsyncStatus, SignalR, StandardReadable
|
|
@@ -48,8 +49,22 @@ class SingleAperturePosition:
|
|
|
48
49
|
)
|
|
49
50
|
|
|
50
51
|
|
|
52
|
+
# Use StrEnum once we stop python 3.10 support
|
|
53
|
+
class AperturePositionGDANames(str, Enum):
|
|
54
|
+
LARGE_APERTURE = "LARGE_APERTURE"
|
|
55
|
+
MEDIUM_APERTURE = "MEDIUM_APERTURE"
|
|
56
|
+
SMALL_APERTURE = "SMALL_APERTURE"
|
|
57
|
+
ROBOT_LOAD = "ROBOT_LOAD"
|
|
58
|
+
|
|
59
|
+
def __str__(self):
|
|
60
|
+
return str(self.value)
|
|
61
|
+
|
|
62
|
+
|
|
51
63
|
def position_from_params(
|
|
52
|
-
name: str,
|
|
64
|
+
name: str,
|
|
65
|
+
GDA_name: AperturePositionGDANames,
|
|
66
|
+
radius_microns: float | None,
|
|
67
|
+
params: dict,
|
|
53
68
|
) -> SingleAperturePosition:
|
|
54
69
|
return SingleAperturePosition(
|
|
55
70
|
name,
|
|
@@ -77,7 +92,8 @@ def tolerances_from_params(params: dict) -> ApertureScatterguardTolerances:
|
|
|
77
92
|
|
|
78
93
|
@dataclass
|
|
79
94
|
class AperturePositions:
|
|
80
|
-
"""Holds the motor positions needed to select a particular aperture size.
|
|
95
|
+
"""Holds the motor positions needed to select a particular aperture size. This class should be instantiated with definitions for its sizes
|
|
96
|
+
using from_gda_beamline_params"""
|
|
81
97
|
|
|
82
98
|
LARGE: SingleAperturePosition
|
|
83
99
|
MEDIUM: SingleAperturePosition
|
|
@@ -93,13 +109,32 @@ class AperturePositions:
|
|
|
93
109
|
@classmethod
|
|
94
110
|
def from_gda_beamline_params(cls, params):
|
|
95
111
|
return cls(
|
|
96
|
-
LARGE=position_from_params(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
112
|
+
LARGE=position_from_params(
|
|
113
|
+
"Large", AperturePositionGDANames.LARGE_APERTURE, 100, params
|
|
114
|
+
),
|
|
115
|
+
MEDIUM=position_from_params(
|
|
116
|
+
"Medium", AperturePositionGDANames.MEDIUM_APERTURE, 50, params
|
|
117
|
+
),
|
|
118
|
+
SMALL=position_from_params(
|
|
119
|
+
"Small", AperturePositionGDANames.SMALL_APERTURE, 20, params
|
|
120
|
+
),
|
|
121
|
+
ROBOT_LOAD=position_from_params(
|
|
122
|
+
"Robot load", AperturePositionGDANames.ROBOT_LOAD, None, params
|
|
123
|
+
),
|
|
100
124
|
tolerances=tolerances_from_params(params),
|
|
101
125
|
)
|
|
102
126
|
|
|
127
|
+
def get_position_from_gda_aperture_name(
|
|
128
|
+
self, gda_aperture_name: AperturePositionGDANames
|
|
129
|
+
) -> SingleAperturePosition:
|
|
130
|
+
apertures = [ap for ap in self.as_list() if ap.GDA_name == gda_aperture_name]
|
|
131
|
+
if not apertures:
|
|
132
|
+
raise ValueError(
|
|
133
|
+
f"Tried to convert unknown aperture name {gda_aperture_name} to a SingleAperturePosition"
|
|
134
|
+
)
|
|
135
|
+
else:
|
|
136
|
+
return apertures[0]
|
|
137
|
+
|
|
103
138
|
def as_list(self) -> list[SingleAperturePosition]:
|
|
104
139
|
return [
|
|
105
140
|
self.LARGE,
|
dodal/devices/backlight.py
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
|
-
from
|
|
1
|
+
from enum import Enum
|
|
2
2
|
|
|
3
|
+
from ophyd_async.core import AsyncStatus, StandardReadable
|
|
4
|
+
from ophyd_async.epics.signal import epics_signal_rw
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BacklightPower(str, Enum):
|
|
8
|
+
ON = "On"
|
|
9
|
+
OFF = "Off"
|
|
3
10
|
|
|
4
|
-
class Backlight(Device):
|
|
5
|
-
"""Simple device to trigger the pneumatic in/out."""
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
IN =
|
|
12
|
+
class BacklightPosition(str, Enum):
|
|
13
|
+
IN = "In"
|
|
14
|
+
OUT = "Out"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Backlight(StandardReadable):
|
|
18
|
+
"""Simple device to trigger the pneumatic in/out."""
|
|
9
19
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
20
|
+
def __init__(self, prefix: str, name: str = "") -> None:
|
|
21
|
+
with self.add_children_as_readables():
|
|
22
|
+
self.power = epics_signal_rw(BacklightPower, prefix + "-EA-BLIT-01:TOGGLE")
|
|
23
|
+
self.position = epics_signal_rw(
|
|
24
|
+
BacklightPosition, prefix + "-EA-BL-01:CTRL"
|
|
25
|
+
)
|
|
26
|
+
super().__init__(name)
|
|
13
27
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
@AsyncStatus.wrap
|
|
29
|
+
async def set(self, position: BacklightPosition):
|
|
30
|
+
"""This setter will turn the backlight on when we move it in to the beam and off
|
|
31
|
+
when we move it out."""
|
|
32
|
+
await self.position.set(position)
|
|
33
|
+
if position == BacklightPosition.OUT:
|
|
34
|
+
await self.power.set(BacklightPower.OFF)
|
|
18
35
|
else:
|
|
19
|
-
|
|
20
|
-
return status
|
|
36
|
+
await self.power.set(BacklightPower.ON)
|