Skip to content

Commit 338505a

Browse files
Villtordeir17846
andauthored
Create common mirror classes and populate I05s mirrors (#1418)
* create i05-shared and move pgm there * change names to snake case * minor import change * create base mirror * add m1 mirror * add XY and XYZ collimating mirrrors * fix i10 * add piezo mirror * add more mirrors * move i05-shared to beamline specific utils * amend beamlines init file * move i05-shared to beamline specific utils * amend beamlines init file * remove XY coll mirror - will be a separate issue * rename mirror class * move xyzpitchyawroll to motors * rename pgm * add explicit parameters to child classes * make common mirror classes generic of strictenum * add mirrors controls and docstring * make all new classes depend on Stage only * relocate common_mirror to I05 devices * add comment on mirrors connection * make mirrors locatable and stoppable, fix typos * fix merge * fix merge * fix test * complete merge with main * move common_mirror level up * replace i10 PiezoMirror with XYZPiezoCollimatingMirror * make XYZSwitchingMirror parent of XYZPiezoSwitchingMirror * fix merge lint errors * finish merge with main * added docstrings, extract constant suffix * fix lint * fix lint --------- Co-authored-by: eir17846 <victor.rogalev@diamond.ac.uk>
1 parent ec33ee7 commit 338505a

13 files changed

Lines changed: 463 additions & 33 deletions

File tree

src/dodal/beamlines/i05.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
33
from dodal.device_manager import DeviceManager
44
from dodal.devices.beamlines.i05 import I05Goniometer
5+
from dodal.devices.beamlines.i05_shared import M4M5Mirror
6+
from dodal.devices.common_mirror import XYZSwitchingMirror
57
from dodal.devices.hutch_shutter import HutchShutter
68
from dodal.devices.temperture_controller import Lakeshore336
79
from dodal.log import set_beamline as set_log_beamline
@@ -16,6 +18,15 @@
1618
devices.include(i05_shared_devices)
1719

1820

21+
# will connect after https://jira.diamond.ac.uk/browse/I05-731
22+
@devices.factory(skip=True)
23+
def m4m5() -> XYZSwitchingMirror:
24+
return XYZSwitchingMirror(
25+
prefix=f"{PREFIX.beamline_prefix}-OP-RFM-01:",
26+
mirrors=M4M5Mirror,
27+
)
28+
29+
1930
@devices.factory()
2031
def hr_shutter() -> HutchShutter:
2132
return HutchShutter(PREFIX.beamline_prefix)

src/dodal/beamlines/i05_1.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
33
from dodal.device_manager import DeviceManager
44
from dodal.devices.beamlines.i05_1 import XYZAzimuthPolarDefocusStage
5+
from dodal.devices.beamlines.i05_shared import Mj7j8Mirror
6+
from dodal.devices.common_mirror import XYZPiezoSwitchingMirror
57
from dodal.devices.hutch_shutter import HutchShutter
68
from dodal.log import set_beamline as set_log_beamline
79
from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -15,6 +17,15 @@
1517
devices.include(i05_shared_devices)
1618

1719

20+
# will connect after https://jira.diamond.ac.uk/browse/I05-731
21+
@devices.factory(skip=True)
22+
def mj7j8() -> XYZPiezoSwitchingMirror:
23+
return XYZPiezoSwitchingMirror(
24+
prefix=f"{PREFIX.beamline_prefix}-OP-RFM-01:",
25+
mirrors=Mj7j8Mirror,
26+
)
27+
28+
1829
@devices.factory()
1930
def nano_shutter() -> HutchShutter:
2031
return HutchShutter(PREFIX.beamline_prefix)

src/dodal/beamlines/i05_shared.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
from dodal.devices.beamlines.i05_shared import (
33
APPLE_KNOT_EXCLUSION_ZONES,
44
Grating,
5+
M3MJ6Mirror,
56
energy_to_gap_converter,
67
energy_to_phase_converter,
78
)
9+
from dodal.devices.common_mirror import XYZPiezoSwitchingMirror
810
from dodal.devices.insertion_device import (
911
Apple2,
1012
UndulatorGap,
@@ -16,6 +18,7 @@
1618
)
1719
from dodal.devices.insertion_device.energy import BeamEnergy, InsertionDeviceEnergy
1820
from dodal.devices.insertion_device.polarisation import InsertionDevicePolarisation
21+
from dodal.devices.motors import XYZPitchYawRollStage
1922
from dodal.devices.pgm import PlaneGratingMonochromator
2023
from dodal.devices.synchrotron import Synchrotron
2124
from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -62,6 +65,20 @@ def id(
6265
return Apple2[UndulatorLockedPhaseAxes](id_gap=id_gap, id_phase=id_phase)
6366

6467

68+
@devices.factory()
69+
def m1_collimating_mirror() -> XYZPitchYawRollStage:
70+
return XYZPitchYawRollStage(prefix=f"{PREFIX.beamline_prefix}-OP-COL-01:")
71+
72+
73+
# will connect after https://jira.diamond.ac.uk/browse/I05-731
74+
@devices.factory(skip=True)
75+
def m3mj6_switching_mirror() -> XYZPiezoSwitchingMirror:
76+
return XYZPiezoSwitchingMirror(
77+
prefix=f"{PREFIX.beamline_prefix}-OP-SWTCH-01:",
78+
mirrors=M3MJ6Mirror,
79+
)
80+
81+
6582
@devices.factory()
6683
def id_controller(
6784
id: Apple2[UndulatorLockedPhaseAxes],

src/dodal/beamlines/i10.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
I10Diagnostic5ADet,
77
I10Slits,
88
I10SlitsDrainCurrent,
9-
PiezoMirror,
109
)
1110
from dodal.devices.beamlines.i10.diagnostics import I10Diagnostic, I10Diagnostic5ADet
1211
from dodal.devices.beamlines.i10.rasor.rasor_current_amp import RasorFemto, RasorSR570
@@ -16,6 +15,7 @@
1615
PaStage,
1716
)
1817
from dodal.devices.beamlines.i10.rasor.rasor_scaler_cards import RasorScalerCard1
18+
from dodal.devices.common_mirror import XYZPiezoCollimatingMirror
1919
from dodal.devices.current_amplifiers import CurrentAmpDet
2020
from dodal.devices.motors import XYStage, XYZStage
2121
from dodal.devices.temperture_controller import (
@@ -34,8 +34,8 @@
3434

3535

3636
@devices.factory()
37-
def focusing_mirror() -> PiezoMirror:
38-
return PiezoMirror(prefix=f"{PREFIX.beamline_prefix}-OP-FOCS-01:")
37+
def focusing_mirror() -> XYZPiezoCollimatingMirror:
38+
return XYZPiezoCollimatingMirror(prefix=f"{PREFIX.beamline_prefix}-OP-FOCS-01:")
3939

4040

4141
"""Optic slits"""

src/dodal/beamlines/i10_1.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from dodal.beamlines.i10_shared import devices as i10_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.beamlines.i10 import I10JDiagnostic, I10JSlits, PiezoMirror
4+
from dodal.devices.beamlines.i10 import I10JDiagnostic, I10JSlits
55
from dodal.devices.beamlines.i10_1 import (
66
ElectromagnetMagnetField,
77
ElectromagnetStage,
88
I10JScalerCard,
99
)
10+
from dodal.devices.common_mirror import XYZPiezoCollimatingMirror
1011
from dodal.devices.current_amplifiers import (
1112
SR570,
1213
CurrentAmpDet,
@@ -57,8 +58,8 @@ def diagnostic() -> I10JDiagnostic:
5758

5859

5960
@devices.factory()
60-
def focusing_mirror() -> PiezoMirror:
61-
return PiezoMirror(prefix=f"{PREFIX.beamline_prefix}-OP-FOCA-01:")
61+
def focusing_mirror() -> XYZPiezoCollimatingMirror:
62+
return XYZPiezoCollimatingMirror(prefix=f"{PREFIX.beamline_prefix}-OP-FOCA-01:")
6263

6364

6465
"""I10J Electromagnet Devices"""

src/dodal/beamlines/i10_shared.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
I10SharedDiagnostic,
1616
I10SharedSlits,
1717
I10SharedSlitsDrainCurrent,
18-
PiezoMirror,
1918
)
2019
from dodal.devices.beamlines.i10.i10_apple2 import (
2120
I10Apple2,
@@ -25,6 +24,7 @@
2524

2625
# Imports taken from i10 while we work out how to deal with split end stations
2726
from dodal.devices.beamlines.i10.i10_setting_data import I10Grating
27+
from dodal.devices.common_mirror import XYZPiezoCollimatingMirror
2828
from dodal.devices.insertion_device import (
2929
BeamEnergy,
3030
InsertionDeviceEnergy,
@@ -63,8 +63,8 @@ def synchrotron() -> Synchrotron:
6363

6464

6565
@devices.factory()
66-
def first_mirror() -> PiezoMirror:
67-
return PiezoMirror(prefix=f"{PREFIX.beamline_prefix}-OP-COL-01:")
66+
def first_mirror() -> XYZPiezoCollimatingMirror:
67+
return XYZPiezoCollimatingMirror(prefix=f"{PREFIX.beamline_prefix}-OP-COL-01:")
6868

6969

7070
@devices.factory()
@@ -80,8 +80,8 @@ def pgm() -> PlaneGratingMonochromator:
8080

8181

8282
@devices.factory()
83-
def switching_mirror() -> PiezoMirror:
84-
return PiezoMirror(prefix=f"{PREFIX.beamline_prefix}-OP-SWTCH-01:")
83+
def switching_mirror() -> XYZPiezoCollimatingMirror:
84+
return XYZPiezoCollimatingMirror(prefix=f"{PREFIX.beamline_prefix}-OP-SWTCH-01:")
8585

8686

8787
"""ID"""
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
from .i05_motors import I05Goniometer
22

3-
__all__ = ["I05Goniometer"]
3+
__all__ = [
4+
"I05Goniometer",
5+
]

src/dodal/devices/beamlines/i05_shared/__init__.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@
44
energy_to_phase_converter,
55
)
66
from dodal.devices.beamlines.i05_shared.compound_motors import PolynomCompoundMotors
7-
from dodal.devices.beamlines.i05_shared.enums import Grating
7+
from dodal.devices.beamlines.i05_shared.enums import (
8+
Grating,
9+
M3MJ6Mirror,
10+
M4M5Mirror,
11+
Mj7j8Mirror,
12+
)
813

914
__all__ = [
1015
"Grating",
16+
"Mj7j8Mirror",
17+
"M3MJ6Mirror",
18+
"M4M5Mirror",
1119
"PolynomCompoundMotors",
1220
"energy_to_gap_converter",
1321
"energy_to_phase_converter",

src/dodal/devices/beamlines/i05_shared/enums.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,24 @@ class Grating(StrictEnum):
66
C_1600 = "C 1600 lines/mm"
77
RH_1600 = "Rh 1600 lines/mm"
88
PT_800 = "B 800 lines/mm"
9+
10+
11+
class M3MJ6Mirror(StrictEnum):
12+
UNKNOWN = "Unknown"
13+
MJ6 = "MJ6"
14+
M3 = "M3"
15+
REFERENCE = "Reference"
16+
17+
18+
class M4M5Mirror(StrictEnum):
19+
UNKNOWN = "Unknown"
20+
M4 = "M4"
21+
M5 = "M5"
22+
REFERENCE = "Reference"
23+
24+
25+
class Mj7j8Mirror(StrictEnum):
26+
UNKNOWN = "Unknown"
27+
MJ8 = "MJ8"
28+
MJ7 = "MJ7"
29+
REFERENCE = "Reference"

src/dodal/devices/beamlines/i10/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
I10PneumaticStage,
66
I10SharedDiagnostic,
77
)
8-
from .mirrors import PiezoMirror
98
from .slits import (
109
I10JSlits,
1110
I10SharedSlits,
@@ -18,7 +17,6 @@
1817
"I10Diagnostic",
1918
"I10Diagnostic5ADet",
2019
"I10PneumaticStage",
21-
"PiezoMirror",
2220
"I10Slits",
2321
"I10SlitsDrainCurrent",
2422
"I10SharedDiagnostic",

0 commit comments

Comments
 (0)