Skip to content

Commit

Permalink
Re-factored the xspress device to not used redundant HDF plugins. (#384)
Browse files Browse the repository at this point in the history
  • Loading branch information
canismarko authored Feb 21, 2025
1 parent 04255f9 commit b94b60b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
39 changes: 19 additions & 20 deletions src/haven/devices/detectors/xspress.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ def __init__(
fileio_suffix="HDF1:",
name: str = "",
config_sigs: Sequence[SignalR] = (),
plugins: dict[str, adcore.NDPluginBaseIO] | None = None,
):
# Per-element MCA devices
try:
Expand All @@ -173,30 +174,28 @@ def __init__(
self.elements = DeviceVector(
{idx: XspressElement(prefix, element_index=idx) for idx in elements}
)
# Area detector IO devices
self.driver = XspressDriverIO(prefix + drv_suffix)
self.fileio = adcore.NDFileHDFIO(prefix + fileio_suffix)

self.plugins = {"hdf": self.fileio}

if path_provider is None:
path_provider = default_path_provider()
# Extra configuration signals
self.ev_per_bin, _ = soft_signal_r_and_setter(float, initial_value=ev_per_bin)

# Area detector IO and control
driver = XspressDriverIO(f"{prefix}{drv_suffix}")
controller = XspressController(driver)
fileio = adcore.NDFileHDFIO(f"{prefix}{fileio_suffix}")
if path_provider is None:
path_provider = default_path_provider()
writer = adcore.ADHDFWriter(
fileio=fileio,
path_provider=path_provider,
name_provider=lambda: self.name,
dataset_describer=XspressDatasetDescriber(driver),
plugins=plugins,
)
super().__init__(
controller=XspressController(self.driver),
writer=adcore.ADHDFWriter(
fileio=self.fileio,
path_provider=path_provider,
name_provider=lambda: self.name,
dataset_describer=XspressDatasetDescriber(self.driver),
plugins=self.plugins,
),
plugins=self.plugins,
controller=controller,
writer=writer,
plugins=plugins,
config_sigs=(
self.driver.acquire_period,
self.driver.acquire_time,
driver.acquire_period,
driver.acquire_time,
self.ev_per_bin,
*config_sigs,
),
Expand Down
8 changes: 6 additions & 2 deletions src/haven/tests/test_xspress.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,14 @@
async def detector():
det = Xspress3Detector("255id_xsp:", name="vortex_me4", elements=4)
await det.connect(mock=True)
set_mock_value(det.plugins["hdf"].file_path_exists, True)
set_mock_value(det.fileio.file_path_exists, True)
return det


async def test_name(detector):
assert detector.name == "vortex_me4"


async def test_signals(detector):
assert await detector.ev_per_bin.get_value() == 10
# Spot-check some PVs
Expand All @@ -44,7 +48,7 @@ async def test_description(detector):
async def test_trigger(detector):
status = detector.trigger()
await asyncio.sleep(0.1) # Let the event loop turn
set_mock_value(detector.plugins["hdf"].num_captured, 1)
set_mock_value(detector.fileio.num_captured, 1)
await status
# Check that signals were set
get_mock_put(detector.driver.num_images).assert_called_once_with(1, wait=True)
Expand Down

0 comments on commit b94b60b

Please sign in to comment.