Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split out common AD file plugin logic into core writer class, create ADTiffWriter #606

Merged
merged 45 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
652de13
Starting to work on ad tiff writer
jwlodek Sep 4, 2024
e289ee4
Resolve merge conflicts
jwlodek Oct 1, 2024
f36ec3a
Continue working on tiff writer
jwlodek Oct 8, 2024
83dff62
Further work on tiff writer, existing tests now passing.
jwlodek Oct 8, 2024
1a52a21
Remove functions moved to superclas from hdf writer
jwlodek Oct 8, 2024
489cfd8
Significant re-org and simplification of ad classes
jwlodek Oct 9, 2024
83c6884
Ruff formatting
jwlodek Oct 9, 2024
3b4f45a
Modify ad sim classes to reflect new superclasses
jwlodek Oct 9, 2024
7175b30
Modify vimba and kinetix classes
jwlodek Oct 9, 2024
faf53d6
Modify aravis and pilatus classes
jwlodek Oct 9, 2024
5b9f60f
Update all tests to make sure they still pass with changes
jwlodek Oct 10, 2024
8bbfd0e
Some cleanup
jwlodek Oct 10, 2024
1eab818
Merge with upstream
jwlodek Oct 10, 2024
f6825b4
Changes to standard detector to account for controller/writer types i…
jwlodek Nov 22, 2024
651b80d
Significant changes to base detector, controller, and writer classes
jwlodek Nov 22, 2024
38a61e8
Update detector and controller classes to reflect changes
jwlodek Nov 22, 2024
aecdf04
Make sure panda standard det uses new type hints
jwlodek Nov 22, 2024
e42fa12
Most tests passing
jwlodek Nov 22, 2024
07684a4
Merge with main and resolve conflicts
jwlodek Nov 22, 2024
6dc09f3
Revert change in test that was resolved by pydantic version update
jwlodek Nov 22, 2024
1f7dcd7
Remove debugging prints
jwlodek Nov 22, 2024
35dd1b1
Linter fixes
jwlodek Nov 22, 2024
8112220
Fix linter error
jwlodek Nov 22, 2024
ac1e509
Move creation of writer outside of base AreaDetector class init per r…
jwlodek Nov 26, 2024
8494da4
Make sure we don't wait for capture to be done!
jwlodek Nov 26, 2024
b212432
Merge with upstream
jwlodek Nov 26, 2024
3242d45
Merge with upstream
jwlodek Dec 9, 2024
488d7eb
Allow for specifying whether or not to use fileio signals for dataset…
jwlodek Dec 9, 2024
a76b70f
Revert "Allow for specifying whether or not to use fileio signals for…
jwlodek Dec 10, 2024
7da935e
Fix linter errors, remove unused enum
jwlodek Dec 10, 2024
0cd0ddf
Change from return to await to conform to return type
jwlodek Dec 10, 2024
f1b9a4e
Apply more suggestions from review
jwlodek Dec 18, 2024
3c2b479
Merge with upstream
jwlodek Dec 18, 2024
d84f2b4
Replace instances of DeviceCollector to init_devices
jwlodek Dec 18, 2024
05dd89c
Update src/ophyd_async/epics/adaravis/_aravis_controller.py
jwlodek Dec 20, 2024
3fcd541
Update src/ophyd_async/epics/adaravis/_aravis_controller.py
jwlodek Dec 20, 2024
87d5fdd
Update src/ophyd_async/epics/adcore/_core_writer.py
jwlodek Dec 20, 2024
52d712e
Update src/ophyd_async/epics/adcore/_core_logic.py
jwlodek Dec 20, 2024
e46cbd4
Update src/ophyd_async/epics/adcore/_core_detector.py
jwlodek Dec 20, 2024
fbb895e
Update src/ophyd_async/epics/adcore/_core_detector.py
jwlodek Dec 20, 2024
6cd79a6
Update src/ophyd_async/epics/adcore/_core_writer.py
jwlodek Dec 20, 2024
05e6fbd
Fix all tests aside from 3.12 unawaited coro after applying suggestions
jwlodek Dec 23, 2024
a616fd2
Resolve unawaited coro error on 3.12
jwlodek Dec 23, 2024
dceb534
Remove unused typevar
jwlodek Jan 6, 2025
d065f9c
Merge with upstream
jwlodek Jan 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions src/ophyd_async/epics/adaravis/_aravis.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from ophyd_async.core import PathProvider
from ophyd_async.core._signal import SignalR
from ophyd_async.epics import adcore
from ophyd_async.epics.adcore._core_io import ADBaseDatasetDescriber

