Skip to content

Commit 618a7ac

Browse files
authored
Merge pull request #25 from DiamondLightSource/artemis554
Restructure OAV device organisation and naming (Artemis554)
2 parents cdf9698 + bbf3b6b commit 618a7ac

File tree

13 files changed

+218
-220
lines changed

13 files changed

+218
-220
lines changed

.github/workflows/code.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ jobs:
3535
fail-fast: false
3636
matrix:
3737
os: ["ubuntu-latest"] # can add windows-latest, macos-latest
38-
python: ["3.9", "3.10", "3.11"]
38+
python: ["3.10", "3.11"]
3939
install: ["-e .[dev]"]
4040
# Make one version be non-editable to test both paths of version code
4141
include:
4242
- os: "ubuntu-latest"
43-
python: "3.8"
43+
python: "3.9"
4444
install: ".[dev]"
4545

4646
runs-on: ${{ matrix.os }}

src/dodal/devices/oav/snapshot.py renamed to src/dodal/devices/areadetector/plugins/MJPG.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
from PIL import Image
77

88

9-
class Snapshot(Device):
9+
class MJPG(Device):
1010
filename: Signal = Component(Signal)
1111
directory: Signal = Component(Signal)
1212
url: EpicsSignal = Component(EpicsSignal, "JPG_URL_RBV", string=True)
13-
x_size_pv: EpicsSignalRO = Component(EpicsSignalRO, "ArraySize1_RBV")
14-
y_size_pv: EpicsSignalRO = Component(EpicsSignalRO, "ArraySize2_RBV")
13+
x_size: EpicsSignalRO = Component(EpicsSignalRO, "ArraySize1_RBV")
14+
y_size: EpicsSignalRO = Component(EpicsSignalRO, "ArraySize2_RBV")
1515
input_rbpv: EpicsSignalRO = Component(EpicsSignalRO, "NDArrayPort_RBV")
16-
input_pv: EpicsSignal = Component(EpicsSignal, "NDArrayPort")
16+
input_plugin: EpicsSignal = Component(EpicsSignal, "NDArrayPort")
1717
KICKOFF_TIMEOUT: float = 10.0
1818

1919
def trigger(self):
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from ophyd import Component, Device, EpicsSignal
2+
3+
4+
class MXSC(Device):
5+
"""
6+
Device for edge detection plugin.
7+
"""
8+
9+
input_plugin: EpicsSignal = Component(EpicsSignal, "NDArrayPort")
10+
enable_callbacks: EpicsSignal = Component(EpicsSignal, "EnableCallbacks")
11+
min_callback_time: EpicsSignal = Component(EpicsSignal, "MinCallbackTime")
12+
blocking_callbacks: EpicsSignal = Component(EpicsSignal, "BlockingCallbacks")
13+
read_file: EpicsSignal = Component(EpicsSignal, "ReadFile")
14+
filename: EpicsSignal = Component(EpicsSignal, "Filename", string=True)
15+
preprocess_operation: EpicsSignal = Component(EpicsSignal, "Preprocess")
16+
preprocess_ksize: EpicsSignal = Component(EpicsSignal, "PpParam1")
17+
canny_upper_threshold: EpicsSignal = Component(EpicsSignal, "CannyUpper")
18+
canny_lower_threshold: EpicsSignal = Component(EpicsSignal, "CannyLower")
19+
close_ksize: EpicsSignal = Component(EpicsSignal, "CloseKsize")
20+
sample_detection_scan_direction: EpicsSignal = Component(
21+
EpicsSignal, "ScanDirection"
22+
)
23+
sample_detection_min_tip_height: EpicsSignal = Component(
24+
EpicsSignal, "MinTipHeight"
25+
)
26+
tip_x: EpicsSignal = Component(EpicsSignal, "TipX")
27+
tip_y: EpicsSignal = Component(EpicsSignal, "TipY")
28+
top: EpicsSignal = Component(EpicsSignal, "Top")
29+
bottom: EpicsSignal = Component(EpicsSignal, "Bottom")
30+
output_array: EpicsSignal = Component(EpicsSignal, "OutputArray")
31+
draw_tip: EpicsSignal = Component(EpicsSignal, "DrawTip")
32+
draw_edges: EpicsSignal = Component(EpicsSignal, "DrawEdges")
33+
waveform_size_x: EpicsSignal = Component(EpicsSignal, "ArraySize1_RBV")
34+
waveform_size_y: EpicsSignal = Component(EpicsSignal, "ArraySize2_RBV")

src/dodal/devices/detector_motion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from ophyd import Device, EpicsMotor, EpicsSignal, EpicsSignalRO
33

44

5-
class Det(Device):
5+
class DetectorMotion(Device):
66
"""Physical motion and interlocks for detector travel"""
77

88
upstream_x: EpicsMotor = Cpt(EpicsMotor, "-MO-DET-01:UPSTREAMX")

src/dodal/devices/oav/grid_overlay.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ophyd import Component, Signal
66
from PIL import Image, ImageDraw
77

8-
from dodal.devices.oav.snapshot import Snapshot
8+
from dodal.devices.areadetector.plugins.MJPG import MJPG
99

1010

1111
class Orientation(Enum):
@@ -120,19 +120,19 @@ def add_grid_overlay_to_image(
120120
)
121121

122122

