Skip to content

Commit 07c1416

Browse files
Move beamline specific devies from dodal.devices.iXX to dodal.devices.beamlines.iXX (#1866)
* Move beamline specific devies from dodal.devices.iXX to dodal.devices.beamlines.iXX * merge into main * Fix tests from merge conflicts * Fix test from merge conflict * Update docs
1 parent 398f342 commit 07c1416

File tree

250 files changed

+321
-270
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

250 files changed

+321
-270
lines changed

docs/how-to/create-device.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,13 @@ For example, only use `XYStage` for two perpendicular motors (e.g. X and Y axes
2727
- Only a device that represents a group of motors with a physical relationship, should be defined in `motor`.
2828
- If your class define an `XYStage` but you need extra signals or behaviour, extend the `XYStage` class outside the `motor` module.
2929

30-
**Only if no suitable class exists**, create a new device that connects to the required signals. During review, refactor to align with existing devices if needed, using inheritance or composition to deduplicate code.
30+
**Only if no suitable class exists**, create a new device that connects to the required signals. During review, refactor to align with existing devices if needed, using inheritance or composition to deduplicate code.
31+
32+
Devices that are generic and reusable across multiple beamlines should be defined under `dodal.devices`. For example, `dodal.devices.motors.XYStage` is generic enough that most beamlines can use it directly or inherit from it.
33+
34+
Devices that are specific to a single beamline should be placed under `dodal.devices.beamlines.iXX`. For instance, a detector that is only used on that beamline and is too specialized to be reused elsewhere belongs here.
35+
36+
If a beamline has multiple endstations and a device is shared between them, it should be defined under `dodal.devices.beamlines.iXX_shared`.
3137

3238
Writing a device class
3339
======================
@@ -36,7 +42,7 @@ To develop a new device, get an initial, working version of your code into the m
3642

3743
- **Follow the [ophyd-async device implementation guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html)** to structure your device code.
3844
- **Choose the right base class** by consulting the [base class guide](https://blueskyproject.io/ophyd-async/main/how-to/choose-right-baseclass.html), If your device needs to move, you'll need to extend the Movable protocol. For detailed guidance on when and how to do this, refer to the [movable device guide](https://blueskyproject.io/ophyd-async/main/explanations/when-to-extend-movable.html).
39-
- **Add static metadata (if any) to the device class** using a [soft signal](https://blueskyproject.io/ophyd-async/main/_api/ophyd_async/ophyd_async.core.html#ophyd_async.core.soft_signal_rw) or existing device epics record. For example this could be a manufacturer or brand name of the device. Another example is crystal metadata in [i22 DCM](https://diamondlightsource.github.io/dodal/main/reference/generated/dodal.devices.i22.dcm.DCM.html#dodal.devices.i22.dcm.DCM) In some cases it might be beneficial to ask controls team to create an additional epics field containing metadata for such device.
45+
- **Add static metadata (if any) to the device class** using a [soft signal](https://blueskyproject.io/ophyd-async/main/_api/ophyd_async/ophyd_async.core.html#ophyd_async.core.soft_signal_rw) or existing device epics record. For example this could be a manufacturer or brand name of the device. Another example is crystal metadata in [i22 DCM](https://diamondlightsource.github.io/dodal/main/reference/generated/dodal.devices.beamlines.i22.dcm.DCM.html#dodal.devices.beamlines.i22.dcm.DCM) In some cases it might be beneficial to ask controls team to create an additional epics field containing metadata for such device.
4046
- **Write thorough unit tests** for all expected use cases. Reference the [ophyd-async device test guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html) for best practices.
4147
- **Validate your device on the beamline** and keep notes of any issues for later fixes.
4248
- **Make use of type annotations** so that pyright will validate that you are passing around values that ophyd-async will accept.

src/dodal/beamlines/b07.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from dodal.beamlines.b07_shared import devices as b07_shared_devices
22
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
33
from dodal.device_manager import DeviceManager
4-
from dodal.devices.b07 import Grating, LensMode, PsuMode
4+
from dodal.devices.beamlines.b07 import Grating, LensMode, PsuMode
55
from dodal.devices.electron_analyser.base import EnergySource
66
from dodal.devices.electron_analyser.specs import SpecsDetector
77
from dodal.devices.pgm import PlaneGratingMonochromator

src/dodal/beamlines/b07_1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from dodal.beamlines.b07_shared import devices as b07_shared_devices
22
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
33
from dodal.device_manager import DeviceManager
4-
from dodal.devices.b07 import PsuMode
5-
from dodal.devices.b07_1 import (
4+
from dodal.devices.beamlines.b07 import PsuMode
5+
from dodal.devices.beamlines.b07_1 import (
66
ChannelCutMonochromator,
77
Grating,
88
LensMode,

src/dodal/beamlines/b16.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
)
1212
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
1313
from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
14-
from dodal.devices.b16.detector import (
14+
from dodal.devices.beamlines.b16.detector import (
1515
software_triggered_tiff_area_detector,
1616
)
1717
from dodal.devices.motors import XYZStage

src/dodal/beamlines/b21.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
)
1313
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
1414
from dodal.common.beamlines.device_helpers import CAM_SUFFIX, HDF5_SUFFIX
15+
from dodal.devices.beamlines.i22.nxsas import NXSasMetadataHolder, NXSasOAV
1516
from dodal.devices.focusing_mirror import SimpleMirror
16-
from dodal.devices.i22.nxsas import NXSasMetadataHolder, NXSasOAV
1717
from dodal.devices.linkam3 import Linkam3
1818
from dodal.devices.motors import XYStage
1919
from dodal.devices.slits import Slits

src/dodal/beamlines/i02_1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
I02_1FilterThreeSelections,
1010
I02_1FilterTwoSelections,
1111
)
12+
from dodal.devices.beamlines.i02_1.fast_grid_scan import ZebraFastGridScanTwoD
13+
from dodal.devices.beamlines.i02_1.sample_motors import SampleMotors
1214
from dodal.devices.eiger import EigerDetector
13-
from dodal.devices.i02_1.fast_grid_scan import ZebraFastGridScanTwoD
14-
from dodal.devices.i02_1.sample_motors import SampleMotors
1515
from dodal.devices.synchrotron import Synchrotron
1616
from dodal.devices.zebra.zebra import Zebra
1717
from dodal.devices.zebra.zebra_constants_mapping import (

src/dodal/beamlines/i03.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
1818
from dodal.devices.backlight import Backlight
1919
from dodal.devices.baton import Baton
20+
from dodal.devices.beamlines.i03 import Beamstop
21+
from dodal.devices.beamlines.i03.beamsize import Beamsize
22+
from dodal.devices.beamlines.i03.dcm import DCM
23+
from dodal.devices.beamlines.i03.undulator_dcm import UndulatorDCM
2024
from dodal.devices.collimation_table import CollimationTable
2125
from dodal.devices.cryostream import (
2226
CryoStreamGantry,
@@ -31,10 +35,6 @@
3135
from dodal.devices.flux import Flux
3236
from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
3337
from dodal.devices.hutch_shutter import HutchShutter
34-
from dodal.devices.i03 import Beamstop
35-
from dodal.devices.i03.beamsize import Beamsize
36-
from dodal.devices.i03.dcm import DCM
37-
from dodal.devices.i03.undulator_dcm import UndulatorDCM
3838
from dodal.devices.ipin import IPin
3939
from dodal.devices.motors import XYZStage
4040
from dodal.devices.oav.oav_detector import OAVBeamCentreFile

src/dodal/beamlines/i04.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@
1111
from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
1212
from dodal.devices.backlight import Backlight
1313
from dodal.devices.baton import Baton
14+
from dodal.devices.beamlines.i03.dcm import DCM
15+
from dodal.devices.beamlines.i04.beam_centre import CentreEllipseMethod
16+
from dodal.devices.beamlines.i04.beamsize import Beamsize
17+
from dodal.devices.beamlines.i04.constants import RedisConstants
18+
from dodal.devices.beamlines.i04.max_pixel import MaxPixel
19+
from dodal.devices.beamlines.i04.murko_results import MurkoResultsDevice
20+
from dodal.devices.beamlines.i04.transfocator import Transfocator
1421
from dodal.devices.detector.detector_motion import DetectorMotion
1522
from dodal.devices.diamond_filter import DiamondFilter, I04Filters
1623
from dodal.devices.eiger import EigerDetector
1724
from dodal.devices.fast_grid_scan import ZebraFastGridScanThreeD
1825
from dodal.devices.flux import Flux
19-
from dodal.devices.i03.dcm import DCM
20-
from dodal.devices.i04.beam_centre import CentreEllipseMethod
21-
from dodal.devices.i04.beamsize import Beamsize
22-
from dodal.devices.i04.constants import RedisConstants
23-
from dodal.devices.i04.max_pixel import MaxPixel
24-
from dodal.devices.i04.murko_results import MurkoResultsDevice
25-
from dodal.devices.i04.transfocator import Transfocator
2626
from dodal.devices.ipin import IPin
2727
from dodal.devices.motors import XYZStage
2828
from dodal.devices.mx_phase1.beamstop import Beamstop

src/dodal/beamlines/i05_shared.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dodal.device_manager import DeviceManager
2-
from dodal.devices.i05.enums import Grating
2+
from dodal.devices.beamlines.i05.enums import Grating
33
from dodal.devices.insertion_device import (
44
Apple2,
55
UndulatorGap,

src/dodal/beamlines/i06_1.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
PREFIX = BeamlinePrefix(BL, suffix="J")
1212
set_log_beamline(BL)
1313
set_utils_beamline(BL)
14+
1415
devices = DeviceManager()
1516
devices.include(i06_shared_devices)
1617

0 commit comments

Comments
 (0)