Skip to content

Commit 5fd906c

Browse files
committed
Add support for 3D detectors
1 parent eceaff7 commit 5fd906c

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

src/ophyd_async/epics/adcore/_data_logic.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ async def get_ndarray_resource_info(
7070
description.data_type_signal.get_value(),
7171
description.color_mode_signal.get_value(),
7272
)
73+
# Remove entries in shape that are zero
74+
shape = [x for x in shape if x > 0]
7375
if datatype is ADBaseDataType.UNDEFINED:
7476
raise ValueError(
7577
f"{description.data_type_signal.source} is blank, this is not supported"
@@ -309,7 +311,7 @@ def make_writer_data_logic(
309311
) -> tuple[NDPluginFileIO, DetectorDataLogic]:
310312
plugins = plugins or {}
311313
description = NDArrayDescription(
312-
shape_signals=[driver.array_size_y, driver.array_size_x],
314+
shape_signals=[driver.array_size_z, driver.array_size_y, driver.array_size_x],
313315
data_type_signal=driver.data_type,
314316
color_mode_signal=driver.color_mode,
315317
)

src/ophyd_async/epics/adcore/_io.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ class NDArrayBaseIO(EpicsDevice):
5555
nd_attributes_file: A[SignalRW[str], PvSuffix("NDAttributesFile")]
5656
acquire: A[SignalRW[bool], PvSuffix.rbv("Acquire"), EpicsOptions(wait=non_zero)]
5757

58-
# The array_size_x/y signals are used when outputting an NDArray
58+
# The array_size_x/y/z signals are used when outputting an NDArray
5959
# (i.e. from a driver)
6060
array_size_x: A[SignalR[int], PvSuffix("ArraySizeX_RBV")]
6161
array_size_y: A[SignalR[int], PvSuffix("ArraySizeY_RBV")]
62+
array_size_z: A[SignalR[int], PvSuffix("ArraySizeZ_RBV")]
6263

6364
# The array_size0/1/2 signals are used when receiving an NDArray
6465
# (i.e. in a plugin)

tests/unit_tests/epics/adcore/test_data_logic.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,20 @@ async def test_describe_different_color_modes(
228228
"source": ANY,
229229
},
230230
}
231+
232+
233+
async def test_3d_dataset_shape(hdf_det: adcore.AreaDetector[adcore.ADBaseIO]):
234+
writer = hdf_det.get_plugin("writer", adcore.NDPluginFileIO)
235+
set_mock_value(writer.file_path_exists, True)
236+
set_mock_value(hdf_det.driver.array_size_z, 10)
237+
await hdf_det.prepare(TriggerInfo())
238+
describe = await hdf_det.describe()
239+
assert describe == {
240+
"detector": {
241+
"dtype": "array",
242+
"dtype_numpy": "<u2",
243+
"external": "STREAM:",
244+
"shape": [1, 10, 768, 1024],
245+
"source": ANY,
246+
},
247+
}

0 commit comments

Comments
 (0)