dls-dodal 1.55.0__py3-none-any.whl → 1.56.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.55.0.dist-info → dls_dodal-1.56.0.dist-info}/METADATA +3 -3
- {dls_dodal-1.55.0.dist-info → dls_dodal-1.56.0.dist-info}/RECORD +100 -86
- dodal/_version.py +2 -2
- dodal/beamlines/b01_1.py +6 -13
- dodal/beamlines/b07.py +2 -1
- dodal/beamlines/b07_1.py +2 -1
- dodal/beamlines/b21.py +4 -24
- dodal/beamlines/i03.py +53 -53
- dodal/beamlines/i04.py +16 -38
- dodal/beamlines/i09.py +3 -2
- dodal/beamlines/i09_1.py +2 -1
- dodal/beamlines/i11.py +143 -0
- dodal/beamlines/i19_1.py +1 -0
- dodal/beamlines/i19_2.py +7 -0
- dodal/beamlines/i22.py +2 -2
- dodal/beamlines/i23.py +3 -3
- dodal/beamlines/i24.py +6 -14
- dodal/beamlines/p38.py +1 -0
- dodal/beamlines/p60.py +3 -2
- dodal/cli.py +11 -1
- dodal/common/__init__.py +4 -0
- dodal/common/beamlines/beamline_parameters.py +1 -1
- dodal/common/beamlines/beamline_utils.py +5 -1
- dodal/common/enums.py +19 -0
- dodal/common/watcher_utils.py +83 -0
- dodal/devices/aithre_lasershaping/laser_robot.py +4 -9
- dodal/devices/aperturescatterguard.py +52 -12
- dodal/devices/apple2_undulator.py +0 -1
- dodal/devices/attenuator/attenuator.py +3 -1
- dodal/devices/b16/detector.py +1 -10
- dodal/devices/backlight.py +8 -20
- dodal/devices/bimorph_mirror.py +4 -7
- dodal/devices/collimation_table.py +36 -0
- dodal/devices/controllers.py +21 -0
- dodal/devices/cryostream.py +97 -7
- dodal/devices/current_amplifiers/femto.py +1 -1
- dodal/devices/detector/detector_motion.py +1 -7
- dodal/devices/eiger.py +22 -8
- dodal/devices/eiger_odin.py +2 -0
- dodal/devices/electron_analyser/__init__.py +2 -1
- dodal/devices/electron_analyser/abstract/__init__.py +0 -1
- dodal/devices/electron_analyser/abstract/base_detector.py +3 -25
- dodal/devices/electron_analyser/abstract/base_driver_io.py +18 -9
- dodal/devices/electron_analyser/abstract/base_region.py +34 -3
- dodal/devices/electron_analyser/detector.py +24 -0
- dodal/devices/electron_analyser/enums.py +5 -0
- dodal/devices/electron_analyser/specs/detector.py +2 -1
- dodal/devices/electron_analyser/specs/driver_io.py +21 -26
- dodal/devices/electron_analyser/specs/region.py +1 -1
- dodal/devices/electron_analyser/util.py +20 -0
- dodal/devices/electron_analyser/vgscienta/__init__.py +3 -3
- dodal/devices/electron_analyser/vgscienta/detector.py +2 -1
- dodal/devices/electron_analyser/vgscienta/driver_io.py +24 -32
- dodal/devices/electron_analyser/vgscienta/enums.py +0 -8
- dodal/devices/electron_analyser/vgscienta/region.py +2 -31
- dodal/devices/eurotherm.py +126 -0
- dodal/devices/fluorescence_detector_motion.py +3 -10
- dodal/devices/focusing_mirror.py +1 -1
- dodal/devices/i03/undulator_dcm.py +0 -1
- dodal/devices/i09/enums.py +8 -8
- dodal/devices/i10/diagnostics.py +4 -4
- dodal/devices/i10/i10_apple2.py +3 -6
- dodal/devices/i11/cyberstar_blower.py +34 -0
- dodal/devices/i11/diff_stages.py +55 -0
- dodal/devices/i11/mythen.py +165 -0
- dodal/devices/i11/nx100robot.py +153 -0
- dodal/devices/i11/spinner.py +30 -0
- dodal/devices/i13_1/merlin_controller.py +4 -4
- dodal/devices/i19/diffractometer.py +34 -0
- dodal/devices/i19/shutter.py +11 -1
- dodal/devices/i22/dcm.py +1 -1
- dodal/devices/i22/fswitch.py +3 -12
- dodal/devices/i24/aperture.py +3 -3
- dodal/devices/i24/dcm.py +11 -15
- dodal/devices/i24/dual_backlight.py +11 -12
- dodal/devices/i24/pmac.py +8 -7
- dodal/devices/mx_phase1/beamstop.py +10 -11
- dodal/devices/oav/pin_image_recognition/__init__.py +0 -3
- dodal/devices/p60/enums.py +8 -8
- dodal/devices/p60/lab_xray_source.py +3 -2
- dodal/devices/pressure_jump_cell.py +77 -123
- dodal/devices/scintillator.py +76 -4
- dodal/devices/smargon.py +2 -2
- dodal/devices/synchrotron.py +1 -2
- dodal/devices/tetramm.py +13 -0
- dodal/devices/thawer.py +6 -11
- dodal/devices/undulator.py +3 -8
- dodal/devices/util/epics_util.py +1 -1
- dodal/devices/util/test_utils.py +19 -0
- dodal/devices/watsonmarlow323_pump.py +7 -7
- dodal/devices/xbpm_feedback.py +4 -6
- dodal/devices/xspress3/xspress3.py +0 -5
- dodal/devices/zocalo/zocalo_results.py +1 -3
- dodal/testing/__init__.py +0 -0
- dodal/testing/electron_analyser/__init__.py +6 -0
- dodal/testing/electron_analyser/device_factory.py +59 -0
- dodal/devices/CTAB.py +0 -41
- {dls_dodal-1.55.0.dist-info → dls_dodal-1.56.0.dist-info}/WHEEL +0 -0
- {dls_dodal-1.55.0.dist-info → dls_dodal-1.56.0.dist-info}/entry_points.txt +0 -0
- {dls_dodal-1.55.0.dist-info → dls_dodal-1.56.0.dist-info}/licenses/LICENSE +0 -0
- {dls_dodal-1.55.0.dist-info → dls_dodal-1.56.0.dist-info}/top_level.txt +0 -0
dodal/beamlines/i03.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from ophyd_async.core import Reference
|
|
1
2
|
from ophyd_async.fastcs.eiger import EigerDetector as FastEiger
|
|
2
3
|
from ophyd_async.fastcs.panda import HDFPanda
|
|
3
4
|
from yarl import URL
|
|
@@ -19,11 +20,13 @@ from dodal.devices.aperturescatterguard import (
|
|
|
19
20
|
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
|
|
20
21
|
from dodal.devices.backlight import Backlight
|
|
21
22
|
from dodal.devices.baton import Baton
|
|
23
|
+
from dodal.devices.collimation_table import CollimationTable
|
|
22
24
|
from dodal.devices.cryostream import CryoStream
|
|
23
25
|
from dodal.devices.detector.detector_motion import DetectorMotion
|
|
24
26
|
from dodal.devices.diamond_filter import DiamondFilter, I03Filters
|
|
25
27
|
from dodal.devices.eiger import EigerDetector
|
|
26
28
|
from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
|
|
29
|
+
from dodal.devices.fluorescence_detector_motion import FluorescenceDetector
|
|
27
30
|
from dodal.devices.flux import Flux
|
|
28
31
|
from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
|
|
29
32
|
from dodal.devices.i03 import Beamstop
|
|
@@ -36,6 +39,7 @@ from dodal.devices.oav.pin_image_recognition import PinTipDetection
|
|
|
36
39
|
from dodal.devices.qbpm import QBPM
|
|
37
40
|
from dodal.devices.robot import BartRobot
|
|
38
41
|
from dodal.devices.s4_slit_gaps import S4SlitGaps
|
|
42
|
+
from dodal.devices.scintillator import Scintillator
|
|
39
43
|
from dodal.devices.smargon import Smargon
|
|
40
44
|
from dodal.devices.synchrotron import Synchrotron
|
|
41
45
|
from dodal.devices.thawer import Thawer
|
|
@@ -82,7 +86,8 @@ def aperture_scatterguard() -> ApertureScatterguard:
|
|
|
82
86
|
"""
|
|
83
87
|
params = get_beamline_parameters()
|
|
84
88
|
return ApertureScatterguard(
|
|
85
|
-
|
|
89
|
+
aperture_prefix=f"{PREFIX.beamline_prefix}-MO-MAPT-01:",
|
|
90
|
+
scatterguard_prefix=f"{PREFIX.beamline_prefix}-MO-SCAT-01:",
|
|
86
91
|
loaded_positions=load_positions_from_beamline_parameters(params),
|
|
87
92
|
tolerances=AperturePosition.tolerances_from_gda_params(params),
|
|
88
93
|
)
|
|
@@ -115,9 +120,7 @@ def dcm() -> DCM:
|
|
|
115
120
|
"""Get the i03 DCM device, instantiate it if it hasn't already been.
|
|
116
121
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
117
122
|
"""
|
|
118
|
-
return DCM(
|
|
119
|
-
prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
120
|
-
)
|
|
123
|
+
return DCM(prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:")
|
|
121
124
|
|
|
122
125
|
|
|
123
126
|
@device_factory()
|
|
@@ -153,7 +156,8 @@ def detector_motion() -> DetectorMotion:
|
|
|
153
156
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
154
157
|
"""
|
|
155
158
|
return DetectorMotion(
|
|
156
|
-
|
|
159
|
+
device_prefix=f"{PREFIX.beamline_prefix}-MO-DET-01:",
|
|
160
|
+
pmac_prefix=f"{PREFIX.beamline_prefix}-MO-PMAC-02:",
|
|
157
161
|
)
|
|
158
162
|
|
|
159
163
|
|
|
@@ -191,9 +195,7 @@ def zebra_fast_grid_scan() -> ZebraFastGridScan:
|
|
|
191
195
|
"""Get the i03 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
|
|
192
196
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
193
197
|
"""
|
|
194
|
-
return ZebraFastGridScan(
|
|
195
|
-
prefix=f"{PREFIX.beamline_prefix}-MO-SGON-01:",
|
|
196
|
-
)
|
|
198
|
+
return ZebraFastGridScan(prefix=f"{PREFIX.beamline_prefix}-MO-SGON-01:")
|
|
197
199
|
|
|
198
200
|
|
|
199
201
|
@device_factory()
|
|
@@ -202,9 +204,7 @@ def panda_fast_grid_scan() -> PandAFastGridScan:
|
|
|
202
204
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
203
205
|
This is used instead of the zebra_fast_grid_scan device when using the PandA.
|
|
204
206
|
"""
|
|
205
|
-
return PandAFastGridScan(
|
|
206
|
-
prefix=f"{PREFIX.beamline_prefix}-MO-SGON-01:",
|
|
207
|
-
)
|
|
207
|
+
return PandAFastGridScan(prefix=f"{PREFIX.beamline_prefix}-MO-SGON-01:")
|
|
208
208
|
|
|
209
209
|
|
|
210
210
|
@device_factory()
|
|
@@ -225,9 +225,7 @@ def pin_tip_detection() -> PinTipDetection:
|
|
|
225
225
|
"""Get the i03 pin tip detection device, instantiate it if it hasn't already been.
|
|
226
226
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
227
227
|
"""
|
|
228
|
-
return PinTipDetection(
|
|
229
|
-
f"{PREFIX.beamline_prefix}-DI-OAV-01:",
|
|
230
|
-
)
|
|
228
|
+
return PinTipDetection(f"{PREFIX.beamline_prefix}-DI-OAV-01:")
|
|
231
229
|
|
|
232
230
|
|
|
233
231
|
@device_factory()
|
|
@@ -243,9 +241,7 @@ def s4_slit_gaps() -> S4SlitGaps:
|
|
|
243
241
|
"""Get the i03 s4_slit_gaps device, instantiate it if it hasn't already been.
|
|
244
242
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
245
243
|
"""
|
|
246
|
-
return S4SlitGaps(
|
|
247
|
-
f"{PREFIX.beamline_prefix}-AL-SLITS-04:",
|
|
248
|
-
)
|
|
244
|
+
return S4SlitGaps(f"{PREFIX.beamline_prefix}-AL-SLITS-04:")
|
|
249
245
|
|
|
250
246
|
|
|
251
247
|
@device_factory()
|
|
@@ -280,7 +276,6 @@ def undulator_dcm(daq_configuration_path: str | None = None) -> UndulatorDCM:
|
|
|
280
276
|
else undulator()
|
|
281
277
|
)
|
|
282
278
|
return UndulatorDCM(
|
|
283
|
-
prefix=PREFIX.beamline_prefix,
|
|
284
279
|
undulator=undulator_singleton,
|
|
285
280
|
dcm=dcm(),
|
|
286
281
|
daq_configuration_path=daq_configuration_path or DAQ_CONFIGURATION_PATH,
|
|
@@ -303,9 +298,7 @@ def xspress3mini() -> Xspress3:
|
|
|
303
298
|
"""Get the i03 Xspress3Mini device, instantiate it if it hasn't already been.
|
|
304
299
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
305
300
|
"""
|
|
306
|
-
return Xspress3(
|
|
307
|
-
f"{PREFIX.beamline_prefix}-EA-XSP3-01:",
|
|
308
|
-
)
|
|
301
|
+
return Xspress3(f"{PREFIX.beamline_prefix}-EA-XSP3-01:")
|
|
309
302
|
|
|
310
303
|
|
|
311
304
|
@device_factory()
|
|
@@ -324,9 +317,7 @@ def sample_shutter() -> ZebraShutter:
|
|
|
324
317
|
"""Get the i03 sample shutter device, instantiate it if it hasn't already been.
|
|
325
318
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
326
319
|
"""
|
|
327
|
-
return ZebraShutter(
|
|
328
|
-
f"{PREFIX.beamline_prefix}-EA-SHTR-01:",
|
|
329
|
-
)
|
|
320
|
+
return ZebraShutter(f"{PREFIX.beamline_prefix}-EA-SHTR-01:")
|
|
330
321
|
|
|
331
322
|
|
|
332
323
|
@device_factory()
|
|
@@ -334,9 +325,7 @@ def flux() -> Flux:
|
|
|
334
325
|
"""Get the i03 flux device, instantiate it if it hasn't already been.
|
|
335
326
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
336
327
|
"""
|
|
337
|
-
return Flux(
|
|
338
|
-
f"{PREFIX.beamline_prefix}-MO-FLUX-01:",
|
|
339
|
-
)
|
|
328
|
+
return Flux(f"{PREFIX.beamline_prefix}-MO-FLUX-01:")
|
|
340
329
|
|
|
341
330
|
|
|
342
331
|
@device_factory()
|
|
@@ -344,9 +333,7 @@ def xbpm_feedback() -> XBPMFeedback:
|
|
|
344
333
|
"""Get the i03 XBPM feeback device, instantiate it if it hasn't already been.
|
|
345
334
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
346
335
|
"""
|
|
347
|
-
return XBPMFeedback(
|
|
348
|
-
PREFIX.beamline_prefix,
|
|
349
|
-
)
|
|
336
|
+
return XBPMFeedback(f"{PREFIX.beamline_prefix}-EA-FDBK-01:")
|
|
350
337
|
|
|
351
338
|
|
|
352
339
|
@device_factory()
|
|
@@ -354,10 +341,7 @@ def zocalo() -> ZocaloResults:
|
|
|
354
341
|
"""Get the i03 ZocaloResults device, instantiate it if it hasn't already been.
|
|
355
342
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
356
343
|
"""
|
|
357
|
-
return ZocaloResults(
|
|
358
|
-
prefix=PREFIX.beamline_prefix,
|
|
359
|
-
results_source=ZocaloSource.GPU,
|
|
360
|
-
)
|
|
344
|
+
return ZocaloResults(results_source=ZocaloSource.GPU)
|
|
361
345
|
|
|
362
346
|
|
|
363
347
|
@device_factory()
|
|
@@ -365,9 +349,7 @@ def robot() -> BartRobot:
|
|
|
365
349
|
"""Get the i03 robot device, instantiate it if it hasn't already been.
|
|
366
350
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
367
351
|
"""
|
|
368
|
-
return BartRobot(
|
|
369
|
-
f"{PREFIX.beamline_prefix}-MO-ROBOT-01:",
|
|
370
|
-
)
|
|
352
|
+
return BartRobot(f"{PREFIX.beamline_prefix}-MO-ROBOT-01:")
|
|
371
353
|
|
|
372
354
|
|
|
373
355
|
@device_factory()
|
|
@@ -375,9 +357,7 @@ def webcam() -> Webcam:
|
|
|
375
357
|
"""Get the i03 webcam, instantiate it if it hasn't already been.
|
|
376
358
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
377
359
|
"""
|
|
378
|
-
return Webcam(
|
|
379
|
-
url=URL("http://i03-webcam1/axis-cgi/jpg/image.cgi"),
|
|
380
|
-
)
|
|
360
|
+
return Webcam(url=URL("http://i03-webcam1/axis-cgi/jpg/image.cgi"))
|
|
381
361
|
|
|
382
362
|
|
|
383
363
|
@device_factory()
|
|
@@ -385,9 +365,7 @@ def thawer() -> Thawer:
|
|
|
385
365
|
"""Get the i03 thawer, instantiate it if it hasn't already been.
|
|
386
366
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
387
367
|
"""
|
|
388
|
-
return Thawer(
|
|
389
|
-
f"{PREFIX.beamline_prefix}-EA-THAW-01",
|
|
390
|
-
)
|
|
368
|
+
return Thawer(f"{PREFIX.beamline_prefix}-EA-THAW-01")
|
|
391
369
|
|
|
392
370
|
|
|
393
371
|
@device_factory()
|
|
@@ -395,19 +373,15 @@ def lower_gonio() -> XYZStage:
|
|
|
395
373
|
"""Get the i03 lower gonio device, instantiate it if it hasn't already been.
|
|
396
374
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
397
375
|
"""
|
|
398
|
-
return XYZStage(
|
|
399
|
-
f"{PREFIX.beamline_prefix}-MO-GONP-01:",
|
|
400
|
-
)
|
|
376
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-MO-GONP-01:")
|
|
401
377
|
|
|
402
378
|
|
|
403
379
|
@device_factory()
|
|
404
|
-
def
|
|
380
|
+
def cryostream() -> CryoStream:
|
|
405
381
|
"""Get the i03 cryostream device, instantiate it if it hasn't already been.
|
|
406
382
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
407
383
|
"""
|
|
408
|
-
return CryoStream(
|
|
409
|
-
PREFIX.beamline_prefix,
|
|
410
|
-
)
|
|
384
|
+
return CryoStream(PREFIX.beamline_prefix)
|
|
411
385
|
|
|
412
386
|
|
|
413
387
|
@device_factory()
|
|
@@ -425,9 +399,7 @@ def qbpm() -> QBPM:
|
|
|
425
399
|
"""Get the i03 qbpm device, instantiate it if it hasn't already been.
|
|
426
400
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
427
401
|
"""
|
|
428
|
-
return QBPM(
|
|
429
|
-
f"{PREFIX.beamline_prefix}-DI-QBPM-01:",
|
|
430
|
-
)
|
|
402
|
+
return QBPM(f"{PREFIX.beamline_prefix}-DI-QBPM-01:")
|
|
431
403
|
|
|
432
404
|
|
|
433
405
|
@device_factory()
|
|
@@ -436,3 +408,31 @@ def baton() -> Baton:
|
|
|
436
408
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
437
409
|
"""
|
|
438
410
|
return Baton(f"{PREFIX.beamline_prefix}-CS-BATON-01:")
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
@device_factory()
|
|
414
|
+
def fluorescence_det_motion() -> FluorescenceDetector:
|
|
415
|
+
"""Get the i03 device for moving the fluorescence detector, instantiate it if it hasn't already been.
|
|
416
|
+
If this is called when already instantiated in i03, it will return the existing object.
|
|
417
|
+
"""
|
|
418
|
+
return FluorescenceDetector(f"{PREFIX.beamline_prefix}-EA-FLU-01:")
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
@device_factory()
|
|
422
|
+
def scintillator() -> Scintillator:
|
|
423
|
+
"""Get the i03 scintillator device, instantiate it if it hasn't already been.
|
|
424
|
+
If this is called when already instantiated in i03, it will return the existing object.
|
|
425
|
+
"""
|
|
426
|
+
return Scintillator(
|
|
427
|
+
f"{PREFIX.beamline_prefix}-MO-SCIN-01:",
|
|
428
|
+
Reference(aperture_scatterguard()),
|
|
429
|
+
get_beamline_parameters(),
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
@device_factory()
|
|
434
|
+
def collimation_table() -> CollimationTable:
|
|
435
|
+
"""Get the i03 device for moving the collimation table, instantiate it if it hasn't already been.
|
|
436
|
+
If this is called when already instantiated in i03, it will return the existing object.
|
|
437
|
+
"""
|
|
438
|
+
return CollimationTable(prefix=f"{PREFIX.beamline_prefix}-MO-TABLE-01")
|
dodal/beamlines/i04.py
CHANGED
|
@@ -70,9 +70,7 @@ def smargon() -> Smargon:
|
|
|
70
70
|
"""Get the i04 Smargon device, instantiate it if it hasn't already been.
|
|
71
71
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
72
72
|
"""
|
|
73
|
-
return Smargon(
|
|
74
|
-
f"{PREFIX.beamline_prefix}-MO-SGON-01:",
|
|
75
|
-
)
|
|
73
|
+
return Smargon(f"{PREFIX.beamline_prefix}-MO-SGON-01:")
|
|
76
74
|
|
|
77
75
|
|
|
78
76
|
@device_factory()
|
|
@@ -91,9 +89,7 @@ def sample_delivery_system() -> XYZStage:
|
|
|
91
89
|
"""Get the i04 sample_delivery_system device, instantiate it if it hasn't already been.
|
|
92
90
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
93
91
|
"""
|
|
94
|
-
return XYZStage(
|
|
95
|
-
f"{PREFIX.beamline_prefix}-MO-SDE-01:",
|
|
96
|
-
)
|
|
92
|
+
return XYZStage(f"{PREFIX.beamline_prefix}-MO-SDE-01:")
|
|
97
93
|
|
|
98
94
|
|
|
99
95
|
@device_factory()
|
|
@@ -101,9 +97,7 @@ def ipin() -> IPin:
|
|
|
101
97
|
"""Get the i04 ipin device, instantiate it if it hasn't already been.
|
|
102
98
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
103
99
|
"""
|
|
104
|
-
return IPin(
|
|
105
|
-
f"{PREFIX.beamline_prefix}-EA-PIN-01:",
|
|
106
|
-
)
|
|
100
|
+
return IPin(f"{PREFIX.beamline_prefix}-EA-PIN-01:")
|
|
107
101
|
|
|
108
102
|
|
|
109
103
|
@device_factory()
|
|
@@ -122,9 +116,7 @@ def sample_shutter() -> ZebraShutter:
|
|
|
122
116
|
"""Get the i04 sample shutter device, instantiate it if it hasn't already been.
|
|
123
117
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
124
118
|
"""
|
|
125
|
-
return ZebraShutter(
|
|
126
|
-
f"{PREFIX.beamline_prefix}-EA-SHTR-01:",
|
|
127
|
-
)
|
|
119
|
+
return ZebraShutter(f"{PREFIX.beamline_prefix}-EA-SHTR-01:")
|
|
128
120
|
|
|
129
121
|
|
|
130
122
|
@device_factory()
|
|
@@ -143,9 +135,7 @@ def transfocator() -> Transfocator:
|
|
|
143
135
|
"""Get the i04 transfocator device, instantiate it if it hasn't already been.
|
|
144
136
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
145
137
|
"""
|
|
146
|
-
return Transfocator(
|
|
147
|
-
f"{PREFIX.beamline_prefix}-MO-FSWT-01:",
|
|
148
|
-
)
|
|
138
|
+
return Transfocator(f"{PREFIX.beamline_prefix}-MO-FSWT-01:")
|
|
149
139
|
|
|
150
140
|
|
|
151
141
|
@device_factory()
|
|
@@ -153,9 +143,7 @@ def xbpm_feedback() -> XBPMFeedback:
|
|
|
153
143
|
"""Get the i04 xbpm_feedback device, instantiate it if it hasn't already been.
|
|
154
144
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
155
145
|
"""
|
|
156
|
-
return XBPMFeedback(
|
|
157
|
-
PREFIX.beamline_prefix,
|
|
158
|
-
)
|
|
146
|
+
return XBPMFeedback(f"{PREFIX.beamline_prefix}-EA-FDBK-01:")
|
|
159
147
|
|
|
160
148
|
|
|
161
149
|
@device_factory()
|
|
@@ -171,9 +159,7 @@ def dcm() -> DCM:
|
|
|
171
159
|
"""Get the i04 DCM device, instantiate it if it hasn't already been.
|
|
172
160
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
173
161
|
"""
|
|
174
|
-
return DCM(
|
|
175
|
-
f"{PREFIX.beamline_prefix}-MO-DCM-01:",
|
|
176
|
-
)
|
|
162
|
+
return DCM(f"{PREFIX.beamline_prefix}-MO-DCM-01:")
|
|
177
163
|
|
|
178
164
|
|
|
179
165
|
@device_factory()
|
|
@@ -181,9 +167,7 @@ def backlight() -> Backlight:
|
|
|
181
167
|
"""Get the i04 backlight device, instantiate it if it hasn't already been.
|
|
182
168
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
183
169
|
"""
|
|
184
|
-
return Backlight(
|
|
185
|
-
PREFIX.beamline_prefix,
|
|
186
|
-
)
|
|
170
|
+
return Backlight(PREFIX.beamline_prefix)
|
|
187
171
|
|
|
188
172
|
|
|
189
173
|
@device_factory()
|
|
@@ -194,7 +178,8 @@ def aperture_scatterguard() -> ApertureScatterguard:
|
|
|
194
178
|
"""
|
|
195
179
|
params = get_beamline_parameters()
|
|
196
180
|
return ApertureScatterguard(
|
|
197
|
-
|
|
181
|
+
aperture_prefix=f"{PREFIX.beamline_prefix}-MO-MAPT-01:",
|
|
182
|
+
scatterguard_prefix=f"{PREFIX.beamline_prefix}-MO-SCAT-01:",
|
|
198
183
|
loaded_positions=load_positions_from_beamline_parameters(params),
|
|
199
184
|
tolerances=AperturePosition.tolerances_from_gda_params(params),
|
|
200
185
|
)
|
|
@@ -226,9 +211,7 @@ def zebra_fast_grid_scan() -> ZebraFastGridScan:
|
|
|
226
211
|
"""Get the i04 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
|
|
227
212
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
228
213
|
"""
|
|
229
|
-
return ZebraFastGridScan(
|
|
230
|
-
prefix=f"{PREFIX.beamline_prefix}-MO-SGON-01:",
|
|
231
|
-
)
|
|
214
|
+
return ZebraFastGridScan(f"{PREFIX.beamline_prefix}-MO-SGON-01:")
|
|
232
215
|
|
|
233
216
|
|
|
234
217
|
@device_factory()
|
|
@@ -304,7 +287,8 @@ def detector_motion() -> DetectorMotion:
|
|
|
304
287
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
305
288
|
"""
|
|
306
289
|
return DetectorMotion(
|
|
307
|
-
|
|
290
|
+
device_prefix=f"{PREFIX.beamline_prefix}-MO-DET-01:",
|
|
291
|
+
pmac_prefix=f"{PREFIX.beamline_prefix}-MO-PMAC-02:",
|
|
308
292
|
)
|
|
309
293
|
|
|
310
294
|
|
|
@@ -313,9 +297,7 @@ def thawer() -> Thawer:
|
|
|
313
297
|
"""Get the i04 thawer, instantiate it if it hasn't already been.
|
|
314
298
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
315
299
|
"""
|
|
316
|
-
return Thawer(
|
|
317
|
-
f"{PREFIX.beamline_prefix}-EA-THAW-01",
|
|
318
|
-
)
|
|
300
|
+
return Thawer(f"{PREFIX.beamline_prefix}-EA-THAW-01")
|
|
319
301
|
|
|
320
302
|
|
|
321
303
|
@device_factory()
|
|
@@ -323,9 +305,7 @@ def robot() -> BartRobot:
|
|
|
323
305
|
"""Get the i04 robot device, instantiate it if it hasn't already been.
|
|
324
306
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
325
307
|
"""
|
|
326
|
-
return BartRobot(
|
|
327
|
-
f"{PREFIX.beamline_prefix}-MO-ROBOT-01:",
|
|
328
|
-
)
|
|
308
|
+
return BartRobot(f"{PREFIX.beamline_prefix}-MO-ROBOT-01:")
|
|
329
309
|
|
|
330
310
|
|
|
331
311
|
@device_factory()
|
|
@@ -376,6 +356,4 @@ def pin_tip_detection() -> PinTipDetection:
|
|
|
376
356
|
"""Get the i04 pin tip detection device, instantiate it if it hasn't already been.
|
|
377
357
|
If this is called when already instantiated in i04, it will return the existing object.
|
|
378
358
|
"""
|
|
379
|
-
return PinTipDetection(
|
|
380
|
-
f"{PREFIX.beamline_prefix}-DI-OAV-01:",
|
|
381
|
-
)
|
|
359
|
+
return PinTipDetection(f"{PREFIX.beamline_prefix}-DI-OAV-01:")
|
dodal/beamlines/i09.py
CHANGED
|
@@ -2,6 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
|
|
|
2
2
|
device_factory,
|
|
3
3
|
)
|
|
4
4
|
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
5
|
+
from dodal.devices.electron_analyser import SelectedSource
|
|
5
6
|
from dodal.devices.electron_analyser.vgscienta import VGScientaAnalyserDriverIO
|
|
6
7
|
from dodal.devices.i09 import DCM, Grating, LensMode, PassEnergy, PsuMode
|
|
7
8
|
from dodal.devices.pgm import PGM
|
|
@@ -38,8 +39,8 @@ def dcm() -> DCM:
|
|
|
38
39
|
@device_factory()
|
|
39
40
|
def analyser_driver() -> VGScientaAnalyserDriverIO[LensMode, PsuMode, PassEnergy]:
|
|
40
41
|
energy_sources = {
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
SelectedSource.SOURCE1: pgm().energy.user_readback,
|
|
43
|
+
SelectedSource.SOURCE2: dcm().energy_in_ev,
|
|
43
44
|
}
|
|
44
45
|
return VGScientaAnalyserDriverIO[LensMode, PsuMode, PassEnergy](
|
|
45
46
|
prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
|
dodal/beamlines/i09_1.py
CHANGED
|
@@ -2,6 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
|
|
|
2
2
|
device_factory,
|
|
3
3
|
)
|
|
4
4
|
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
5
|
+
from dodal.devices.electron_analyser import SelectedSource
|
|
5
6
|
from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
|
|
6
7
|
from dodal.devices.i09.dcm import DCM
|
|
7
8
|
from dodal.devices.i09_1 import LensMode, PsuMode
|
|
@@ -33,5 +34,5 @@ def analyser_driver() -> SpecsAnalyserDriverIO[LensMode, PsuMode]:
|
|
|
33
34
|
prefix=f"{PREFIX.beamline_prefix}-EA-DET-02:CAM:",
|
|
34
35
|
lens_mode_type=LensMode,
|
|
35
36
|
psu_mode_type=PsuMode,
|
|
36
|
-
energy_sources={
|
|
37
|
+
energy_sources={SelectedSource.SOURCE1: dcm().energy_in_ev},
|
|
37
38
|
)
|
dodal/beamlines/i11.py
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from dodal.common.beamlines.beamline_utils import (
|
|
4
|
+
device_factory,
|
|
5
|
+
get_path_provider,
|
|
6
|
+
set_path_provider,
|
|
7
|
+
)
|
|
8
|
+
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
9
|
+
from dodal.common.beamlines.device_helpers import DET_SUFFIX
|
|
10
|
+
from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
|
|
11
|
+
from dodal.devices.cryostream import OxfordCryoStream
|
|
12
|
+
from dodal.devices.eurotherm import (
|
|
13
|
+
EurothermGeneral,
|
|
14
|
+
UpdatingEurothermGeneral,
|
|
15
|
+
)
|
|
16
|
+
from dodal.devices.i11.cyberstar_blower import (
|
|
17
|
+
AutotunedCyberstarBlower,
|
|
18
|
+
CyberstarBlower,
|
|
19
|
+
)
|
|
20
|
+
from dodal.devices.i11.diff_stages import (
|
|
21
|
+
DiffractometerBase,
|
|
22
|
+
DiffractometerStage,
|
|
23
|
+
)
|
|
24
|
+
from dodal.devices.i11.mythen import Mythen3
|
|
25
|
+
from dodal.devices.i11.nx100robot import NX100Robot
|
|
26
|
+
from dodal.devices.i11.spinner import Spinner
|
|
27
|
+
from dodal.devices.slits import Slits
|
|
28
|
+
from dodal.devices.synchrotron import Synchrotron
|
|
29
|
+
from dodal.log import set_beamline as set_log_beamline
|
|
30
|
+
from dodal.utils import BeamlinePrefix, get_beamline_name
|
|
31
|
+
|
|
32
|
+
BL = get_beamline_name("i11")
|
|
33
|
+
PREFIX = BeamlinePrefix(BL)
|
|
34
|
+
set_log_beamline(BL)
|
|
35
|
+
set_utils_beamline(BL)
|
|
36
|
+
|
|
37
|
+
# Currently we must hard-code the visit, determining the visit at runtime requires
|
|
38
|
+
# infrastructure that is still WIP.
|
|
39
|
+
# Communication with GDA is also WIP so for now we determine an arbitrary scan number
|
|
40
|
+
# locally and write the commissioning directory. The scan number is not guaranteed to
|
|
41
|
+
# be unique and the data is at risk - this configuration is for testing only.
|
|
42
|
+
set_path_provider(
|
|
43
|
+
StaticVisitPathProvider(
|
|
44
|
+
BL,
|
|
45
|
+
Path(f"/dls/{BL}/data/2025/cm40625-3/bluesky"),
|
|
46
|
+
client=RemoteDirectoryServiceClient(f"http://{BL}-control:8088/api"),
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@device_factory()
|
|
52
|
+
def mythen3() -> Mythen3:
|
|
53
|
+
"""Mythen3 Detector from PSI"""
|
|
54
|
+
return Mythen3(
|
|
55
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-DET-07:",
|
|
56
|
+
path_provider=get_path_provider(),
|
|
57
|
+
drv_suffix=DET_SUFFIX,
|
|
58
|
+
fileio_suffix="HDF:",
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@device_factory()
|
|
63
|
+
def ocs1() -> OxfordCryoStream:
|
|
64
|
+
"""i11 Oxford Cryostream 700 plus without cryoshutter"""
|
|
65
|
+
return OxfordCryoStream(f"{PREFIX.beamline_prefix}-CG-CSTRM-01:")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@device_factory()
|
|
69
|
+
def ocs2() -> OxfordCryoStream:
|
|
70
|
+
"""i11 Oxford Cryostream 700 standard without cryoshutter"""
|
|
71
|
+
return OxfordCryoStream(f"{PREFIX.beamline_prefix}-CG-CSTRM-02:")
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@device_factory()
|
|
75
|
+
def diff_stage() -> DiffractometerStage:
|
|
76
|
+
"""Stage that contains the rotation axes, theta, two_theta, delta, spos"""
|
|
77
|
+
return DiffractometerStage(prefix=f"{PREFIX.beamline_prefix}-MO-DIFF-01:")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@device_factory()
|
|
81
|
+
def diff_base() -> DiffractometerBase:
|
|
82
|
+
return DiffractometerBase(prefix=f"{PREFIX.beamline_prefix}-MO-DIFF-01:BASE:")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@device_factory()
|
|
86
|
+
def csb1() -> CyberstarBlower[UpdatingEurothermGeneral]:
|
|
87
|
+
"""Cyberstar hot air blower 1 with Eurotherm Controller and updating PID"""
|
|
88
|
+
return CyberstarBlower(
|
|
89
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-BLOW-01:",
|
|
90
|
+
controller_type=UpdatingEurothermGeneral,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@device_factory()
|
|
95
|
+
def csb2() -> AutotunedCyberstarBlower[EurothermGeneral]:
|
|
96
|
+
"""Cyberstar hot air blower 2 with autotuneable Eurotherm Controller"""
|
|
97
|
+
return AutotunedCyberstarBlower(
|
|
98
|
+
prefix=f"{PREFIX.beamline_prefix}-EA-BLOW-02:LOOP1:",
|
|
99
|
+
controller_type=EurothermGeneral,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@device_factory()
|
|
104
|
+
def sample_robot() -> NX100Robot:
|
|
105
|
+
"""The sample robot arm and carosel on i11 that moves
|
|
106
|
+
and loads samples on/off the spinner"""
|
|
107
|
+
return NX100Robot(prefix=f"{PREFIX.beamline_prefix}-EA-ROBOT-01:")
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@device_factory()
|
|
111
|
+
def spinner() -> Spinner:
|
|
112
|
+
"""Sample spinner for powder averaging"""
|
|
113
|
+
return Spinner(prefix=f"{PREFIX.beamline_prefix}-EA-ENV-01:")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@device_factory()
|
|
117
|
+
def synchrotron() -> Synchrotron:
|
|
118
|
+
return Synchrotron()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
@device_factory()
|
|
122
|
+
def slits_1() -> Slits:
|
|
123
|
+
return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-01:")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@device_factory()
|
|
127
|
+
def slits_2() -> Slits:
|
|
128
|
+
return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-02:")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@device_factory()
|
|
132
|
+
def slits_3() -> Slits:
|
|
133
|
+
return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-03:")
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@device_factory()
|
|
137
|
+
def slits_4() -> Slits:
|
|
138
|
+
return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-04:")
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@device_factory()
|
|
142
|
+
def slits_5() -> Slits:
|
|
143
|
+
return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-05:")
|
dodal/beamlines/i19_1.py
CHANGED
dodal/beamlines/i19_2.py
CHANGED
|
@@ -6,6 +6,7 @@ from dodal.common.beamlines.beamline_utils import (
|
|
|
6
6
|
)
|
|
7
7
|
from dodal.devices.i19.beamstop import BeamStop
|
|
8
8
|
from dodal.devices.i19.blueapi_device import HutchState
|
|
9
|
+
from dodal.devices.i19.diffractometer import FourCircleDiffractometer
|
|
9
10
|
from dodal.devices.i19.shutter import AccessControlledShutter
|
|
10
11
|
from dodal.devices.synchrotron import Synchrotron
|
|
11
12
|
from dodal.devices.zebra.zebra import Zebra
|
|
@@ -32,6 +33,11 @@ I19_2_ZEBRA_MAPPING = ZebraMapping(
|
|
|
32
33
|
)
|
|
33
34
|
|
|
34
35
|
|
|
36
|
+
@device_factory()
|
|
37
|
+
def diffractometer() -> FourCircleDiffractometer:
|
|
38
|
+
return FourCircleDiffractometer(prefix=PREFIX.beamline_prefix)
|
|
39
|
+
|
|
40
|
+
|
|
35
41
|
@device_factory()
|
|
36
42
|
def beamstop() -> BeamStop:
|
|
37
43
|
"""Get the i19-2 beamstop device, instantiate it if it hasn't already been.
|
|
@@ -59,6 +65,7 @@ def shutter() -> AccessControlledShutter:
|
|
|
59
65
|
return AccessControlledShutter(
|
|
60
66
|
prefix=f"{PREFIX.beamline_prefix}-PS-SHTR-01:",
|
|
61
67
|
hutch=HutchState.EH2,
|
|
68
|
+
instrument_session="cm40639-4",
|
|
62
69
|
)
|
|
63
70
|
|
|
64
71
|
|
dodal/beamlines/i22.py
CHANGED
|
@@ -45,7 +45,7 @@ set_utils_beamline(BL)
|
|
|
45
45
|
set_path_provider(
|
|
46
46
|
StaticVisitPathProvider(
|
|
47
47
|
BL,
|
|
48
|
-
Path("/dls/i22/data/
|
|
48
|
+
Path("/dls/i22/data/2025/cm40643-4/"),
|
|
49
49
|
client=RemoteDirectoryServiceClient("http://i22-control:8088/api"),
|
|
50
50
|
)
|
|
51
51
|
)
|
|
@@ -279,5 +279,5 @@ def ppump() -> WatsonMarlow323Pump:
|
|
|
279
279
|
|
|
280
280
|
|
|
281
281
|
@device_factory()
|
|
282
|
-
def
|
|
282
|
+
def base() -> XYPitchStage:
|
|
283
283
|
return XYPitchStage(f"{PREFIX.beamline_prefix}-MO-STABL-01:")
|
dodal/beamlines/i23.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from ophyd_async.core import StrictEnum
|
|
3
|
+
from ophyd_async.core import InOut, StrictEnum
|
|
4
4
|
from ophyd_async.epics.adpilatus import PilatusDetector
|
|
5
5
|
|
|
6
6
|
from dodal.common.beamlines.beamline_utils import (
|
|
@@ -45,8 +45,8 @@ I23_ZEBRA_MAPPING = ZebraMapping(
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class I23DetectorPositions(StrictEnum):
|
|
48
|
-
IN =
|
|
49
|
-
OUT =
|
|
48
|
+
IN = InOut.IN.value
|
|
49
|
+
OUT = InOut.OUT.value
|
|
50
50
|
SAMPLE_CHANGE = "sample change"
|
|
51
51
|
|
|
52
52
|
|