123-
class SnapshotWithGrid(Snapshot):
124-
top_left_x_signal: Signal = Component(Signal)
125-
top_left_y_signal: Signal = Component(Signal)
126-
box_width_signal: Signal = Component(Signal)
127-
num_boxes_x_signal: Signal = Component(Signal)
128-
num_boxes_y_signal: Signal = Component(Signal)
123+
class SnapshotWithGrid(MJPG):
124+
top_left_x: Signal = Component(Signal)
125+
top_left_y: Signal = Component(Signal)
126+
box_width: Signal = Component(Signal)
127+
num_boxes_x: Signal = Component(Signal)
128+
num_boxes_y: Signal = Component(Signal)
129129

130130
def post_processing(self, image: Image.Image):
131-
top_left_x = self.top_left_x_signal.get()
132-
top_left_y = self.top_left_y_signal.get()
133-
box_width = self.box_width_signal.get()
134-
num_boxes_x = self.num_boxes_x_signal.get()
135-
num_boxes_y = self.num_boxes_y_signal.get()
131+
top_left_x = self.top_left_x.get()
132+
top_left_y = self.top_left_y.get()
133+
box_width = self.box_width.get()
134+
num_boxes_x = self.num_boxes_x.get()
135+
num_boxes_y = self.num_boxes_y.get()
136136
filename_str = self.filename.get()
137137
directory_str = self.directory.get()
138138
add_grid_border_overlay_to_image(

src/dodal/devices/oav/oav_detector.py

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from enum import IntEnum
2-
31
from ophyd import ADComponent as ADC
42
from ophyd import (
53
AreaDetector,
@@ -13,24 +11,10 @@
1311
ROIPlugin,
1412
)
1513

14+
from dodal.devices.areadetector.plugins.MXSC import MXSC
1615
from dodal.devices.oav.grid_overlay import SnapshotWithGrid
1716

1817

19-
class ColorMode(IntEnum):
20-
"""
21-
Enum to store the various color modes of the camera. We use RGB1.
22-
"""
23-
24-
MONO = 0
25-
BAYER = 1
26-
RGB1 = 2
27-
RGB2 = 3
28-
RGB3 = 4
29-
YUV444 = 5
30-
YUV422 = 6
31-
YUV421 = 7
32-
33-
3418
class ZoomController(Device):
3519
"""
3620
Device to control the zoom level, this is unfortunately on a different prefix
@@ -62,51 +46,6 @@ def allowed_zoom_levels(self):
6246
]
6347

6448

65-
class EdgeOutputArrayImageType(IntEnum):
66-
"""
67-
Enum to store the types of image to tweak the output array. We use Original.
68-
"""
69-
70-
ORIGINAL = 0
71-
GREYSCALE = 1
72-
PREPROCESSED = 2
73-
CANNY_EDGES = 3
74-
CLOSED_EDGES = 4
75-
76-
77-
class MXSC(Device):
78-
"""
79-
Device for edge detection plugin.
80-
"""
81-
82-
input_plugin_pv: EpicsSignal = Component(EpicsSignal, "NDArrayPort")
83-
enable_callbacks_pv: EpicsSignal = Component(EpicsSignal, "EnableCallbacks")
84-
min_callback_time_pv: EpicsSignal = Component(EpicsSignal, "MinCallbackTime")
85-
blocking_callbacks_pv: EpicsSignal = Component(EpicsSignal, "BlockingCallbacks")
86-
read_file: EpicsSignal = Component(EpicsSignal, "ReadFile")
87-
py_filename: EpicsSignal = Component(EpicsSignal, "Filename", string=True)
88-
preprocess_operation: EpicsSignal = Component(EpicsSignal, "Preprocess")
89-
preprocess_ksize: EpicsSignal = Component(EpicsSignal, "PpParam1")
90-
canny_upper_threshold: EpicsSignal = Component(EpicsSignal, "CannyUpper")
91-
canny_lower_threshold: EpicsSignal = Component(EpicsSignal, "CannyLower")
92-
close_ksize: EpicsSignal = Component(EpicsSignal, "CloseKsize")
93-
sample_detection_scan_direction: EpicsSignal = Component(
94-
EpicsSignal, "ScanDirection"
95-
)
96-
sample_detection_min_tip_height: EpicsSignal = Component(
97-
EpicsSignal, "MinTipHeight"
98-
)
99-
tip_x: EpicsSignal = Component(EpicsSignal, "TipX")
100-
tip_y: EpicsSignal = Component(EpicsSignal, "TipY")
101-
top: EpicsSignal = Component(EpicsSignal, "Top")
102-
bottom: EpicsSignal = Component(EpicsSignal, "Bottom")
103-
output_array: EpicsSignal = Component(EpicsSignal, "OutputArray")
104-
draw_tip: EpicsSignal = Component(EpicsSignal, "DrawTip")
105-
draw_edges: EpicsSignal = Component(EpicsSignal, "DrawEdges")
106-
waveform_size_x: EpicsSignal = Component(EpicsSignal, "ArraySize1_RBV")
107-
waveform_size_y: EpicsSignal = Component(EpicsSignal, "ArraySize2_RBV")
108-
109-
11049
class OAV(AreaDetector):
11150
cam: CamBase = ADC(CamBase, "-DI-OAV-01:CAM:")
11251
roi: ADC = ADC(ROIPlugin, "-DI-OAV-01:ROI:")

0 commit comments

Comments
 (0)