dls-dodal 1.59.1__py3-none-any.whl → 1.60.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.59.1.dist-info → dls_dodal-1.60.0.dist-info}/METADATA +2 -3
- {dls_dodal-1.59.1.dist-info → dls_dodal-1.60.0.dist-info}/RECORD +22 -13
- dodal/_version.py +2 -2
- dodal/beamlines/__init__.py +1 -0
- dodal/beamlines/i15.py +242 -0
- dodal/beamlines/i15_1.py +156 -0
- dodal/beamlines/i19_1.py +3 -1
- dodal/beamlines/i19_2.py +1 -1
- dodal/devices/i15/dcm.py +77 -0
- dodal/devices/i15/focussing_mirror.py +71 -0
- dodal/devices/i15/jack.py +39 -0
- dodal/devices/i15/laue.py +18 -0
- dodal/devices/i15/motors.py +27 -0
- dodal/devices/i15/multilayer_mirror.py +25 -0
- dodal/devices/i15/rail.py +17 -0
- dodal/devices/motors.py +52 -1
- dodal/devices/slits.py +18 -0
- dodal/devices/v2f.py +7 -7
- {dls_dodal-1.59.1.dist-info → dls_dodal-1.60.0.dist-info}/WHEEL +0 -0
- {dls_dodal-1.59.1.dist-info → dls_dodal-1.60.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.59.1.dist-info → dls_dodal-1.60.0.dist-info}/licenses/LICENSE +0 -0
- {dls_dodal-1.59.1.dist-info → dls_dodal-1.60.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.60.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
|
|
@@ -216,7 +216,7 @@ License-File: LICENSE
|
|
|
216
216
|
Requires-Dist: click
|
|
217
217
|
Requires-Dist: ophyd
|
|
218
218
|
Requires-Dist: ophyd-async[ca,pva]>=0.13.2
|
|
219
|
-
Requires-Dist: bluesky
|
|
219
|
+
Requires-Dist: bluesky>=1.14.5
|
|
220
220
|
Requires-Dist: pyepics
|
|
221
221
|
Requires-Dist: dataclasses-json
|
|
222
222
|
Requires-Dist: pillow
|
|
@@ -230,7 +230,6 @@ Requires-Dist: aiofiles
|
|
|
230
230
|
Requires-Dist: aiohttp
|
|
231
231
|
Requires-Dist: redis
|
|
232
232
|
Requires-Dist: scanspec>=0.7.3
|
|
233
|
-
Requires-Dist: event-model>=1.23
|
|
234
233
|
Requires-Dist: pyzmq==26.3.0
|
|
235
234
|
Requires-Dist: deepdiff
|
|
236
235
|
Requires-Dist: daq-config-server>=v1.0.0-rc.2
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
dls_dodal-1.
|
|
1
|
+
dls_dodal-1.60.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=DQ2eCF3LevBLy0Ytmwazcpp3NBvIb4zB_mzF8VnCjP4,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
|
|
@@ -9,7 +9,7 @@ dodal/beamline_specific_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
9
9
|
dodal/beamline_specific_utils/i03.py,sha256=P6Ls4FoVtcacH0RJM3v6ZwwGx27oMppcBdW0la-ohTY,377
|
|
10
10
|
dodal/beamline_specific_utils/i05_shared.py,sha256=EsgNlOPq9iRbKv7FinR__gCEwp1S2DRclJdklmBpaxo,336
|
|
11
11
|
dodal/beamlines/README.md,sha256=K9MkL_GomxlsoTB7Mz-_dJA5NNSbmCfMiutchGg3C8o,404
|
|
12
|
-
dodal/beamlines/__init__.py,sha256=
|
|
12
|
+
dodal/beamlines/__init__.py,sha256=FU0P25acBYfikeXaVlQz0cMssJRrSRPzjak0FMeB4Bc,3220
|
|
13
13
|
dodal/beamlines/adsim.py,sha256=fxj_P-7PsywdWPjfBAsLoOPiSKtApOKmLWHdQ8xCa3s,2048
|
|
14
14
|
dodal/beamlines/aithre.py,sha256=IoRO5szytOtdkLLEtwYwLl4TLhMllyG6l9A2G1r7Yic,994
|
|
15
15
|
dodal/beamlines/b01_1.py,sha256=c82X3HXysBK0s2_JxJkEg1HPXBNewP_OR_DXBU4izzc,2829
|
|
@@ -30,10 +30,12 @@ dodal/beamlines/i10-1.py,sha256=9uivujUOgYMaNeVKMq6ZmR4HdXF4je7VEKGk4RtY5xc,736
|
|
|
30
30
|
dodal/beamlines/i10.py,sha256=EgVmrF7c5hT2WljDdfBpmYi6GVu4vkKuZ3kURdGM1XU,6141
|
|
31
31
|
dodal/beamlines/i11.py,sha256=hzW5Lh74zDzUD0vqXQzekoFVWDp8qEIc0OPRm0Qepqs,3643
|
|
32
32
|
dodal/beamlines/i13_1.py,sha256=VYVqMN8-njy7YSI08gskRccT-K2paRC9edAx0ah-Cwo,1602
|
|
33
|
+
dodal/beamlines/i15.py,sha256=lmUhh1jt5CtD4P_BzkwNufu814aT3uaQlLyDMY_B5AE,5725
|
|
34
|
+
dodal/beamlines/i15_1.py,sha256=TomeTLsYSvL5en8GPvI8driQa5nMObrB5DrMKckHig8,3898
|
|
33
35
|
dodal/beamlines/i17.py,sha256=Nickt8CKQ9JcQ1D_ulNICUT4jjLF1Aib7D9jblSnzA4,987
|
|
34
36
|
dodal/beamlines/i18.py,sha256=FuU8G-q1piu6BRou-Shj3BQEbNtsF7CUsSIqqkvCKZc,3615
|
|
35
|
-
dodal/beamlines/i19_1.py,sha256=
|
|
36
|
-
dodal/beamlines/i19_2.py,sha256=
|
|
37
|
+
dodal/beamlines/i19_1.py,sha256=xAI9B3fyUKtoO-tnAF7wWQelrXQ6QrYNgEyncHqVzn4,3057
|
|
38
|
+
dodal/beamlines/i19_2.py,sha256=x-k6Dy2_Jy_9Z4Jh5ytcQWsOQlk4MRAsLOX55Fjz4t0,3171
|
|
37
39
|
dodal/beamlines/i19_optics.py,sha256=8hdlDAAMgFrhcXrp5xCPZtLUlrDUEC9VwKnnuUAMbbU,1150
|
|
38
40
|
dodal/beamlines/i20_1.py,sha256=Zsr1lsH7ySbOgK7RhMVMWzNWZAV-fuYW0iAjSEJZicY,2625
|
|
39
41
|
dodal/beamlines/i21.py,sha256=5v6iiTlY4kWlWvQ_uNidJSotvkdNF3qdjR49l7sIYPc,728
|
|
@@ -85,7 +87,7 @@ dodal/devices/focusing_mirror.py,sha256=2UWVrY6bs6_0i-h6JJ_LAUZPX_FgMzIx04JqZafd
|
|
|
85
87
|
dodal/devices/hutch_shutter.py,sha256=iY3qWxDr8mDlAvN_BYe2gqpXRM1hlfV3ewdwkwh0_v0,3889
|
|
86
88
|
dodal/devices/ipin.py,sha256=eq5jlKw7WGQi8VLrAWpaAIsZmfiVf-5Q0td_B22H6A4,473
|
|
87
89
|
dodal/devices/linkam3.py,sha256=Lkw7c05XyHEEA83djfVFqz_8HN4kROCRqZwLwvHwRdA,2054
|
|
88
|
-
dodal/devices/motors.py,sha256=
|
|
90
|
+
dodal/devices/motors.py,sha256=3exQwYqTCQsCmtBvv_H5T_Dd5KJXF4__afnR33vTNB0,7741
|
|
89
91
|
dodal/devices/p45.py,sha256=CImflt7ifaOkV20Uip3S8_fde_GlIIhD16y-54ODfHE,1390
|
|
90
92
|
dodal/devices/pgm.py,sha256=92yfr3i4fC92g-HPbbUBrazGs4b9n6CjmJfKxmUrMUY,1157
|
|
91
93
|
dodal/devices/positioner.py,sha256=qf_1uYOI1whS0U5sPA3O3mlZYKrPuW3i0gEKI_q-up0,1289
|
|
@@ -94,7 +96,7 @@ dodal/devices/qbpm.py,sha256=FfrWWAHHtYv3fGRT1qljyPpAwoHJYfbooT9CfKg-oXI,465
|
|
|
94
96
|
dodal/devices/robot.py,sha256=k4Vkjpd3R-wXWf6YbYC1225sSdjvTrZS54v5v6Qy_EU,7003
|
|
95
97
|
dodal/devices/s4_slit_gaps.py,sha256=4KdarIQoRqX4ry3LUS1Km7fkjUFahA0VuTd2DvYEqQ8,446
|
|
96
98
|
dodal/devices/scintillator.py,sha256=JresF8SY_-t1raibzR4f0UoMXnFi-Abh3ywGm2DjhKs,3003
|
|
97
|
-
dodal/devices/slits.py,sha256=
|
|
99
|
+
dodal/devices/slits.py,sha256=IJtipn1N5B7pH64frWcF2TFK8mTFwSYXpGt_FMGl68w,1537
|
|
98
100
|
dodal/devices/smargon.py,sha256=m3wkiyGVrFw1HSnIcV2JPvuWkflSdii-1eZxoePxSkg,5025
|
|
99
101
|
dodal/devices/status.py,sha256=hVrJS1yooQo6PRumRACoIEh-SKBUKxvBlQl-MtLFUMQ,327
|
|
100
102
|
dodal/devices/synchrotron.py,sha256=OHBrTrm4K39XE8BrE9b_Jn_ZfMRyDp9CHCwvmiV-KOc,1989
|
|
@@ -102,7 +104,7 @@ dodal/devices/tetramm.py,sha256=IKZ49NtOf65L46Zu5CjX0kjQsYkA-bNIdu4BpMI2iLA,1024
|
|
|
102
104
|
dodal/devices/thawer.py,sha256=HexahKZ1rUxF9jBMeULruqYt6I7fsl6OgXkvcxPQY3M,1963
|
|
103
105
|
dodal/devices/turbo_slit.py,sha256=xhcnhfbdcTYSYozogw6Li4fF4ofoPsc350rEyrRdaNE,1460
|
|
104
106
|
dodal/devices/undulator.py,sha256=SsgYvIEQUNs_zZiUPAzlw0yJPaSExdmBFltlq5ypbc8,5530
|
|
105
|
-
dodal/devices/v2f.py,sha256=
|
|
107
|
+
dodal/devices/v2f.py,sha256=TL9fFYKEWENBtos031Ma4D6eDVG1uqUmdJON9aQzwwc,1232
|
|
106
108
|
dodal/devices/watsonmarlow323_pump.py,sha256=xNwjoxW3NJIDkeDWHfb0A8Yj95_KKRXMD9AghvX-WLk,1337
|
|
107
109
|
dodal/devices/webcam.py,sha256=UAx2KF0mKi6I-mJJUb5z56MHY-Wd89-tqyPcFbouQFg,2491
|
|
108
110
|
dodal/devices/xbpm_feedback.py,sha256=HKLY3k52FPe2G-EAg8ir2LSdeUuGvhRD73ibDZ4mjH8,1418
|
|
@@ -188,6 +190,13 @@ dodal/devices/i11/spinner.py,sha256=PjumM7QRB7iFUtN4b6xCvxKItYUNX2XLLWDupy5LI_M,
|
|
|
188
190
|
dodal/devices/i13_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
189
191
|
dodal/devices/i13_1/merlin.py,sha256=mgTFSMJftRzLL-HXAUuJkOYxtyA3Rp8YX0L46JCb30Y,1019
|
|
190
192
|
dodal/devices/i13_1/merlin_controller.py,sha256=myfmByOEXyMrlJZfsjOxDHeGQVwZGfsRtzrfSy2001o,1495
|
|
193
|
+
dodal/devices/i15/dcm.py,sha256=QLqnKhNbkcVuCFEy9yB-2Ga4fAR0EOGZQshfSoVN8-w,3113
|
|
194
|
+
dodal/devices/i15/focussing_mirror.py,sha256=o0foDrdqDJNFO5Mv_Cb42fVLcJ8hrMjLau3uUS7_yWE,1863
|
|
195
|
+
dodal/devices/i15/jack.py,sha256=3FmRdVO54O1rsX3J8VBAYRvbmKOJJveAIz836SKTvoc,1024
|
|
196
|
+
dodal/devices/i15/laue.py,sha256=I6aTJuVV93PjwtMtE_P4ZeUCsKTIvZPoG0HlOTUGGnY,527
|
|
197
|
+
dodal/devices/i15/motors.py,sha256=-kGHisSWc_zuV9m2L0mGgmiSiIZ7puLsimddk28h_7s,831
|
|
198
|
+
dodal/devices/i15/multilayer_mirror.py,sha256=KHalIhgz5QX-SPl-d8ypPwIc72iqmj004pzeIMOhytg,772
|
|
199
|
+
dodal/devices/i15/rail.py,sha256=STXoNC8G7UbaK_wBhRv8RwnLJa2qklqE-XzaWxkD7h0,459
|
|
191
200
|
dodal/devices/i18/KBMirror.py,sha256=W4R3TeulSjosUqAFIIznyWzje_Y2AoEf9f8N-NkisYM,710
|
|
192
201
|
dodal/devices/i18/diode.py,sha256=nk5kvn4LsbhczRpCwHOO0_jJTYOz7MP9qm_uvBWuv7c,1468
|
|
193
202
|
dodal/devices/i19/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -270,8 +279,8 @@ dodal/testing/__init__.py,sha256=AUYZKAvVOs7ZvxO1dVhL0pDTleRO34FQlO5MNe_cwgU,96
|
|
|
270
279
|
dodal/testing/setup.py,sha256=8cQnrzE5MQD4Etf0eqMarmtr-opsUOMQww-k1V7DzIQ,2442
|
|
271
280
|
dodal/testing/electron_analyser/__init__.py,sha256=-lc1opD2dCv0x678-J-ApOhHtvEvcslfOQ7E613U8-Y,118
|
|
272
281
|
dodal/testing/electron_analyser/device_factory.py,sha256=tkMY6fW3iI02DTD1XXHi4lH6sjo8RHHZBGDHSuTdmNU,2243
|
|
273
|
-
dls_dodal-1.
|
|
274
|
-
dls_dodal-1.
|
|
275
|
-
dls_dodal-1.
|
|
276
|
-
dls_dodal-1.
|
|
277
|
-
dls_dodal-1.
|
|
282
|
+
dls_dodal-1.60.0.dist-info/METADATA,sha256=ZayuvRHyJXBJ91LHyhhe137vN9naAJGFYm5NfbTgZ4E,16941
|
|
283
|
+
dls_dodal-1.60.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
284
|
+
dls_dodal-1.60.0.dist-info/entry_points.txt,sha256=bycw_EKUzup_rxfCetOwcauXV4kLln_OPpPT8jEnr-I,94
|
|
285
|
+
dls_dodal-1.60.0.dist-info/top_level.txt,sha256=xIozdmZk_wmMV4wugpq9-6eZs0vgADNUKz3j2UAwlhc,6
|
|
286
|
+
dls_dodal-1.60.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.60.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 60, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
dodal/beamlines/__init__.py
CHANGED
dodal/beamlines/i15.py
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
from ophyd_async.epics.motor import Motor
|
|
2
|
+
|
|
3
|
+
from dodal.common.beamlines.beamline_utils import device_factory
|
|
4
|
+
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
5
|
+
from dodal.devices.i15.dcm import DCM
|
|
6
|
+
from dodal.devices.i15.focussing_mirror import (
|
|
7
|
+
FocusingMirror,
|
|
8
|
+
FocusingMirrorHorizontal,
|
|
9
|
+
FocusingMirrorVertical,
|
|
10
|
+
FocusingMirrorWithRoll,
|
|
11
|
+
)
|
|
12
|
+
from dodal.devices.i15.jack import JackX, JackY
|
|
13
|
+
from dodal.devices.i15.motors import UpstreamDownstreamPair
|
|
14
|
+
from dodal.devices.motors import (
|
|
15
|
+
SixAxisGonioKappaPhi,
|
|
16
|
+
XYStage,
|
|
17
|
+
XYZPitchYawStage,
|
|
18
|
+
XYZStage,
|
|
19
|
+
)
|
|
20
|
+
from dodal.devices.slits import Slits, SlitsY
|
|
21
|
+
from dodal.devices.synchrotron import Synchrotron
|
|
22
|
+
from dodal.log import set_beamline as set_log_beamline
|
|
23
|
+
from dodal.utils import BeamlinePrefix, get_beamline_name
|
|
24
|
+
|
|
25
|
+
BL = get_beamline_name("i15") # Default used when not on a live beamline
|
|
26
|
+
PREFIX = BeamlinePrefix(BL)
|
|
27
|
+
set_log_beamline(BL) # Configure logging and util functions
|
|
28
|
+
set_utils_beamline(BL)
|
|
29
|
+
|
|
30
|
+
"""
|
|
31
|
+
Define device factory functions below this point.
|
|
32
|
+
A device factory function is any function that has a return type which conforms
|
|
33
|
+
to one or more Bluesky Protocols.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@device_factory()
|
|
38
|
+
def arm() -> UpstreamDownstreamPair:
|
|
39
|
+
return UpstreamDownstreamPair(f"{PREFIX.beamline_prefix}-MO-LHEAT-01:ARM:")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@device_factory()
|
|
43
|
+
def beamstop() -> XYStage:
|
|
44
|
+
return XYStage(f"{PREFIX.beamline_prefix}-RS-ABSB-04:")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@device_factory()
|
|
48
|
+
def bs2() -> XYStage:
|
|
49
|
+
return XYStage(f"{PREFIX.beamline_prefix}-RS-ABSB-08:")
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@device_factory()
|
|
53
|
+
def bs3() -> XYZStage:
|
|
54
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-RS-ABSB-09:")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@device_factory()
|
|
58
|
+
def dcm() -> DCM:
|
|
59
|
+
return DCM(f"{PREFIX.beamline_prefix}-OP-DCM-01:")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@device_factory()
|
|
63
|
+
def det1z() -> Motor:
|
|
64
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-DIFF-01:ARM:DETECTOR:Z")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@device_factory()
|
|
68
|
+
def det2z() -> Motor:
|
|
69
|
+
"""Deliberately the same as eht2dtx"""
|
|
70
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-03:DETECTOR2:Z")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@device_factory()
|
|
74
|
+
def diffractometer() -> SixAxisGonioKappaPhi:
|
|
75
|
+
return SixAxisGonioKappaPhi(
|
|
76
|
+
prefix=f"{PREFIX.beamline_prefix}-MO-DIFF-01:SAMPLE:",
|
|
77
|
+
phi_infix="KPHI",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@device_factory()
|
|
82
|
+
def djack1() -> JackX:
|
|
83
|
+
return JackX(f"{PREFIX.beamline_prefix}-MO-DIFF-01:BASE:")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@device_factory()
|
|
87
|
+
def eht2dtx() -> Motor:
|
|
88
|
+
"""Deliberately the same as det2z"""
|
|
89
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-03:DETECTOR2:Z")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@device_factory()
|
|
93
|
+
def f2x() -> Motor:
|
|
94
|
+
return Motor(f"{PREFIX.beamline_prefix}-RS-ABSB-10:X")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@device_factory()
|
|
98
|
+
def fs() -> XYStage:
|
|
99
|
+
return XYStage(f"{PREFIX.beamline_prefix}-EA-SHTR-01:")
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@device_factory()
|
|
103
|
+
def fs2() -> XYStage:
|
|
104
|
+
return XYStage(f"{PREFIX.beamline_prefix}-EA-SHTR-02:")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@device_factory()
|
|
108
|
+
def hfm() -> FocusingMirrorWithRoll:
|
|
109
|
+
return FocusingMirrorWithRoll(f"{PREFIX.beamline_prefix}-OP-HFM-01:")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@device_factory()
|
|
113
|
+
def laserboard() -> XYZStage:
|
|
114
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-MO-LHEAT-01:")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@device_factory()
|
|
118
|
+
def obj() -> UpstreamDownstreamPair:
|
|
119
|
+
return UpstreamDownstreamPair(f"{PREFIX.beamline_prefix}-MO-LHEAT-01:OBJ:")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@device_factory()
|
|
123
|
+
def opticds() -> XYStage:
|
|
124
|
+
return XYStage(f"{PREFIX.beamline_prefix}-MO-LHEAT-01:OPTIC:DS:")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@device_factory()
|
|
128
|
+
def opticus() -> XYStage:
|
|
129
|
+
return XYStage(f"{PREFIX.beamline_prefix}-MO-LHEAT-01:OPTIC:US:")
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@device_factory()
|
|
133
|
+
def pin3() -> XYStage:
|
|
134
|
+
return XYStage(f"{PREFIX.beamline_prefix}-AL-APTR-03:")
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@device_factory()
|
|
138
|
+
def pin() -> XYZPitchYawStage:
|
|
139
|
+
return XYZPitchYawStage(f"{PREFIX.beamline_prefix}-AL-APTR-02:")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
@device_factory()
|
|
143
|
+
def qbpm1() -> XYStage:
|
|
144
|
+
return XYStage(f"{PREFIX.beamline_prefix}-DI-QBPM-01:")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@device_factory()
|
|
148
|
+
def qbpm2() -> XYStage:
|
|
149
|
+
return XYStage(f"{PREFIX.beamline_prefix}-DI-QBPM-02:")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@device_factory()
|
|
153
|
+
def s1() -> Slits:
|
|
154
|
+
return Slits(
|
|
155
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-01:",
|
|
156
|
+
x_centre="X:CENTER",
|
|
157
|
+
y_centre="Y:CENTER",
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@device_factory()
|
|
162
|
+
def s2() -> Slits:
|
|
163
|
+
return Slits(
|
|
164
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-02:",
|
|
165
|
+
x_centre="X:CENTER",
|
|
166
|
+
y_centre="Y:CENTER",
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@device_factory()
|
|
171
|
+
def s4() -> Slits:
|
|
172
|
+
return Slits(
|
|
173
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-04:",
|
|
174
|
+
x_centre="X:CENTER",
|
|
175
|
+
y_centre="Y:CENTER",
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
@device_factory()
|
|
180
|
+
def s5() -> Slits:
|
|
181
|
+
return Slits(
|
|
182
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-05:",
|
|
183
|
+
x_centre="X:CENTER",
|
|
184
|
+
y_centre="Y:CENTER",
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@device_factory()
|
|
189
|
+
def s6() -> SlitsY:
|
|
190
|
+
return SlitsY(
|
|
191
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-06:",
|
|
192
|
+
y_centre="Y:CENTER",
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
@device_factory()
|
|
197
|
+
def s7() -> Slits:
|
|
198
|
+
return Slits(
|
|
199
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-07:",
|
|
200
|
+
x_centre="X:CENTER",
|
|
201
|
+
y_centre="Y:CENTER",
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
@device_factory()
|
|
206
|
+
def shd() -> XYZStage:
|
|
207
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-MO-SHEAD-01:")
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
@device_factory()
|
|
211
|
+
def shd2() -> XYZStage:
|
|
212
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-MO-SHEAD-02:")
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
@device_factory()
|
|
216
|
+
def shfm() -> FocusingMirrorHorizontal:
|
|
217
|
+
return FocusingMirrorHorizontal(f"{PREFIX.beamline_prefix}-OP-MIRR-03:HFM:")
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
@device_factory()
|
|
221
|
+
def skb() -> JackY:
|
|
222
|
+
return JackY(f"{PREFIX.beamline_prefix}-OP-MIRR-03:BASE:")
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
@device_factory()
|
|
226
|
+
def svfm() -> FocusingMirrorVertical:
|
|
227
|
+
return FocusingMirrorVertical(f"{PREFIX.beamline_prefix}-OP-MIRR-03:VFM:")
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
@device_factory()
|
|
231
|
+
def tab2jack() -> JackX:
|
|
232
|
+
return JackX(f"{PREFIX.beamline_prefix}-MO-TABLE-03:BASE:")
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@device_factory()
|
|
236
|
+
def vfm() -> FocusingMirror:
|
|
237
|
+
return FocusingMirror(f"{PREFIX.beamline_prefix}-OP-VFM-01:")
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
@device_factory()
|
|
241
|
+
def synchrotron() -> Synchrotron:
|
|
242
|
+
return Synchrotron()
|
dodal/beamlines/i15_1.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
from ophyd_async.epics.motor import Motor
|
|
2
|
+
|
|
3
|
+
from dodal.common.beamlines.beamline_utils import device_factory
|
|
4
|
+
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
5
|
+
from dodal.devices.i15.laue import LaueMonochrometer
|
|
6
|
+
from dodal.devices.i15.motors import NumberedTripleAxisStage
|
|
7
|
+
from dodal.devices.i15.multilayer_mirror import MultiLayerMirror
|
|
8
|
+
from dodal.devices.i15.rail import Rail
|
|
9
|
+
from dodal.devices.motors import XYPhiStage, XYStage, YZStage
|
|
10
|
+
from dodal.devices.slits import Slits
|
|
11
|
+
from dodal.devices.synchrotron import Synchrotron
|
|
12
|
+
from dodal.log import set_beamline as set_log_beamline
|
|
13
|
+
from dodal.utils import BeamlinePrefix, get_beamline_name
|
|
14
|
+
|
|
15
|
+
BL = get_beamline_name("i15-1") # Default used when not on a live beamline
|
|
16
|
+
PREFIX = BeamlinePrefix(BL, suffix="J")
|
|
17
|
+
set_log_beamline(BL) # Configure logging and util functions
|
|
18
|
+
set_utils_beamline(BL)
|
|
19
|
+
|
|
20
|
+
"""
|
|
21
|
+
Define device factory functions below this point.
|
|
22
|
+
A device factory function is any function that has a return type which conforms
|
|
23
|
+
to one or more Bluesky Protocols.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@device_factory()
|
|
28
|
+
def attY() -> NumberedTripleAxisStage:
|
|
29
|
+
return NumberedTripleAxisStage(
|
|
30
|
+
f"{PREFIX.beamline_prefix}-OP-ATTN-01:",
|
|
31
|
+
axis1_infix="STICK1",
|
|
32
|
+
axis2_infix="STICK2",
|
|
33
|
+
axis3_infix="STICK3",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@device_factory()
|
|
38
|
+
def baseY() -> Motor:
|
|
39
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-01:Y")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@device_factory()
|
|
43
|
+
def blowerY() -> Motor:
|
|
44
|
+
"""Same motor as blowerZ"""
|
|
45
|
+
return Motor(f"{PREFIX.beamline_prefix}-EA-BLOWR-01:TLATE")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@device_factory()
|
|
49
|
+
def blowerZ() -> Motor:
|
|
50
|
+
"""Same motor as blowerY"""
|
|
51
|
+
return Motor(f"{PREFIX.beamline_prefix}-EA-BLOWR-01:TLATE")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@device_factory()
|
|
55
|
+
def bs2() -> XYStage:
|
|
56
|
+
return XYStage(f"{PREFIX.beamline_prefix}-MO-SMAR-02:")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@device_factory()
|
|
60
|
+
def clean() -> XYStage:
|
|
61
|
+
return XYStage(f"{PREFIX.beamline_prefix}-MO-ABSB-01:CLEAN:")
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@device_factory()
|
|
65
|
+
def det2() -> YZStage:
|
|
66
|
+
return YZStage(f"{PREFIX.beamline_prefix}-EA-DET-02:")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@device_factory()
|
|
70
|
+
def envX() -> Motor:
|
|
71
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-01:ENV:X")
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@device_factory()
|
|
75
|
+
def f2y() -> Motor:
|
|
76
|
+
return Motor(f"{PREFIX.beamline_prefix}-OP-ATTN-02:Y")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@device_factory()
|
|
80
|
+
def m1() -> MultiLayerMirror:
|
|
81
|
+
return MultiLayerMirror(f"{PREFIX.beamline_prefix}-OP-MIRR-01:")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@device_factory()
|
|
85
|
+
def rail() -> Rail:
|
|
86
|
+
return Rail(f"{PREFIX.beamline_prefix}-MO-RAIL-01:")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@device_factory(skip=True)
|
|
90
|
+
def sam() -> XYPhiStage:
|
|
91
|
+
return XYPhiStage(f"{PREFIX.beamline_prefix}-MO-TABLE-01:SAMPLE:", phi_infix="PHI2")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@device_factory()
|
|
95
|
+
def slits_1() -> Slits:
|
|
96
|
+
return Slits(
|
|
97
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-01:",
|
|
98
|
+
x_centre="X:CENTER",
|
|
99
|
+
y_centre="Y:CENTER",
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@device_factory()
|
|
104
|
+
def slits_2() -> Slits:
|
|
105
|
+
return Slits(
|
|
106
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-02:",
|
|
107
|
+
x_centre="X:CENTER",
|
|
108
|
+
y_centre="Y:CENTER",
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@device_factory()
|
|
113
|
+
def slits_3() -> Slits:
|
|
114
|
+
return Slits(
|
|
115
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-03:",
|
|
116
|
+
x_centre="X:CENTER",
|
|
117
|
+
y_centre="Y:CENTER",
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
@device_factory()
|
|
122
|
+
def slits_4() -> Slits:
|
|
123
|
+
return Slits(
|
|
124
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-04:",
|
|
125
|
+
x_centre="X:CENTER",
|
|
126
|
+
y_centre="Y:CENTER",
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@device_factory()
|
|
131
|
+
def slits_5() -> Slits:
|
|
132
|
+
return Slits(
|
|
133
|
+
prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-05:",
|
|
134
|
+
x_centre="X:CENTER",
|
|
135
|
+
y_centre="Y:CENTER",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
@device_factory()
|
|
140
|
+
def synchrotron() -> Synchrotron:
|
|
141
|
+
return Synchrotron()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@device_factory()
|
|
145
|
+
def tth() -> Motor:
|
|
146
|
+
return Motor(f"{PREFIX.beamline_prefix}-MO-TABLE-01:TTH")
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@device_factory()
|
|
150
|
+
def trans() -> XYPhiStage:
|
|
151
|
+
return XYPhiStage(prefix=f"{PREFIX.beamline_prefix}-MO-TABLE-01:TRANS:")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@device_factory()
|
|
155
|
+
def xtal() -> LaueMonochrometer:
|
|
156
|
+
return LaueMonochrometer(prefix=f"{PREFIX.beamline_prefix}-OP-LAUE-01:")
|
dodal/beamlines/i19_1.py
CHANGED
|
@@ -58,6 +58,8 @@ def oav() -> OAVBeamCentreFile:
|
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
# NOTE EH1 uses the Zebra 2 box. While a Zebra 1 box exists and is connected
|
|
62
|
+
# on the beamline, it is currently not in use
|
|
61
63
|
@device_factory()
|
|
62
64
|
def zebra() -> Zebra:
|
|
63
65
|
"""Get the i19-1 zebra device, instantiate it if it hasn't already been.
|
|
@@ -65,7 +67,7 @@ def zebra() -> Zebra:
|
|
|
65
67
|
"""
|
|
66
68
|
return Zebra(
|
|
67
69
|
mapping=I19_1_ZEBRA_MAPPING,
|
|
68
|
-
prefix=f"{PREFIX.beamline_prefix}-EA-ZEBRA-
|
|
70
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-ZEBRA-02:",
|
|
69
71
|
)
|
|
70
72
|
|
|
71
73
|
|
dodal/beamlines/i19_2.py
CHANGED
dodal/devices/i15/dcm.py
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from typing import Generic, TypeVar
|
|
2
|
+
|
|
3
|
+
from ophyd_async.core import StandardReadable
|
|
4
|
+
from ophyd_async.epics.motor import Motor
|
|
5
|
+
|
|
6
|
+
from dodal.devices.common_dcm import (
|
|
7
|
+
StationaryCrystal,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ThetaYCrystal(StationaryCrystal):
|
|
12
|
+
def __init__(self, prefix):
|
|
13
|
+
with self.add_children_as_readables():
|
|
14
|
+
self.theta = Motor(prefix + "THETA")
|
|
15
|
+
self.y = Motor(prefix + "Y")
|
|
16
|
+
super().__init__(prefix)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ThetaRollYZCrystal(ThetaYCrystal):
|
|
20
|
+
def __init__(self, prefix):
|
|
21
|
+
with self.add_children_as_readables():
|
|
22
|
+
self.roll = Motor(prefix + "ROLL")
|
|
23
|
+
self.z = Motor(prefix + "Z")
|
|
24
|
+
super().__init__(prefix)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Xtal_1 = TypeVar("Xtal_1", bound=StationaryCrystal)
|
|
28
|
+
Xtal_2 = TypeVar("Xtal_2", bound=StationaryCrystal)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class DualCrystalMonoSimple(StandardReadable, Generic[Xtal_1, Xtal_2]):
|
|
32
|
+
"""
|
|
33
|
+
Device for simple double crystal monochromators (DCM), which only allow energy of the beam to be selected.
|
|
34
|
+
|
|
35
|
+
Features common across all DCM's should include virtual motors to set energy/wavelength and contain two crystals,
|
|
36
|
+
each of which can be movable. Some DCM's contain crystals with roll motors, and some contain crystals with roll and pitch motors.
|
|
37
|
+
This base device accounts for all combinations of this.
|
|
38
|
+
|
|
39
|
+
This device is more able to act as a parent for beamline-specific DCM's, in which any other missing signals can be added,
|
|
40
|
+
as it doesn't assume WAVELENGTH, BRAGG and OFFSET are available for all DCM deivces, as BaseDCM does.
|
|
41
|
+
|
|
42
|
+
Bluesky plans using DCM's should be typed to specify which types of crystals are required. For example, a plan
|
|
43
|
+
which only requires one crystal which can roll should be typed 'def my_plan(dcm: BaseDCM[RollCrystal, StationaryCrystal])`
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def __init__(
|
|
47
|
+
self, prefix: str, xtal_1: type[Xtal_1], xtal_2: type[Xtal_2], name: str = ""
|
|
48
|
+
) -> None:
|
|
49
|
+
with self.add_children_as_readables():
|
|
50
|
+
# Virtual motor PV's which set the physical motors so that the DCM produces requested
|
|
51
|
+
# wavelength/energy
|
|
52
|
+
self.energy_in_kev = Motor(prefix + "ENERGY")
|
|
53
|
+
self._make_crystals(prefix, xtal_1, xtal_2)
|
|
54
|
+
|
|
55
|
+
super().__init__(name)
|
|
56
|
+
|
|
57
|
+
# Prefix convention is different depending on whether there are one or two controllable crystals
|
|
58
|
+
def _make_crystals(self, prefix: str, xtal_1: type[Xtal_1], xtal_2: type[Xtal_2]):
|
|
59
|
+
if StationaryCrystal not in [xtal_1, xtal_2]:
|
|
60
|
+
self.xtal_1 = xtal_1(f"{prefix}XTAL1:")
|
|
61
|
+
self.xtal_2 = xtal_2(f"{prefix}XTAL2:")
|
|
62
|
+
else:
|
|
63
|
+
self.xtal_1 = xtal_1(prefix)
|
|
64
|
+
self.xtal_2 = xtal_2(prefix)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class DCM(DualCrystalMonoSimple[ThetaRollYZCrystal, ThetaYCrystal]):
|
|
68
|
+
"""
|
|
69
|
+
A double crystal monocromator device, used to select the beam energy.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
def __init__(self, prefix: str, name: str = "") -> None:
|
|
73
|
+
with self.add_children_as_readables():
|
|
74
|
+
self.calibrated_energy_in_kev = Motor(prefix + "CAL")
|
|
75
|
+
self.x1 = Motor(prefix + "X1")
|
|
76
|
+
|
|
77
|
+
super().__init__(prefix, ThetaRollYZCrystal, ThetaYCrystal, name)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FocusingMirrorBase(StandardReadable):
|
|
6
|
+
"""Focusing Mirror with curve, ellip & pitch"""
|
|
7
|
+
|
|
8
|
+
def __init__(
|
|
9
|
+
self,
|
|
10
|
+
prefix: str,
|
|
11
|
+
name: str = "",
|
|
12
|
+
):
|
|
13
|
+
with self.add_children_as_readables():
|
|
14
|
+
self.curve = Motor(prefix + "CURVE")
|
|
15
|
+
self.ellipticity = Motor(prefix + "ELLIP")
|
|
16
|
+
self.pitch = Motor(prefix + "PITCH")
|
|
17
|
+
|
|
18
|
+
super().__init__(name)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class FocusingMirrorHorizontal(FocusingMirrorBase):
|
|
22
|
+
"""Focusing Mirror with curve, ellip, pitch & X"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
prefix: str,
|
|
27
|
+
name: str = "",
|
|
28
|
+
):
|
|
29
|
+
with self.add_children_as_readables():
|
|
30
|
+
self.x = Motor(prefix + "X")
|
|
31
|
+
|
|
32
|
+
super().__init__(prefix, name)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class FocusingMirrorVertical(FocusingMirrorBase):
|
|
36
|
+
"""Focusing Mirror with curve, ellip, pitch & Y"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
prefix: str,
|
|
41
|
+
name: str = "",
|
|
42
|
+
):
|
|
43
|
+
with self.add_children_as_readables():
|
|
44
|
+
self.y = Motor(prefix + "Y")
|
|
45
|
+
|
|
46
|
+
super().__init__(prefix, name)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class FocusingMirror(FocusingMirrorBase):
|
|
50
|
+
"""Focusing Mirror with curve, ellip, pitch, yaw, X & Y"""
|
|
51
|
+
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
prefix: str,
|
|
55
|
+
name: str = "",
|
|
56
|
+
):
|
|
57
|
+
with self.add_children_as_readables():
|
|
58
|
+
self.yaw = Motor(prefix + "YAW")
|
|
59
|
+
self.x = Motor(prefix + "X")
|
|
60
|
+
self.y = Motor(prefix + "Y")
|
|
61
|
+
|
|
62
|
+
super().__init__(prefix, name)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class FocusingMirrorWithRoll(FocusingMirror):
|
|
66
|
+
"""Focusing Mirror with curve, ellip, pitch, roll, yaw, X & Y"""
|
|
67
|
+
|
|
68
|
+
def __init__(self, prefix: str, name: str = "") -> None:
|
|
69
|
+
with self.add_children_as_readables():
|
|
70
|
+
self.roll = Motor(prefix + "ROLL")
|
|
71
|
+
super().__init__(prefix, name)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class JackX(StandardReadable):
|
|
6
|
+
"""Focusing Mirror"""
|
|
7
|
+
|
|
8
|
+
def __init__(
|
|
9
|
+
self,
|
|
10
|
+
prefix: str,
|
|
11
|
+
name: str = "",
|
|
12
|
+
):
|
|
13
|
+
with self.add_children_as_readables():
|
|
14
|
+
self.rotation = Motor(prefix + "Ry")
|
|
15
|
+
self.transx = Motor(prefix + "X")
|
|
16
|
+
self.y1 = Motor(prefix + "Y1")
|
|
17
|
+
self.y2 = Motor(prefix + "Y2")
|
|
18
|
+
self.y3 = Motor(prefix + "Y3")
|
|
19
|
+
|
|
20
|
+
super().__init__(name)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class JackY(StandardReadable):
|
|
24
|
+
"""Focusing Mirror"""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
prefix: str,
|
|
29
|
+
name: str = "",
|
|
30
|
+
):
|
|
31
|
+
with self.add_children_as_readables():
|
|
32
|
+
self.j1 = Motor(prefix + "J1")
|
|
33
|
+
self.j2 = Motor(prefix + "J2")
|
|
34
|
+
self.j3 = Motor(prefix + "J3")
|
|
35
|
+
self.pitch = Motor(prefix + "PITCH")
|
|
36
|
+
self.roll = Motor(prefix + "ROLL")
|
|
37
|
+
self.y = Motor(prefix + "Y")
|
|
38
|
+
|
|
39
|
+
super().__init__(name)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class LaueMonochrometer(StandardReadable):
|
|
6
|
+
def __init__(
|
|
7
|
+
self,
|
|
8
|
+
prefix: str,
|
|
9
|
+
name: str = "",
|
|
10
|
+
):
|
|
11
|
+
with self.add_children_as_readables():
|
|
12
|
+
self.bend = Motor(prefix + "BENDER")
|
|
13
|
+
self.bragg = Motor(prefix + "PITCH")
|
|
14
|
+
self.roll = Motor(prefix + "ROLL")
|
|
15
|
+
self.yaw = Motor(prefix + "YAW")
|
|
16
|
+
self.y = Motor(prefix + "Y")
|
|
17
|
+
|
|
18
|
+
super().__init__(name)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from ophyd_async.epics.motor import Motor
|
|
2
|
+
|
|
3
|
+
from dodal.devices.motors import Stage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class UpstreamDownstreamPair(Stage):
|
|
7
|
+
def __init__(self, prefix: str, name: str = ""):
|
|
8
|
+
with self.add_children_as_readables():
|
|
9
|
+
self.upstream = Motor(prefix + "US")
|
|
10
|
+
self.downstream = Motor(prefix + "DS")
|
|
11
|
+
super().__init__(name=name)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class NumberedTripleAxisStage(Stage):
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
prefix: str,
|
|
18
|
+
name: str = "",
|
|
19
|
+
axis1_infix: str = "AXIS1",
|
|
20
|
+
axis2_infix: str = "AXIS2",
|
|
21
|
+
axis3_infix: str = "AXIS3",
|
|
22
|
+
):
|
|
23
|
+
with self.add_children_as_readables():
|
|
24
|
+
self.axis1 = Motor(prefix + axis1_infix)
|
|
25
|
+
self.axis2 = Motor(prefix + axis2_infix)
|
|
26
|
+
self.axis3 = Motor(prefix + axis3_infix)
|
|
27
|
+
super().__init__(name=name)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class MultiLayerMirror(StandardReadable):
|
|
6
|
+
"""Multilayer Mirror"""
|
|
7
|
+
|
|
8
|
+
def __init__(
|
|
9
|
+
self,
|
|
10
|
+
prefix: str,
|
|
11
|
+
name: str = "",
|
|
12
|
+
):
|
|
13
|
+
with self.add_children_as_readables():
|
|
14
|
+
self.ds_x = Motor(prefix + "X2")
|
|
15
|
+
self.ds_y = Motor(prefix + "J3")
|
|
16
|
+
self.ib_y = Motor(prefix + "J1")
|
|
17
|
+
self.ob_y = Motor(prefix + "J2")
|
|
18
|
+
self.pitch = Motor(prefix + "PITCH")
|
|
19
|
+
self.roll = Motor(prefix + "ROLL")
|
|
20
|
+
self.us_x = Motor(prefix + "X1")
|
|
21
|
+
self.x = Motor(prefix + "X")
|
|
22
|
+
self.y = Motor(prefix + "Y")
|
|
23
|
+
self.yaw = Motor(prefix + "YAW")
|
|
24
|
+
|
|
25
|
+
super().__init__(name)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Rail(StandardReadable):
|
|
6
|
+
def __init__(
|
|
7
|
+
self,
|
|
8
|
+
prefix: str,
|
|
9
|
+
name: str = "",
|
|
10
|
+
):
|
|
11
|
+
with self.add_children_as_readables():
|
|
12
|
+
self.pitch = Motor(prefix + "PITCH")
|
|
13
|
+
self.y = Motor(prefix + "Y")
|
|
14
|
+
self.y1 = Motor(prefix + "Y1")
|
|
15
|
+
self.y2 = Motor(prefix + "Y2")
|
|
16
|
+
|
|
17
|
+
super().__init__(name)
|
dodal/devices/motors.py
CHANGED
|
@@ -70,13 +70,27 @@ class XYZThetaStage(XYZStage):
|
|
|
70
70
|
x_infix: str = _X,
|
|
71
71
|
y_infix: str = _Y,
|
|
72
72
|
z_infix: str = _Z,
|
|
73
|
-
theta_infix: str =
|
|
73
|
+
theta_infix: str = "THETA",
|
|
74
74
|
) -> None:
|
|
75
75
|
with self.add_children_as_readables():
|
|
76
76
|
self.theta = Motor(prefix + theta_infix)
|
|
77
77
|
super().__init__(prefix, name, x_infix, y_infix, z_infix)
|
|
78
78
|
|
|
79
79
|
|
|
80
|
+
class XYPhiStage(XYStage):
|
|
81
|
+
def __init__(
|
|
82
|
+
self,
|
|
83
|
+
prefix: str,
|
|
84
|
+
x_infix: str = _X,
|
|
85
|
+
y_infix: str = _Y,
|
|
86
|
+
phi_infix: str = "PHI",
|
|
87
|
+
name: str = "",
|
|
88
|
+
) -> None:
|
|
89
|
+
with self.add_children_as_readables():
|
|
90
|
+
self.phi = Motor(prefix + phi_infix)
|
|
91
|
+
super().__init__(prefix, name, x_infix, y_infix)
|
|
92
|
+
|
|
93
|
+
|
|
80
94
|
class XYPitchStage(XYStage):
|
|
81
95
|
def __init__(
|
|
82
96
|
self,
|
|
@@ -91,6 +105,23 @@ class XYPitchStage(XYStage):
|
|
|
91
105
|
super().__init__(prefix, name, x_infix, y_infix)
|
|
92
106
|
|
|
93
107
|
|
|
108
|
+
class XYZPitchYawStage(XYZStage):
|
|
109
|
+
def __init__(
|
|
110
|
+
self,
|
|
111
|
+
prefix: str,
|
|
112
|
+
name: str = "",
|
|
113
|
+
x_infix: str = _X,
|
|
114
|
+
y_infix: str = _Y,
|
|
115
|
+
z_infix: str = _Z,
|
|
116
|
+
pitch_infix="PITCH",
|
|
117
|
+
yaw_infix="YAW",
|
|
118
|
+
):
|
|
119
|
+
with self.add_children_as_readables():
|
|
120
|
+
self.pitch = Motor(prefix + pitch_infix)
|
|
121
|
+
self.yaw = Motor(prefix + yaw_infix)
|
|
122
|
+
super().__init__(prefix, name, x_infix, y_infix, z_infix)
|
|
123
|
+
|
|
124
|
+
|
|
94
125
|
class XYZPitchYawRollStage(XYZStage):
|
|
95
126
|
def __init__(
|
|
96
127
|
self,
|
|
@@ -136,6 +167,26 @@ class SixAxisGonio(XYZStage):
|
|
|
136
167
|
)
|
|
137
168
|
|
|
138
169
|
|
|
170
|
+
class SixAxisGonioKappaPhi(XYZStage):
|
|
171
|
+
def __init__(
|
|
172
|
+
self,
|
|
173
|
+
prefix: str,
|
|
174
|
+
name: str = "",
|
|
175
|
+
x_infix: str = _X,
|
|
176
|
+
y_infix: str = _Y,
|
|
177
|
+
z_infix: str = _Z,
|
|
178
|
+
kappa_infix: str = "KAPPA",
|
|
179
|
+
phi_infix: str = "PHI",
|
|
180
|
+
):
|
|
181
|
+
"""Six-axis goniometer with a standard xyz stage and two axes of rotation:
|
|
182
|
+
kappa and phi.
|
|
183
|
+
"""
|
|
184
|
+
with self.add_children_as_readables():
|
|
185
|
+
self.kappa = Motor(prefix + kappa_infix)
|
|
186
|
+
self.phi = Motor(prefix + phi_infix)
|
|
187
|
+
super().__init__(prefix, name, x_infix, y_infix, z_infix)
|
|
188
|
+
|
|
189
|
+
|
|
139
190
|
class YZStage(Stage):
|
|
140
191
|
def __init__(
|
|
141
192
|
self, prefix: str, name: str = "", y_infix: str = _Y, z_infix: str = _Z
|
dodal/devices/slits.py
CHANGED
|
@@ -37,3 +37,21 @@ class Slits(MinimalSlits):
|
|
|
37
37
|
self.x_centre = Motor(prefix + x_centre)
|
|
38
38
|
self.y_centre = Motor(prefix + y_centre)
|
|
39
39
|
super().__init__(prefix=prefix, x_gap=x_gap, y_gap=y_gap, name=name)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class SlitsY(StandardReadable):
|
|
43
|
+
"""
|
|
44
|
+
Representation of a 2-blade slits.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
prefix: str,
|
|
50
|
+
y_gap: str = "Y:SIZE",
|
|
51
|
+
y_centre: str = "Y:CENTRE",
|
|
52
|
+
name: str = "",
|
|
53
|
+
) -> None:
|
|
54
|
+
with self.add_children_as_readables():
|
|
55
|
+
self.y_gap = Motor(prefix + y_gap)
|
|
56
|
+
self.y_centre = Motor(prefix + y_centre)
|
|
57
|
+
super().__init__(name=name)
|
dodal/devices/v2f.py
CHANGED
|
@@ -10,13 +10,13 @@ class V2FGain(StrictEnum):
|
|
|
10
10
|
LOW_NOISE7 = "10^7 low noise"
|
|
11
11
|
LOW_NOISE8 = "10^8 low noise"
|
|
12
12
|
LOW_NOISE9 = "10^9 low noise"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
HIGH_SPEED5 = "10^5 high speed"
|
|
14
|
+
HIGH_SPEED6 = "10^6 high speed"
|
|
15
|
+
HIGH_SPEED7 = "10^7 high speed"
|
|
16
|
+
HIGH_SPEED8 = "10^8 high speed"
|
|
17
|
+
HIGH_SPEED9 = "10^9 high speed"
|
|
18
|
+
HIGH_SPEED10 = "10^10 high spd"
|
|
19
|
+
HIGH_SPEED11 = "10^11 high spd"
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class QDV2F(StandardReadable):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|