from ._aravis_controller import AravisController

Expand All @@ -29,17 +30,23 @@ def __init__(
controller, driver = AravisController.controller_and_drv(
prefix + drv_suffix, gpio_number=gpio_number, name=name
)
writer, fileio = writer_cls.writer_and_io(
prefix,
path_provider,
lambda: name,
ADBaseDatasetDescriber(driver),
fileio_suffix=fileio_suffix,
plugins=plugins,
)

super().__init__(
prefix=prefix,
driver=driver,
controller=controller,
writer_cls=writer_cls,
fileio_suffix=fileio_suffix,
path_provider=path_provider,
fileio=fileio,
writer=writer,
plugins=plugins,
name=name,
config_sigs=config_sigs,
)

self.drv = driver
self.fileio = fileio
21 changes: 6 additions & 15 deletions src/ophyd_async/epics/adcore/_core_detector.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,25 @@
from collections.abc import Sequence

from ophyd_async.core import PathProvider, SignalR, StandardDetector
from ophyd_async.core import SignalR, StandardDetector

from ._core_io import ADBaseDatasetDescriber, ADBaseIO, NDPluginBaseIO
from ._core_io import ADBaseIO, NDFileIO, NDPluginBaseIO
from ._core_logic import ADBaseControllerT
from ._core_writer import ADWriterT


class AreaDetector(StandardDetector[ADBaseControllerT, ADWriterT]):
def __init__(
self,
prefix: str,
driver: ADBaseIO,
controller: ADBaseControllerT,
writer_cls: type[ADWriterT],
path_provider: PathProvider,
plugins: dict[str, NDPluginBaseIO] | None,
fileio: NDFileIO,
writer: ADWriterT,
plugins: dict[str, NDPluginBaseIO] | None = None,
config_sigs: Sequence[SignalR] = (),
name: str = "",
fileio_suffix: str | None = None,
):
self.drv = driver
writer, self.fileio = writer_cls.writer_and_io(
prefix + (fileio_suffix or writer_cls.default_suffix),
path_provider,
lambda: name,
ADBaseDatasetDescriber(self.drv),
plugins=plugins,
name=name,
)
self.fileio = fileio

if plugins is not None:
for name, plugin in plugins.items():
Expand Down
11 changes: 9 additions & 2 deletions src/ophyd_async/epics/adcore/_core_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,22 @@ def writer_and_io(
path_provider: PathProvider,
name_provider: NameProvider,
dataset_describer: ADBaseDatasetDescriber,
plugins: dict[str, NDPluginBaseIO] | None = None,
fileio_suffix: str | None = None,
name: str = "",
plugins: dict[str, NDPluginBaseIO] | None = None,
) -> tuple[ADWriterT, NDFileIOT]:
try:
fileio_cls = get_args(cls.__orig_bases__[0])[0] # type: ignore
except IndexError as err:
raise RuntimeError("File IO class for writer not specified!") from err

fileio = fileio_cls(prefix, name=name)
if fileio_suffix is None:
fileio_prefix = prefix + cls.default_suffix
else:
fileio_prefix = prefix + fileio_suffix

fileio = fileio_cls(fileio_prefix, name=name)

writer = cls(
fileio, path_provider, name_provider, dataset_describer, plugins=plugins
)
Expand Down
23 changes: 18 additions & 5 deletions src/ophyd_async/epics/adkinetix/_kinetix.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
from collections.abc import Sequence

from ophyd_async.core import PathProvider, SignalR
from ophyd_async.epics.adcore import ADHDFWriter, ADWriter, AreaDetector, NDPluginBaseIO
from ophyd_async.epics.adcore import (
ADBaseDatasetDescriber,
ADHDFWriter,
ADWriter,
AreaDetector,
NDPluginBaseIO,
)

from ._kinetix_controller import KinetixController

Expand All @@ -26,16 +32,23 @@ def __init__(
controller, driver = KinetixController.controller_and_drv(
prefix + drv_suffix, name=name
)
writer, fileio = writer_cls.writer_and_io(
prefix,
path_provider,
lambda: name,
ADBaseDatasetDescriber(driver),
fileio_suffix=fileio_suffix,
plugins=plugins,
)

super().__init__(
prefix=prefix,
driver=driver,
controller=controller,
writer_cls=writer_cls,
path_provider=path_provider,
fileio=fileio,
writer=writer,
plugins=plugins,
name=name,
fileio_suffix=fileio_suffix,
config_sigs=config_sigs,
)
self.drv = driver
self.fileio = fileio
17 changes: 12 additions & 5 deletions src/ophyd_async/epics/adpilatus/_pilatus.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from ophyd_async.core import PathProvider
from ophyd_async.core._signal import SignalR
from ophyd_async.epics.adcore._core_detector import AreaDetector
from ophyd_async.epics.adcore._core_io import NDPluginBaseIO
from ophyd_async.epics.adcore._core_io import ADBaseDatasetDescriber, NDPluginBaseIO
from ophyd_async.epics.adcore._core_writer import ADWriter
from ophyd_async.epics.adcore._hdf_writer import ADHDFWriter

Expand All @@ -28,16 +28,23 @@ def __init__(
controller, driver = PilatusController.controller_and_drv(
prefix + drv_suffix, name=name, readout_time=readout_time
)
writer, fileio = writer_cls.writer_and_io(
prefix,
path_provider,
lambda: name,
ADBaseDatasetDescriber(driver),
fileio_suffix=fileio_suffix,
plugins=plugins,
)

super().__init__(
prefix=prefix,
driver=driver,
controller=controller,
writer_cls=writer_cls,
path_provider=path_provider,
fileio=fileio,
writer=writer,
plugins=plugins,
name=name,
fileio_suffix=fileio_suffix,
config_sigs=config_sigs,
)
self.drv = driver
self.fileio = fileio
16 changes: 12 additions & 4 deletions src/ophyd_async/epics/adsimdetector/_sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,23 @@ def __init__(
controller, driver = SimController.controller_and_drv(
prefix + drv_suffix, name=name
)
writer, fileio = writer_cls.writer_and_io(
prefix,
path_provider,
lambda: name,
adcore.ADBaseDatasetDescriber(driver),
fileio_suffix=fileio_suffix,
plugins=plugins,
)

super().__init__(
prefix=prefix,
driver=driver,
controller=controller,
writer_cls=writer_cls,
fileio_suffix=fileio_suffix,
path_provider=path_provider,
fileio=fileio,
writer=writer,
plugins=plugins,
name=name,
config_sigs=config_sigs,
)
self.drv = driver
self.fileio = fileio
17 changes: 12 additions & 5 deletions src/ophyd_async/epics/advimba/_vimba.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from ophyd_async.core import PathProvider, SignalR
from ophyd_async.epics import adcore
from ophyd_async.epics.adcore._core_io import ADBaseDatasetDescriber

from ._vimba_controller import VimbaController

Expand All @@ -25,17 +26,23 @@ def __init__(
controller, driver = VimbaController.controller_and_drv(
prefix + drv_suffix, name=name
)
writer, fileio = writer_cls.writer_and_io(
prefix,
path_provider,
lambda: name,
ADBaseDatasetDescriber(driver),
fileio_suffix=fileio_suffix,
plugins=plugins,
)

super().__init__(
prefix=prefix,
driver=driver,
controller=controller,
writer_cls=writer_cls,
path_provider=path_provider,
fileio=fileio,
writer=writer,
plugins=plugins,
name=name,
fileio_suffix=fileio_suffix,
config_sigs=config_sigs,
)

self.drv = driver
self.fileio = fileio
13 changes: 9 additions & 4 deletions tests/epics/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,18 @@ def generate_ad_standard_det(
prefix + "cam1:", name=name
)

test_adstandard_det = adcore.AreaDetector[controller_cls, writer_cls](
writer, fileio = writer_cls.writer_and_io(
prefix,
static_path_provider,
lambda: name,
adcore.ADBaseDatasetDescriber(driver),
)

test_adstandard_det = adcore.AreaDetector[controller_cls, writer_cls](
driver,
controller,
writer_cls,
static_path_provider,
{},
fileio,
writer,
name=name,
)

Expand Down