dls-dodal 1.60.0__py3-none-any.whl → 1.62.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.60.0.dist-info → dls_dodal-1.62.0.dist-info}/METADATA +1 -1
- {dls_dodal-1.60.0.dist-info → dls_dodal-1.62.0.dist-info}/RECORD +45 -30
- dodal/_version.py +2 -2
- dodal/beamlines/i04.py +1 -1
- dodal/beamlines/i19_2.py +10 -0
- dodal/devices/apple2_undulator.py +85 -52
- dodal/devices/areadetector/__init__.py +0 -0
- dodal/devices/areadetector/plugins/__init__.py +0 -0
- dodal/devices/attenuator/__init__.py +0 -0
- dodal/devices/controllers.py +8 -6
- dodal/devices/electron_analyser/abstract/__init__.py +2 -2
- dodal/devices/electron_analyser/abstract/base_detector.py +13 -26
- dodal/devices/electron_analyser/abstract/base_driver_io.py +5 -4
- dodal/devices/electron_analyser/abstract/base_region.py +28 -13
- dodal/devices/electron_analyser/detector.py +19 -31
- dodal/devices/electron_analyser/specs/driver_io.py +0 -1
- dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -1
- dodal/devices/fast_grid_scan.py +111 -32
- dodal/devices/fast_shutter.py +57 -0
- dodal/devices/i02_1/fast_grid_scan.py +1 -1
- dodal/devices/i04/murko_results.py +24 -12
- dodal/devices/i10/i10_apple2.py +15 -15
- dodal/devices/i10/rasor/__init__.py +0 -0
- dodal/devices/i11/__init__.py +0 -0
- dodal/devices/i15/__init__.py +0 -0
- dodal/devices/i15/dcm.py +10 -9
- dodal/devices/i15/focussing_mirror.py +4 -20
- dodal/devices/i15/jack.py +2 -10
- dodal/devices/i15/laue.py +1 -5
- dodal/devices/i15/multilayer_mirror.py +1 -5
- dodal/devices/i15/rail.py +1 -5
- dodal/devices/i18/__init__.py +0 -0
- dodal/devices/i19/mapt_configuration.py +38 -0
- dodal/devices/i19/pin_col_stages.py +170 -0
- dodal/devices/i22/__init__.py +0 -0
- dodal/devices/i24/commissioning_jungfrau.py +9 -1
- dodal/devices/mx_phase1/__init__.py +0 -0
- dodal/devices/oav/snapshots/__init__.py +0 -0
- dodal/devices/xspress3/__init__.py +0 -0
- dodal/parameters/__init__.py +0 -0
- dodal/plans/configure_arm_trigger_and_disarm_detector.py +27 -5
- {dls_dodal-1.60.0.dist-info → dls_dodal-1.62.0.dist-info}/WHEEL +0 -0
- {dls_dodal-1.60.0.dist-info → dls_dodal-1.62.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.60.0.dist-info → dls_dodal-1.62.0.dist-info}/licenses/LICENSE +0 -0
- {dls_dodal-1.60.0.dist-info → dls_dodal-1.62.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.62.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>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
dls_dodal-1.
|
|
1
|
+
dls_dodal-1.62.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=5VUVRHNcXnR6NHNHVw0jy5canKWEf1jsJRKy9oQveHA,706
|
|
5
5
|
dodal/cli.py,sha256=yi8dXOp0hqzlg4ZZXCRGU-LpDa_ydaropDjyREWbZ5Y,4152
|
|
6
6
|
dodal/log.py,sha256=Rt5O3hFZfMnJvQueZvgagQuXnPqHrFxhponOvVkpfrk,9871
|
|
7
7
|
dodal/utils.py,sha256=abGitd4FLpLnmckF7lUqOKYUL88r5Ex_NGSVgO4gOf4,19305
|
|
@@ -20,7 +20,7 @@ dodal/beamlines/b18.py,sha256=ryxrGtcCdwoFgZ8ljWYgr1g9gKvoA7nxkARVxl1IE78,1189
|
|
|
20
20
|
dodal/beamlines/b21.py,sha256=QGn0b88Od5-PCbleKwR6CSOleAY0vriybxcWlc58NS0,3851
|
|
21
21
|
dodal/beamlines/i02_1.py,sha256=SwRm9v1U6CiT0fwLbSTECbJ6OF1BPEx4TJ0cEReuGZA,4017
|
|
22
22
|
dodal/beamlines/i03.py,sha256=S2mJikFdZiV0e3VLNwHp38OCk_rL9wnWD009a7tH5kE,16203
|
|
23
|
-
dodal/beamlines/i04.py,sha256=
|
|
23
|
+
dodal/beamlines/i04.py,sha256=QyprATHFxnw_cP2gak1i2_ywj-i26vrGlvOYM6RmyTY,13758
|
|
24
24
|
dodal/beamlines/i05.py,sha256=v4QKd8-neh4Og205oovm6NDRnAU6Oktu1WrxalXsI40,656
|
|
25
25
|
dodal/beamlines/i05_1.py,sha256=R6JFFg8Bj-Izw355mx3mOd4IDvJb5ipB4p7_S0I_4Z0,670
|
|
26
26
|
dodal/beamlines/i09.py,sha256=E7PgMfJAixwvxd5bKzqX8ifVNExbzVMUYFN22TTTAFU,1594
|
|
@@ -35,7 +35,7 @@ dodal/beamlines/i15_1.py,sha256=TomeTLsYSvL5en8GPvI8driQa5nMObrB5DrMKckHig8,3898
|
|
|
35
35
|
dodal/beamlines/i17.py,sha256=Nickt8CKQ9JcQ1D_ulNICUT4jjLF1Aib7D9jblSnzA4,987
|
|
36
36
|
dodal/beamlines/i18.py,sha256=FuU8G-q1piu6BRou-Shj3BQEbNtsF7CUsSIqqkvCKZc,3615
|
|
37
37
|
dodal/beamlines/i19_1.py,sha256=xAI9B3fyUKtoO-tnAF7wWQelrXQ6QrYNgEyncHqVzn4,3057
|
|
38
|
-
dodal/beamlines/i19_2.py,sha256=
|
|
38
|
+
dodal/beamlines/i19_2.py,sha256=gY4YBYW_uble5rr74fxoW7490UXJdsFVDWALT_Zdp3Y,3594
|
|
39
39
|
dodal/beamlines/i19_optics.py,sha256=8hdlDAAMgFrhcXrp5xCPZtLUlrDUEC9VwKnnuUAMbbU,1150
|
|
40
40
|
dodal/beamlines/i20_1.py,sha256=Zsr1lsH7ySbOgK7RhMVMWzNWZAV-fuYW0iAjSEJZicY,2625
|
|
41
41
|
dodal/beamlines/i21.py,sha256=5v6iiTlY4kWlWvQ_uNidJSotvkdNF3qdjR49l7sIYPc,728
|
|
@@ -68,19 +68,20 @@ dodal/common/beamlines/device_helpers.py,sha256=8sasAIFRDwo6ElHqLrXnpj_v7xcEg-29
|
|
|
68
68
|
dodal/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
69
|
dodal/devices/aperture.py,sha256=S7AoIoQg_kFxaQk7HUMijbm1kYkOEi2csbdj76kp1ys,427
|
|
70
70
|
dodal/devices/aperturescatterguard.py,sha256=FH2oru3DU-I6BwOJOVEgHdFplLKIIknxtEBUBAXZ_WA,13946
|
|
71
|
-
dodal/devices/apple2_undulator.py,sha256
|
|
71
|
+
dodal/devices/apple2_undulator.py,sha256=LjhU4ILkSrhnccHOwOrOT9HenowKmI0NFHLfpQk14lY,23035
|
|
72
72
|
dodal/devices/backlight.py,sha256=y40kR6N3qSFVLRaGU8CjJJpwv_hq2QALf_85fLQqras,1415
|
|
73
73
|
dodal/devices/baton.py,sha256=315I_0V73_DYYVT0PBs0luVy4CMqdPo0kLvHBi12MIU,606
|
|
74
74
|
dodal/devices/bimorph_mirror.py,sha256=OGe6aCczG0gVco4OvIRLJVxn2kw5F2QG1e06uqhFLTw,4609
|
|
75
75
|
dodal/devices/collimation_table.py,sha256=64HunSPJH-L2gZdfIj_RYdOlOuwRFEfMHfLHzu4BAKI,1681
|
|
76
76
|
dodal/devices/common_dcm.py,sha256=8QSRE6Z10RQjfL3g4JZhyHRNI_aCKxWlzKSsDgiJHhE,3049
|
|
77
|
-
dodal/devices/controllers.py,sha256=
|
|
77
|
+
dodal/devices/controllers.py,sha256=W_Ras1c6xLjcOMKPSHN8Z1eCUCH-ktaah2hzQXyuFLk,652
|
|
78
78
|
dodal/devices/cryostream.py,sha256=2FxCGioEZNMHItsGm_rsnkRnHjwMUIwRMAX_x8odKIw,4678
|
|
79
79
|
dodal/devices/diamond_filter.py,sha256=hySd7HnLdplpPNvBrLddLjO_3LqgD8-99Zr__Sy_GbI,689
|
|
80
80
|
dodal/devices/eiger.py,sha256=ZKaRXF-YnYWuMW94BIg-gmdKW7JKmtMUvehF3S5XaLY,16670
|
|
81
81
|
dodal/devices/eiger_odin.py,sha256=1JoqPppTp99IZCiFOXJZB3h62xXRYKZINxTYXdLnT8c,7480
|
|
82
82
|
dodal/devices/eurotherm.py,sha256=rdLldmWYP1PZBckoya6svPy1mDxHYaa1IfMleMPGzD4,3832
|
|
83
|
-
dodal/devices/fast_grid_scan.py,sha256=
|
|
83
|
+
dodal/devices/fast_grid_scan.py,sha256=2k2Ub-ywwfwCfmlofjnhkumXk07bidDfF86DPN7hcrA,17365
|
|
84
|
+
dodal/devices/fast_shutter.py,sha256=kgYafhBURRTN6edrhv0xKggxkSEWGXg2rhWz_ewLZhc,1837
|
|
84
85
|
dodal/devices/fluorescence_detector_motion.py,sha256=hJ1M9Zs6Dlw8DDL9APh7yVePlS4tU2hnlySd16hqfwE,346
|
|
85
86
|
dodal/devices/flux.py,sha256=1CDsq9yU2-ho8MfYBl50Tl9ABZwpUBHnV486PQXKNoQ,462
|
|
86
87
|
dodal/devices/focusing_mirror.py,sha256=2UWVrY6bs6_0i-h6JJ_LAUZPX_FgMzIx04JqZafdtYU,7464
|
|
@@ -111,8 +112,11 @@ dodal/devices/xbpm_feedback.py,sha256=HKLY3k52FPe2G-EAg8ir2LSdeUuGvhRD73ibDZ4mjH
|
|
|
111
112
|
dodal/devices/aithre_lasershaping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
113
|
dodal/devices/aithre_lasershaping/goniometer.py,sha256=-2ewYMcdzB1DqP9sMpr4L1i4KeTCrGAJfngAt9-eFWw,1005
|
|
113
114
|
dodal/devices/aithre_lasershaping/laser_robot.py,sha256=vy-I1ASYflFYIUYePhT2l3l7g2iekrIFzLxA0GLmKY8,717
|
|
115
|
+
dodal/devices/areadetector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
116
|
dodal/devices/areadetector/plugins/CAM.py,sha256=sZzJm5Ez3eWfXZi_EB67wluhZmMQm1UyOc2bJFfzd1U,964
|
|
115
117
|
dodal/devices/areadetector/plugins/MJPG.py,sha256=QTsxCoWbofNpLMGPoOR2hWoM33KyntuLepbF0YmX0KE,3031
|
|
118
|
+
dodal/devices/areadetector/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
+
dodal/devices/attenuator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
120
|
dodal/devices/attenuator/attenuator.py,sha256=-rJYY_bHCDl8NVn3yYPytYIANiOPsz0f-3U1zBsT5pE,6246
|
|
117
121
|
dodal/devices/attenuator/filter.py,sha256=xb_8S62ktJdqdNE03PqhsfsTsQyTsRbR9CF1ksfX06M,542
|
|
118
122
|
dodal/devices/attenuator/filter_selections.py,sha256=k77EKESAlbA_ZUf1eNBdzMa8Xs8Mmmmb7XBkhipo3lE,1900
|
|
@@ -136,35 +140,35 @@ dodal/devices/detector/det_resolution.py,sha256=aQkKp24LpRGiwzPAQM3wLVa4ANw32Hdr
|
|
|
136
140
|
dodal/devices/detector/detector.py,sha256=DqQvlgdjIdKErrZqgM9IH7drc-r6N8nhkFk7KwlgYAk,4815
|
|
137
141
|
dodal/devices/detector/detector_motion.py,sha256=Ly4nz_AsB-_EDOADMC2u2J0dunpkOMbafVN_dgh3T-E,1389
|
|
138
142
|
dodal/devices/electron_analyser/__init__.py,sha256=mpC48s2fK58aEKI-Fl3CiYBb4tXgcaa4Msj8_jLpH8g,956
|
|
139
|
-
dodal/devices/electron_analyser/detector.py,sha256=
|
|
143
|
+
dodal/devices/electron_analyser/detector.py,sha256=FE8Qh7H01tej5GqWLXtCbiWo4n7OGm6q-QVViv-dqZ8,4749
|
|
140
144
|
dodal/devices/electron_analyser/energy_sources.py,sha256=NO3oxaVgmXnm6QuvyPBaeFbTjl3KwXzXY7EsdOhjATM,3152
|
|
141
145
|
dodal/devices/electron_analyser/enums.py,sha256=ruSH7LNRhtqMflv7gYxKeAu0uLzZIaoCai7sSTzpvkg,204
|
|
142
146
|
dodal/devices/electron_analyser/types.py,sha256=_kmdSp4E98fsusg5Wg-Hyo25zHYA_pMe_hFW8lKe3tE,1869
|
|
143
147
|
dodal/devices/electron_analyser/util.py,sha256=ZFQJxxwDPIr43859DPIS9lBuq54phUT3R2f_Rbn-FbU,1235
|
|
144
|
-
dodal/devices/electron_analyser/abstract/__init__.py,sha256=
|
|
145
|
-
dodal/devices/electron_analyser/abstract/base_detector.py,sha256=
|
|
146
|
-
dodal/devices/electron_analyser/abstract/base_driver_io.py,sha256=
|
|
147
|
-
dodal/devices/electron_analyser/abstract/base_region.py,sha256=
|
|
148
|
+
dodal/devices/electron_analyser/abstract/__init__.py,sha256=OE5iU5L_7wQudl3cddtMk6eRNbXzZxqiVIzaOAZmuxc,612
|
|
149
|
+
dodal/devices/electron_analyser/abstract/base_detector.py,sha256=alBDZgJxNYLAHDrUa_C5tRUSlujxwWdBebFHDQ8jOv0,2055
|
|
150
|
+
dodal/devices/electron_analyser/abstract/base_driver_io.py,sha256=1j_bCS1k4LqyOBvlt34ijGOLbgX3vboxOUD4j-zv-MU,9963
|
|
151
|
+
dodal/devices/electron_analyser/abstract/base_region.py,sha256=DY5wNs-BMYimkH5tpBEqXGq4n0YhHpk81kuHASveBpw,5702
|
|
148
152
|
dodal/devices/electron_analyser/abstract/types.py,sha256=eoeO7sqlv5RE7AEnyzsxHyuBXlUzOIYdRLWp0EnLyAU,596
|
|
149
153
|
dodal/devices/electron_analyser/specs/__init__.py,sha256=qN57kY6ERUGdrAWhU5m8CBrc0KaqiOGwPL6h2BNm3i0,291
|
|
150
154
|
dodal/devices/electron_analyser/specs/detector.py,sha256=RaNkSmQ_Jb9AuwQqVqo3vv5Q6DcTtpoVqqRAQvgoeEs,1139
|
|
151
|
-
dodal/devices/electron_analyser/specs/driver_io.py,sha256=
|
|
155
|
+
dodal/devices/electron_analyser/specs/driver_io.py,sha256=_6FG5zXGw8vzKc8JzyxdqqQAcU5mBoDjrF_ehfG9h8w,4500
|
|
152
156
|
dodal/devices/electron_analyser/specs/enums.py,sha256=cXPcbIGEN5ZJJt1KeiNJEtZkkcjQ-fz7dBfsU283zYQ,235
|
|
153
157
|
dodal/devices/electron_analyser/specs/region.py,sha256=P7rwbY72-QGKzC6TeldmP8sTmardpB_-rYx7gPVCMqo,1213
|
|
154
158
|
dodal/devices/electron_analyser/vgscienta/__init__.py,sha256=5ZUJcUkJJ9ruwE0PzCFdA0HyWKrfjxaUBeGAMCC9JH4,357
|
|
155
159
|
dodal/devices/electron_analyser/vgscienta/detector.py,sha256=JkO8E5N8tQjYfaHMXoDV6r3oEyzTC0oQI5IqWbOmvxw,1446
|
|
156
|
-
dodal/devices/electron_analyser/vgscienta/driver_io.py,sha256=
|
|
160
|
+
dodal/devices/electron_analyser/vgscienta/driver_io.py,sha256=c1v3AOSGKp6DlVmE82rvuN5aYElWsHeWPtYHPLwIM-s,3510
|
|
157
161
|
dodal/devices/electron_analyser/vgscienta/enums.py,sha256=3vmX67ExATU8clueVp_mCzw3OUQx799oZMc8gyHtMJE,205
|
|
158
162
|
dodal/devices/electron_analyser/vgscienta/region.py,sha256=6k6Eah6_I74Pi2_a0KfyMYFfwHwJbh1ndqy0fuq5o14,2184
|
|
159
163
|
dodal/devices/i02_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
|
-
dodal/devices/i02_1/fast_grid_scan.py,sha256=
|
|
164
|
+
dodal/devices/i02_1/fast_grid_scan.py,sha256=bfiumNayrISFGYqdcd3Bh6lEZvkOxrqyX_B24LYW1nU,2429
|
|
161
165
|
dodal/devices/i02_1/sample_motors.py,sha256=fAHAyeuP4hjOnYsp2x5VQNrTh8Di35ezJV1si2YmKPY,607
|
|
162
166
|
dodal/devices/i03/__init__.py,sha256=Kvukapy4a5lUQ20qaCqYCJzKNaqJn2DfXP5nKZ_Pec8,118
|
|
163
167
|
dodal/devices/i03/dcm.py,sha256=zDcgxOdMRVOQZBGDsLaIlr7o4UJIK2vehPWHxAxt6VA,2268
|
|
164
168
|
dodal/devices/i03/undulator_dcm.py,sha256=L7dr1QcwJ1SiQWkHm0a4yQVJFtPiAJQyDLEXok64Ab8,2857
|
|
165
169
|
dodal/devices/i04/__init__.py,sha256=Kvukapy4a5lUQ20qaCqYCJzKNaqJn2DfXP5nKZ_Pec8,118
|
|
166
170
|
dodal/devices/i04/constants.py,sha256=_Dw28NeXldwRYH-h6YP6OHnyj7h0z4NQs_-RysNby5Q,281
|
|
167
|
-
dodal/devices/i04/murko_results.py,sha256=
|
|
171
|
+
dodal/devices/i04/murko_results.py,sha256=Lool7IqYrYoUojexKpoVK8C4ztk9-sNFDg5lcPHBFSw,8949
|
|
168
172
|
dodal/devices/i04/transfocator.py,sha256=sVI4Bgv-2-DH4-F1nIXMp5Aktevrm3agZnCA-WgjmW8,3780
|
|
169
173
|
dodal/devices/i05/__init__.py,sha256=v0Axsf-vMyLyxcbqS8lljJc0BQ5Tw8yVBTWcO3tG_4g,67
|
|
170
174
|
dodal/devices/i05/enums.py,sha256=9FHBIexkSfZSTHxUnGupravfG9sVriHcrB15jemkQOQ,191
|
|
@@ -175,13 +179,15 @@ dodal/devices/i09_1/__init__.py,sha256=dTazun87AkMDXh7J8gIZYJxJth0XUs72qahJ-VvhR
|
|
|
175
179
|
dodal/devices/i09_1/enums.py,sha256=FwhsvKnEcm9M22U4gcAJi6FE2RaUBZH0jRjNgJUKRqc,1319
|
|
176
180
|
dodal/devices/i10/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
181
|
dodal/devices/i10/diagnostics.py,sha256=iEPScPnjhLX20dD313hBekqM2OmL_WYQN-4yKAMOFWU,5440
|
|
178
|
-
dodal/devices/i10/i10_apple2.py,sha256=
|
|
182
|
+
dodal/devices/i10/i10_apple2.py,sha256=Rqk_xaBdIqpimjosFvM4_z5r-PkY0pPEoR2xjyqgWKI,19480
|
|
179
183
|
dodal/devices/i10/i10_setting_data.py,sha256=69XWgE-YNTiW7C3t67MNcTL5JDDhOo7h-X7DCTpFE5g,164
|
|
180
184
|
dodal/devices/i10/mirrors.py,sha256=Zofd0g2f3YvFi_KIHQE_w4dFZNglhmh--65tRnWLuyY,504
|
|
181
185
|
dodal/devices/i10/slits.py,sha256=jI4wJPVT2vtl4bvabrU9u_v-SdGjOfDLBm0S9GMZC7w,4157
|
|
186
|
+
dodal/devices/i10/rasor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
182
187
|
dodal/devices/i10/rasor/rasor_current_amp.py,sha256=hImaPI3veKiS5YVfYwv-qrQ1AYNBjFVxG_MwTQqtkcc,2368
|
|
183
188
|
dodal/devices/i10/rasor/rasor_motors.py,sha256=yWBxsiVhbdkQzhaK1S-nUq_wVntwHgdf6T8c8f7wHUE,1327
|
|
184
189
|
dodal/devices/i10/rasor/rasor_scaler_cards.py,sha256=sfWJKNx6pq342PEAlmg_Yt_Tijq7mO1XFjcCDtToQiU,467
|
|
190
|
+
dodal/devices/i11/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
185
191
|
dodal/devices/i11/cyberstar_blower.py,sha256=YngbNzNkWVj_LUGEIqo9JRxRQ0PT7zjouj2VljdDlOk,1033
|
|
186
192
|
dodal/devices/i11/diff_stages.py,sha256=3kcBRUvIwaqmoVf9MxY0CvU8LBbX_qaGhqbbYEmOri4,1713
|
|
187
193
|
dodal/devices/i11/mythen.py,sha256=_fi7SAoWfJ34RyfSNXEyG0gwP0ox6_l9RUN9BF6OBUI,5221
|
|
@@ -190,14 +196,16 @@ dodal/devices/i11/spinner.py,sha256=PjumM7QRB7iFUtN4b6xCvxKItYUNX2XLLWDupy5LI_M,
|
|
|
190
196
|
dodal/devices/i13_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
191
197
|
dodal/devices/i13_1/merlin.py,sha256=mgTFSMJftRzLL-HXAUuJkOYxtyA3Rp8YX0L46JCb30Y,1019
|
|
192
198
|
dodal/devices/i13_1/merlin_controller.py,sha256=myfmByOEXyMrlJZfsjOxDHeGQVwZGfsRtzrfSy2001o,1495
|
|
193
|
-
dodal/devices/i15/
|
|
194
|
-
dodal/devices/i15/
|
|
195
|
-
dodal/devices/i15/
|
|
196
|
-
dodal/devices/i15/
|
|
199
|
+
dodal/devices/i15/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
200
|
+
dodal/devices/i15/dcm.py,sha256=MQK2oHQOPB1pUyc4uWwIvzb3WWP8PuzaPe5O4Zqt0TM,3089
|
|
201
|
+
dodal/devices/i15/focussing_mirror.py,sha256=E6T_c7M2osgHLa7u8eUfQJlXlJbZHtOp95FhP3qZ4gY,1739
|
|
202
|
+
dodal/devices/i15/jack.py,sha256=VafCNx-uqkIy0LxbBAhSm_tuC8_SbGCrnTbvQCExAzA,962
|
|
203
|
+
dodal/devices/i15/laue.py,sha256=H0nLPH8gqJejBZtZeY0lv84EaE2lqdL3CmXvT9iHhpk,496
|
|
197
204
|
dodal/devices/i15/motors.py,sha256=-kGHisSWc_zuV9m2L0mGgmiSiIZ7puLsimddk28h_7s,831
|
|
198
|
-
dodal/devices/i15/multilayer_mirror.py,sha256=
|
|
199
|
-
dodal/devices/i15/rail.py,sha256=
|
|
205
|
+
dodal/devices/i15/multilayer_mirror.py,sha256=qdxnn6PBAxK0MgeVUpM8Ukkq4tdX3jhjlmyU-AzzH4M,741
|
|
206
|
+
dodal/devices/i15/rail.py,sha256=9cRTRKy6uZBASMhK1wC8K_k_5FfLgHnoh9VblSOTkpQ,428
|
|
200
207
|
dodal/devices/i18/KBMirror.py,sha256=W4R3TeulSjosUqAFIIznyWzje_Y2AoEf9f8N-NkisYM,710
|
|
208
|
+
dodal/devices/i18/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
209
|
dodal/devices/i18/diode.py,sha256=nk5kvn4LsbhczRpCwHOO0_jJTYOz7MP9qm_uvBWuv7c,1468
|
|
202
210
|
dodal/devices/i19/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
203
211
|
dodal/devices/i19/backlight.py,sha256=c3F8RTessUJmJHlCWATSj-W25qlkAttb-c95eS28lKs,662
|
|
@@ -205,10 +213,13 @@ dodal/devices/i19/beamstop.py,sha256=JkcvkEmcC3eY3GHrvYNGqv2yDwrfgdpWKVZJWSadWW8
|
|
|
205
213
|
dodal/devices/i19/blueapi_device.py,sha256=Tsl4vsREz7FM2d-kKJK-9tGrYbyKq4SLxnMlEKIM-g8,3966
|
|
206
214
|
dodal/devices/i19/diffractometer.py,sha256=QCEi0Gko6Ja9_ec2vfdazwMspknvX63jcz8hQ2XW1xo,1182
|
|
207
215
|
dodal/devices/i19/hutch_access.py,sha256=hnClUWCL1qTYzuBMmhXX85jiNak7mbYfyHEh54tZ27U,377
|
|
216
|
+
dodal/devices/i19/mapt_configuration.py,sha256=0zUzCSDofQORdaqbgD5NU-Vuf-EljgTKfvFDRDA9IjQ,1717
|
|
217
|
+
dodal/devices/i19/pin_col_stages.py,sha256=SAdokjoTmlRcCQQSVTz4jCkBibSsKCye7s5aYtfhsfg,6691
|
|
208
218
|
dodal/devices/i19/shutter.py,sha256=B4KP0Ruc8Ex47OfCskbjYSSu81jz4tK9GC_7pxMIkgI,2140
|
|
209
219
|
dodal/devices/i20_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
220
|
dodal/devices/i21/__init__.py,sha256=1H0Ov9s8K7nu6e20WtQDH39wgSKWz2ChRVAUzytIyzQ,67
|
|
211
221
|
dodal/devices/i21/enums.py,sha256=asy90S84fBBydYwz89jNeocz04JXpbHn8ynaPzW353c,141
|
|
222
|
+
dodal/devices/i22/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
212
223
|
dodal/devices/i22/dcm.py,sha256=s3RU6NxsQxOc_YgMBwR8lhboStI1gCDKbWc5pk22O0M,4489
|
|
213
224
|
dodal/devices/i22/fswitch.py,sha256=kpgegs4Wv_weBSzbrlXLXqXOOZdzTn3X9k5PlEN5F6c,2881
|
|
214
225
|
dodal/devices/i22/nxsas.py,sha256=M6hhiPmHO4WDBsFoSOhKAG_yPF6vTpLRPbB2UW3-aMs,6122
|
|
@@ -216,12 +227,13 @@ dodal/devices/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
216
227
|
dodal/devices/i24/aperture.py,sha256=dlH_g7OPTBc5QRMd-ADU3_GDTKh668kkMHo4k_JxUcY,770
|
|
217
228
|
dodal/devices/i24/beam_center.py,sha256=nQyOif6JtlU_qP7kZP-8wN1ldW81MIbFUykPC1bEm70,446
|
|
218
229
|
dodal/devices/i24/beamstop.py,sha256=6tbiQLlcTlp4PCPhHJ_mlHtkv0kz5ArQ99zg9rwTnrw,1133
|
|
219
|
-
dodal/devices/i24/commissioning_jungfrau.py,sha256=
|
|
230
|
+
dodal/devices/i24/commissioning_jungfrau.py,sha256=i-B6Sy2braKSGYF2G7QrluPkThXHY-YiULUJRqClFok,4532
|
|
220
231
|
dodal/devices/i24/dcm.py,sha256=l7qbJh2JKL-5ANlMYXDeU5EBYY6mDiLxn7kp_Z9KNaM,1206
|
|
221
232
|
dodal/devices/i24/dual_backlight.py,sha256=N0R7M1mHPRmQ4fks5lGU1wrXjOvcW_ZKIXaRoC8aLDE,2084
|
|
222
233
|
dodal/devices/i24/focus_mirrors.py,sha256=DYiYLpDw8FJ1LYHxLOxE_om5qGfUo2itzskgqhmQZlg,1763
|
|
223
234
|
dodal/devices/i24/pmac.py,sha256=-HYf2HPzaqWvszp4T8TXohdp40-xmKqQq4V0mLvVri8,7028
|
|
224
235
|
dodal/devices/i24/vgonio.py,sha256=sxSmcYZayVJPJz_D_91j9PmNor7Tbl1RGQFRrdtESlw,533
|
|
236
|
+
dodal/devices/mx_phase1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
237
|
dodal/devices/mx_phase1/beamstop.py,sha256=GeHLqHVf3XwJSszUHuxZ2JBwQlcDiFs6jVpdHuw7snM,3127
|
|
226
238
|
dodal/devices/oav/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
227
239
|
dodal/devices/oav/oav_calculations.py,sha256=qoaNz4MAdbpu0XHAkWTQ3rebFwsWfa8JA1eerUgISjA,2367
|
|
@@ -232,6 +244,7 @@ dodal/devices/oav/utils.py,sha256=T-xg7J38ritzXwRrKjsWZ7daC_qR7aNhlbkXx75nJ8Q,31
|
|
|
232
244
|
dodal/devices/oav/pin_image_recognition/__init__.py,sha256=ZDqvAk-Nvw_WM00efxfx2aDEoK1T5QydIciqqCCpp7Q,6302
|
|
233
245
|
dodal/devices/oav/pin_image_recognition/manual_test.py,sha256=h1Rto6ZDCB3jWhjSy9N8ECxRN583iYDJr9LxrTJ8kfE,903
|
|
234
246
|
dodal/devices/oav/pin_image_recognition/utils.py,sha256=L9ypluYqeOFoS7gQuws-vTNc8LqaKl2ZIDNeQ2JaNpg,8592
|
|
247
|
+
dodal/devices/oav/snapshots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
235
248
|
dodal/devices/oav/snapshots/grid_overlay.py,sha256=CdvCdTKMCiwMwxm2lV28KpcIUSXlscZmWxb73_KKmiI,3694
|
|
236
249
|
dodal/devices/oav/snapshots/snapshot.py,sha256=VDHYxko97sATMKvD5wClgvN7WQUtUAjcXXSyoQAL8q8,499
|
|
237
250
|
dodal/devices/oav/snapshots/snapshot_image_processing.py,sha256=wDxH9WPmB0nsotr49PUpw2Ke4l4RFxirrbpPzOUF9s4,2318
|
|
@@ -250,6 +263,7 @@ dodal/devices/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
250
263
|
dodal/devices/util/adjuster_plans.py,sha256=c40PFZpXFw0YmJLh9jU4VIb8vRxHyafZlmvprTKAOhM,824
|
|
251
264
|
dodal/devices/util/epics_util.py,sha256=4useFL8ngsVF08fhOn48BlnO4oh0T4sEKqjdS6mjvG0,4687
|
|
252
265
|
dodal/devices/util/lookup_tables.py,sha256=jH9f_D8JbTSqzL-RKHUWOORLt8lEoNQL3o9HpXE98TY,3476
|
|
266
|
+
dodal/devices/xspress3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
253
267
|
dodal/devices/xspress3/xspress3.py,sha256=OerapEy-IuK7EFz13B5z0BzBmESVl6pYUlqAWHIwJck,4555
|
|
254
268
|
dodal/devices/xspress3/xspress3_channel.py,sha256=w8tAx2lz5kJ_LeJ_eb_4o--Dtt8MRijsYNgDG6oEIVg,1626
|
|
255
269
|
dodal/devices/zebra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -260,6 +274,7 @@ dodal/devices/zocalo/__init__.py,sha256=W3R09eHAmybP4BcM_gHy6gVAW5_gVSnFq2o3z2iT
|
|
|
260
274
|
dodal/devices/zocalo/zocalo_constants.py,sha256=vu7Xjz7UNEpBUWEEBxDvP4bVFkZIN6NLGfQDpWbCjH8,98
|
|
261
275
|
dodal/devices/zocalo/zocalo_interaction.py,sha256=GFukU9xqagQtVSDg5BrL23jxl1w8wjs4b4NLLqdFfpk,3584
|
|
262
276
|
dodal/devices/zocalo/zocalo_results.py,sha256=8ZYkNB-By47Ag_p68iOq7jK8_P-LAsWPNs0m_DhnVEQ,12639
|
|
277
|
+
dodal/parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
263
278
|
dodal/parameters/experiment_parameter_base.py,sha256=vONep-llSqhM0OpVj3zFUxdnzRQpu9y9mPhh2HauEJE,226
|
|
264
279
|
dodal/plan_stubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
265
280
|
dodal/plan_stubs/check_topup.py,sha256=3gyLHfHNQBCgEWuAg4QE-ONx7y2Do1vVv5HP8ss0Z1I,5371
|
|
@@ -268,7 +283,7 @@ dodal/plan_stubs/motor_utils.py,sha256=Mf8utOA_xmxUa2dLmQ1uRkdfyDTip7D8YcKeCBCQL
|
|
|
268
283
|
dodal/plan_stubs/wrapped.py,sha256=kC8HH7bx3-sLYu2oieY_502tAdT2OECF8n-fqoL5Bfc,4266
|
|
269
284
|
dodal/plans/__init__.py,sha256=nH1jNxw3DzDMg9O8Uda0kqKIalRVEWBrq07OLY6Ey38,93
|
|
270
285
|
dodal/plans/bimorph.py,sha256=JxDmZDiEvZnz5f22tlaoyivpnaNGiX8kSL82qz5uvMM,11738
|
|
271
|
-
dodal/plans/configure_arm_trigger_and_disarm_detector.py,sha256=
|
|
286
|
+
dodal/plans/configure_arm_trigger_and_disarm_detector.py,sha256=VLsNhHx8NPFLhNeUd_EjlbOPqe18C-SEZEWGGmXtf_Y,6170
|
|
272
287
|
dodal/plans/save_panda.py,sha256=1fumH7Ih8uDIv8ahAtgQ_vUuR3dz0sfUs4n9TEtEbSs,3053
|
|
273
288
|
dodal/plans/scanspec.py,sha256=Q0AcvTKRT401iGMRDSqK-D523UX5_ofiVMZ_rNXKOx8,2074
|
|
274
289
|
dodal/plans/verify_undulator_gap.py,sha256=OcDN09-eCoMzsmhKGxvzsH5EapG2zYz0yGCqUtQxLSc,568
|
|
@@ -279,8 +294,8 @@ dodal/testing/__init__.py,sha256=AUYZKAvVOs7ZvxO1dVhL0pDTleRO34FQlO5MNe_cwgU,96
|
|
|
279
294
|
dodal/testing/setup.py,sha256=8cQnrzE5MQD4Etf0eqMarmtr-opsUOMQww-k1V7DzIQ,2442
|
|
280
295
|
dodal/testing/electron_analyser/__init__.py,sha256=-lc1opD2dCv0x678-J-ApOhHtvEvcslfOQ7E613U8-Y,118
|
|
281
296
|
dodal/testing/electron_analyser/device_factory.py,sha256=tkMY6fW3iI02DTD1XXHi4lH6sjo8RHHZBGDHSuTdmNU,2243
|
|
282
|
-
dls_dodal-1.
|
|
283
|
-
dls_dodal-1.
|
|
284
|
-
dls_dodal-1.
|
|
285
|
-
dls_dodal-1.
|
|
286
|
-
dls_dodal-1.
|
|
297
|
+
dls_dodal-1.62.0.dist-info/METADATA,sha256=oUaFqOHwl4hc_7ifCVwr1lskpYdxni_oGRG1eihyPog,16941
|
|
298
|
+
dls_dodal-1.62.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
299
|
+
dls_dodal-1.62.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
|
|
300
|
+
dls_dodal-1.62.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
|
|
301
|
+
dls_dodal-1.62.0.dist-info/RECORD,,
|
dodal/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.
|
|
32
|
-
__version_tuple__ = version_tuple = (1,
|
|
31
|
+
__version__ = version = '1.62.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 62, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
dodal/beamlines/i04.py
CHANGED
|
@@ -234,7 +234,7 @@ def undulator() -> Undulator:
|
|
|
234
234
|
"""
|
|
235
235
|
return Undulator(
|
|
236
236
|
prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
|
|
237
|
-
id_gap_lookup_table_path="/dls_sw/i04/software/
|
|
237
|
+
id_gap_lookup_table_path="/dls_sw/i04/software/daq_configuration/lookup/BeamLine_Undulator_toGap.txt",
|
|
238
238
|
)
|
|
239
239
|
|
|
240
240
|
|
dodal/beamlines/i19_2.py
CHANGED
|
@@ -11,6 +11,7 @@ from dodal.devices.i19.backlight import BacklightPosition
|
|
|
11
11
|
from dodal.devices.i19.beamstop import BeamStop
|
|
12
12
|
from dodal.devices.i19.blueapi_device import HutchState
|
|
13
13
|
from dodal.devices.i19.diffractometer import FourCircleDiffractometer
|
|
14
|
+
from dodal.devices.i19.pin_col_stages import PinholeCollimatorControl
|
|
14
15
|
from dodal.devices.i19.shutter import AccessControlledShutter
|
|
15
16
|
from dodal.devices.synchrotron import Synchrotron
|
|
16
17
|
from dodal.devices.zebra.zebra import Zebra
|
|
@@ -81,6 +82,15 @@ def synchrotron() -> Synchrotron:
|
|
|
81
82
|
return Synchrotron()
|
|
82
83
|
|
|
83
84
|
|
|
85
|
+
@device_factory()
|
|
86
|
+
def pinhole_and_collimator() -> PinholeCollimatorControl:
|
|
87
|
+
"""Get the i19-2 pinhole and collimator control device, instantiate it if it
|
|
88
|
+
hasn't already been. If this is called when already instantiated in i19-2,
|
|
89
|
+
it will return the existing object.
|
|
90
|
+
"""
|
|
91
|
+
return PinholeCollimatorControl(prefix=PREFIX.beamline_prefix)
|
|
92
|
+
|
|
93
|
+
|
|
84
94
|
@device_factory()
|
|
85
95
|
def backlight() -> BacklightPosition:
|
|
86
96
|
"""Get the i19-2 backlight device, instantiate it if it hasn't already been.
|
|
@@ -301,9 +301,68 @@ class UndulatorJawPhase(SafeUndulatorMover[float]):
|
|
|
301
301
|
)
|
|
302
302
|
|
|
303
303
|
|
|
304
|
+
class Apple2Motors(StandardReadable, Movable):
|
|
305
|
+
"""
|
|
306
|
+
Device representing the combined motor controls for an Apple2 undulator.
|
|
307
|
+
|
|
308
|
+
Attributes
|
|
309
|
+
----------
|
|
310
|
+
gap : UndulatorGap
|
|
311
|
+
The undulator gap motor device.
|
|
312
|
+
phase : UndulatorPhaseAxes
|
|
313
|
+
The undulator phase axes device, consisting of four phase motors.
|
|
314
|
+
"""
|
|
315
|
+
|
|
316
|
+
def __init__(self, id_gap: UndulatorGap, id_phase: UndulatorPhaseAxes, name=""):
|
|
317
|
+
"""
|
|
318
|
+
Parameters
|
|
319
|
+
----------
|
|
320
|
+
|
|
321
|
+
id_gap: UndulatorGap
|
|
322
|
+
An UndulatorGap device.
|
|
323
|
+
id_phase: UndulatorPhaseAxes
|
|
324
|
+
An UndulatorPhaseAxes device.
|
|
325
|
+
name: str
|
|
326
|
+
Name of the device.
|
|
327
|
+
"""
|
|
328
|
+
with self.add_children_as_readables():
|
|
329
|
+
self.gap = id_gap
|
|
330
|
+
self.phase = id_phase
|
|
331
|
+
super().__init__(name=name)
|
|
332
|
+
|
|
333
|
+
@AsyncStatus.wrap
|
|
334
|
+
async def set(self, id_motor_values: Apple2Val) -> None:
|
|
335
|
+
"""
|
|
336
|
+
Check ID is in a movable state and set all the demand value before moving them
|
|
337
|
+
all at the same time. This should be modified by the beamline specific ID
|
|
338
|
+
class, if the ID motors has to move in a specific order.
|
|
339
|
+
"""
|
|
340
|
+
|
|
341
|
+
# Only need to check gap as the phase motors share both fault and gate with gap.
|
|
342
|
+
await self.gap.raise_if_cannot_move()
|
|
343
|
+
await asyncio.gather(
|
|
344
|
+
self.phase.top_outer.user_setpoint.set(value=id_motor_values.top_outer),
|
|
345
|
+
self.phase.top_inner.user_setpoint.set(value=id_motor_values.top_inner),
|
|
346
|
+
self.phase.btm_inner.user_setpoint.set(value=id_motor_values.btm_inner),
|
|
347
|
+
self.phase.btm_outer.user_setpoint.set(value=id_motor_values.btm_outer),
|
|
348
|
+
self.gap.user_setpoint.set(value=id_motor_values.gap),
|
|
349
|
+
)
|
|
350
|
+
timeout = np.max(
|
|
351
|
+
await asyncio.gather(self.gap.get_timeout(), self.phase.get_timeout())
|
|
352
|
+
)
|
|
353
|
+
LOGGER.info(
|
|
354
|
+
f"Moving f{self.name} apple2 motors to {id_motor_values}, timeout = {timeout}"
|
|
355
|
+
)
|
|
356
|
+
await asyncio.gather(
|
|
357
|
+
self.gap.set_move.set(value=1, wait=False, timeout=timeout),
|
|
358
|
+
self.phase.set_move.set(value=1, wait=False, timeout=timeout),
|
|
359
|
+
)
|
|
360
|
+
await wait_for_value(self.gap.gate, UndulatorGateStatus.CLOSE, timeout=timeout)
|
|
361
|
+
|
|
362
|
+
|
|
304
363
|
class EnergyMotorConvertor(Protocol):
|
|
305
364
|
def __call__(self, energy: float, pol: Pol) -> tuple[float, float]:
|
|
306
|
-
"""Protocol to provide energy to motor position
|
|
365
|
+
"""Protocol to provide energy to motor position conversion"""
|
|
307
366
|
...
|
|
308
367
|
|
|
309
368
|
|
|
@@ -318,15 +377,13 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
318
377
|
The class is designed to manage the undulator's gap, phase motors, and polarisation settings, while
|
|
319
378
|
abstracting hardware interactions and providing a high-level interface for beamline operations.
|
|
320
379
|
|
|
321
|
-
The class is abstract and requires beamline-specific implementations for
|
|
380
|
+
The class is abstract and requires beamline-specific implementations for _set motor
|
|
322
381
|
positions based on energy and polarisation.
|
|
323
382
|
|
|
324
383
|
Attributes
|
|
325
384
|
----------
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
phase : UndulatorPhaseAxes
|
|
329
|
-
The phase control device, consisting of four phase motors.
|
|
385
|
+
apple2_motors : Apple2Motors
|
|
386
|
+
A collection of gap and phase motor devices.
|
|
330
387
|
energy : SignalR
|
|
331
388
|
A soft signal for the current energy readback.
|
|
332
389
|
polarisation_setpoint : SignalR
|
|
@@ -340,7 +397,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
340
397
|
|
|
341
398
|
Abstract Methods
|
|
342
399
|
----------------
|
|
343
|
-
|
|
400
|
+
_set(value: float) -> None
|
|
344
401
|
Abstract method to set motor positions for a given energy and polarisation.
|
|
345
402
|
|
|
346
403
|
Methods
|
|
@@ -363,8 +420,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
363
420
|
|
|
364
421
|
def __init__(
|
|
365
422
|
self,
|
|
366
|
-
|
|
367
|
-
id_phase: UndulatorPhaseAxes,
|
|
423
|
+
apple2_motors: Apple2Motors,
|
|
368
424
|
energy_motor_convertor: EnergyMotorConvertor,
|
|
369
425
|
name: str = "",
|
|
370
426
|
) -> None:
|
|
@@ -378,8 +434,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
378
434
|
name: Name of the device.
|
|
379
435
|
"""
|
|
380
436
|
|
|
381
|
-
self.
|
|
382
|
-
self.phase = id_phase
|
|
437
|
+
self.motors = apple2_motors
|
|
383
438
|
self.energy_to_motor = energy_motor_convertor
|
|
384
439
|
with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
|
|
385
440
|
# Store the set energy for readback.
|
|
@@ -398,11 +453,11 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
398
453
|
raw_to_derived=self._read_pol,
|
|
399
454
|
set_derived=self._set_pol,
|
|
400
455
|
pol=self.polarisation_setpoint,
|
|
401
|
-
top_outer=self.phase.top_outer.user_readback,
|
|
402
|
-
top_inner=self.phase.top_inner.user_readback,
|
|
403
|
-
btm_inner=self.phase.btm_inner.user_readback,
|
|
404
|
-
btm_outer=self.phase.btm_outer.user_readback,
|
|
405
|
-
gap=
|
|
456
|
+
top_outer=self.motors.phase.top_outer.user_readback,
|
|
457
|
+
top_inner=self.motors.phase.top_inner.user_readback,
|
|
458
|
+
btm_inner=self.motors.phase.btm_inner.user_readback,
|
|
459
|
+
btm_outer=self.motors.phase.btm_outer.user_readback,
|
|
460
|
+
gap=self.motors.gap.user_readback,
|
|
406
461
|
)
|
|
407
462
|
super().__init__(name)
|
|
408
463
|
|
|
@@ -420,24 +475,32 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
420
475
|
self._set_pol_setpoint(value)
|
|
421
476
|
await self.set(await self.energy.get_value())
|
|
422
477
|
|
|
423
|
-
@abc.abstractmethod
|
|
424
478
|
@AsyncStatus.wrap
|
|
425
479
|
async def set(self, value: float) -> None:
|
|
426
480
|
"""
|
|
427
481
|
Set should be in energy units, this will set the energy of the ID by setting the
|
|
428
482
|
gap and phase motors to the correct position for the given energy
|
|
429
483
|
and polarisation.
|
|
430
|
-
|
|
431
|
-
motor positions will be different for each beamline depending on the
|
|
432
|
-
undulator design and the lookup table used.
|
|
433
|
-
_set can be used to set the motor positions for the given energy and
|
|
434
|
-
polarisation provided that all motors can be moved at the same time.
|
|
484
|
+
|
|
435
485
|
|
|
436
486
|
Examples
|
|
437
487
|
--------
|
|
438
488
|
RE( id.set(888.0)) # This will set the ID to 888 eV
|
|
439
489
|
RE(scan([detector], id,600,700,100)) # This will scan the ID from 600 to 700 eV in 100 steps.
|
|
440
490
|
"""
|
|
491
|
+
await self._set(value)
|
|
492
|
+
self._set_energy_rbv(value) # Update energy after move for readback.
|
|
493
|
+
LOGGER.info(f"Energy set to {value} eV successfully.")
|
|
494
|
+
|
|
495
|
+
@abc.abstractmethod
|
|
496
|
+
async def _set(self, value: float) -> None:
|
|
497
|
+
"""
|
|
498
|
+
This method should be implemented by the beamline specific ID class as the
|
|
499
|
+
motor positions will be different for each beamline depending on the
|
|
500
|
+
undulator design and the lookup table used. The set method can be
|
|
501
|
+
used to set the motor positions for the given energy and polarisation
|
|
502
|
+
provided that all motors can be moved at the same time.
|
|
503
|
+
"""
|
|
441
504
|
|
|
442
505
|
def _read_pol(
|
|
443
506
|
self,
|
|
@@ -468,36 +531,6 @@ class Apple2(abc.ABC, StandardReadable, Movable):
|
|
|
468
531
|
|
|
469
532
|
return read_pol
|
|
470
533
|
|
|
471
|
-
async def _set(self, value: Apple2Val, energy: float) -> None:
|
|
472
|
-
"""
|
|
473
|
-
Check ID is in a movable state and set all the demand value before moving them
|
|
474
|
-
all at the same time. This should be modified by the beamline specific ID class
|
|
475
|
-
, if the ID motors has to move in a specific order.
|
|
476
|
-
"""
|
|
477
|
-
|
|
478
|
-
# Only need to check gap as the phase motors share both fault and gate with gap.
|
|
479
|
-
await self.gap.raise_if_cannot_move()
|
|
480
|
-
await asyncio.gather(
|
|
481
|
-
self.phase.top_outer.user_setpoint.set(value=value.top_outer),
|
|
482
|
-
self.phase.top_inner.user_setpoint.set(value=value.top_inner),
|
|
483
|
-
self.phase.btm_inner.user_setpoint.set(value=value.btm_inner),
|
|
484
|
-
self.phase.btm_outer.user_setpoint.set(value=value.btm_outer),
|
|
485
|
-
self.gap.user_setpoint.set(value=value.gap),
|
|
486
|
-
)
|
|
487
|
-
timeout = np.max(
|
|
488
|
-
await asyncio.gather(self.gap.get_timeout(), self.phase.get_timeout())
|
|
489
|
-
)
|
|
490
|
-
LOGGER.info(
|
|
491
|
-
f"Moving f{self.name} energy and polorisation to {energy}, {await self.polarisation.get_value()}"
|
|
492
|
-
+ f"with motor position {value}, timeout = {timeout}"
|
|
493
|
-
)
|
|
494
|
-
await asyncio.gather(
|
|
495
|
-
self.gap.set_move.set(value=1, wait=False, timeout=timeout),
|
|
496
|
-
self.phase.set_move.set(value=1, wait=False, timeout=timeout),
|
|
497
|
-
)
|
|
498
|
-
await wait_for_value(self.gap.gate, UndulatorGateStatus.CLOSE, timeout=timeout)
|
|
499
|
-
self._set_energy_rbv(energy) # Update energy after move for readback.
|
|
500
|
-
|
|
501
534
|
def determine_phase_from_hardware(
|
|
502
535
|
self,
|
|
503
536
|
top_outer: float,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
dodal/devices/controllers.py
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
from typing import TypeVar
|
|
2
2
|
|
|
3
|
-
from ophyd_async.epics.adcore import
|
|
4
|
-
ADBaseController,
|
|
5
|
-
ADBaseIO,
|
|
6
|
-
)
|
|
3
|
+
from ophyd_async.epics.adcore import ADBaseController, ADBaseIO, ADImageMode
|
|
7
4
|
|
|
8
5
|
ADBaseIOT = TypeVar("ADBaseIOT", bound=ADBaseIO)
|
|
9
6
|
|
|
@@ -13,8 +10,13 @@ class ConstantDeadTimeController(ADBaseController[ADBaseIOT]):
|
|
|
13
10
|
ADBaseController with a configured constant deadtime for a driver of type ADBaseIO.
|
|
14
11
|
"""
|
|
15
12
|
|
|
16
|
-
def __init__(
|
|
17
|
-
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
driver: ADBaseIOT,
|
|
16
|
+
deadtime: float,
|
|
17
|
+
image_mode: ADImageMode = ADImageMode.MULTIPLE,
|
|
18
|
+
):
|
|
19
|
+
super().__init__(driver, image_mode=image_mode)
|
|
18
20
|
self.deadtime = deadtime
|
|
19
21
|
|
|
20
22
|
def get_deadtime(self, exposure: float | None) -> float:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from .base_detector import (
|
|
2
|
-
|
|
2
|
+
BaseElectronAnalyserDetector,
|
|
3
3
|
)
|
|
4
4
|
from .base_driver_io import AbstractAnalyserDriverIO, TAbstractAnalyserDriverIO
|
|
5
5
|
from .base_region import (
|
|
@@ -19,7 +19,7 @@ __all__ = [
|
|
|
19
19
|
"TAcquisitionMode",
|
|
20
20
|
"TLensMode",
|
|
21
21
|
"AbstractAnalyserDriverIO",
|
|
22
|
-
"
|
|
22
|
+
"BaseElectronAnalyserDetector",
|
|
23
23
|
"AbstractAnalyserDriverIO",
|
|
24
24
|
"TAbstractAnalyserDriverIO",
|
|
25
25
|
]
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
1
|
from typing import Generic
|
|
3
2
|
|
|
4
3
|
from bluesky.protocols import Reading, Triggerable
|
|
@@ -9,14 +8,14 @@ from ophyd_async.core import (
|
|
|
9
8
|
AsyncStatus,
|
|
10
9
|
Device,
|
|
11
10
|
)
|
|
11
|
+
from ophyd_async.epics.adcore import ADBaseController
|
|
12
12
|
|
|
13
|
-
from dodal.devices.controllers import ConstantDeadTimeController
|
|
14
13
|
from dodal.devices.electron_analyser.abstract.base_driver_io import (
|
|
15
14
|
TAbstractAnalyserDriverIO,
|
|
16
15
|
)
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
class
|
|
18
|
+
class BaseElectronAnalyserDetector(
|
|
20
19
|
Device,
|
|
21
20
|
Triggerable,
|
|
22
21
|
AsyncReadable,
|
|
@@ -34,43 +33,31 @@ class AbstractElectronAnalyserDetector(
|
|
|
34
33
|
|
|
35
34
|
def __init__(
|
|
36
35
|
self,
|
|
37
|
-
|
|
36
|
+
controller: ADBaseController[TAbstractAnalyserDriverIO],
|
|
38
37
|
name: str = "",
|
|
39
38
|
):
|
|
40
|
-
self.
|
|
39
|
+
self._controller = controller
|
|
41
40
|
super().__init__(name)
|
|
42
41
|
|
|
43
42
|
@AsyncStatus.wrap
|
|
44
43
|
async def trigger(self) -> None:
|
|
45
|
-
await self.
|
|
46
|
-
await self.
|
|
44
|
+
await self._controller.arm()
|
|
45
|
+
await self._controller.wait_for_idle()
|
|
47
46
|
|
|
48
47
|
async def read(self) -> dict[str, Reading]:
|
|
49
|
-
return await self.driver.read()
|
|
48
|
+
return await self._controller.driver.read()
|
|
50
49
|
|
|
51
50
|
async def describe(self) -> dict[str, DataKey]:
|
|
52
|
-
data = await self.driver.describe()
|
|
51
|
+
data = await self._controller.driver.describe()
|
|
53
52
|
# Correct the shape for image
|
|
54
|
-
prefix = self.driver.name + "-"
|
|
55
|
-
energy_size = len(await self.driver.energy_axis.get_value())
|
|
56
|
-
angle_size = len(await self.driver.angle_axis.get_value())
|
|
53
|
+
prefix = self._controller.driver.name + "-"
|
|
54
|
+
energy_size = len(await self._controller.driver.energy_axis.get_value())
|
|
55
|
+
angle_size = len(await self._controller.driver.angle_axis.get_value())
|
|
57
56
|
data[prefix + "image"]["shape"] = [angle_size, energy_size]
|
|
58
57
|
return data
|
|
59
58
|
|
|
60
59
|
async def read_configuration(self) -> dict[str, Reading]:
|
|
61
|
-
return await self.driver.read_configuration()
|
|
60
|
+
return await self._controller.driver.read_configuration()
|
|
62
61
|
|
|
63
62
|
async def describe_configuration(self) -> dict[str, DataKey]:
|
|
64
|
-
return await self.driver.describe_configuration()
|
|
65
|
-
|
|
66
|
-
@property
|
|
67
|
-
@abstractmethod
|
|
68
|
-
def driver(self) -> TAbstractAnalyserDriverIO:
|
|
69
|
-
"""
|
|
70
|
-
Define common property for all implementations to access the driver. Some
|
|
71
|
-
implementations will store this as a reference so it doesn't have conflicting
|
|
72
|
-
parents.
|
|
73
|
-
|
|
74
|
-
Returns:
|
|
75
|
-
instance of the driver.
|
|
76
|
-
"""
|
|
63
|
+
return await self._controller.driver.describe_configuration()
|
|
@@ -153,11 +153,12 @@ class AbstractAnalyserDriverIO(
|
|
|
153
153
|
self.energy_source.selected_source.set(region.excitation_energy_source)
|
|
154
154
|
excitation_energy = await self.energy_source.energy.get_value()
|
|
155
155
|
|
|
156
|
-
#
|
|
157
|
-
ke_region = region.
|
|
158
|
-
ke_region.switch_energy_mode(EnergyMode.KINETIC, excitation_energy)
|
|
159
|
-
|
|
156
|
+
# Switch to kinetic energy as epics doesn't support BINDING.
|
|
157
|
+
ke_region = region.switch_energy_mode(EnergyMode.KINETIC, excitation_energy)
|
|
160
158
|
await self._set_region(ke_region)
|
|
159
|
+
# Set the true energy mode from original region so binding_energy_axis can be
|
|
160
|
+
# calculated correctly.
|
|
161
|
+
await self.energy_mode.set(region.energy_mode)
|
|
161
162
|
|
|
162
163
|
@abstractmethod
|
|
163
164
|
async def _set_region(self, ke_region: TAbstractBaseRegion):
|