From 319061794dd3c3130ea52f05dd7fa76faa84d733 Mon Sep 17 00:00:00 2001 From: Gary Yendell Date: Mon, 16 Feb 2026 11:16:45 +0000 Subject: [PATCH 1/3] Update script to support stream2 --- run_acquisition.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/run_acquisition.py b/run_acquisition.py index 6c86f9e..91ddc29 100644 --- a/run_acquisition.py +++ b/run_acquisition.py @@ -13,8 +13,11 @@ def main( file_name: str = "test", frames: int = 10, exposure_time: float = 1, + stream2: bool = True, ): - asyncio.run(run_acquisition(prefix, file_path, file_name, frames, exposure_time)) + asyncio.run( + run_acquisition(prefix, file_path, file_name, frames, exposure_time, stream2) + ) async def run_acquisition( @@ -23,17 +26,21 @@ async def run_acquisition( file_name: str, frames: int, exposure_time: float, + stream2: bool, ): eiger_prefix = prefix odin_prefix = f"{prefix}:OD" await tidy(eiger_prefix, odin_prefix) + await caput_str(f"{odin_prefix}:AcquisitionId", "") print("Configuring") await asyncio.gather( + caput_str(f"{eiger_prefix}:Stream:Format", "cbor" if stream2 else "legacy"), + caput_str(f"{eiger_prefix}:Stream:HeaderDetail", "all"), caput(f"{odin_prefix}:BlockSize", 1), caput_str(f"{odin_prefix}:FilePath", file_path), - caput_str(f"{odin_prefix}:AcquisitionId", file_name), + caput_str(f"{odin_prefix}:FilePrefix", file_name), caput(f"{odin_prefix}:FP:Frames", frames), caput(f"{eiger_prefix}:Detector:Nimages", frames), caput(f"{eiger_prefix}:Detector:Ntrigger", 1), @@ -92,7 +99,7 @@ async def pv_equals(pv: str, value: Any, timeout: float = 10): await asyncio.sleep(1) timeout -= 1 - print(f"Timed out waiting for {pv} to equal {value}") + raise RuntimeError(f"Timed out waiting for {pv} to equal {value}") if __name__ == "__main__": From 92326b8de5db8667e5a5f01b15d84179e36dc5a1 Mon Sep 17 00:00:00 2001 From: Shihab Suliman Date: Tue, 17 Feb 2026 14:56:19 +0000 Subject: [PATCH 2/3] chore: set count time in acquisition script --- run_acquisition.py | 1 + 1 file changed, 1 insertion(+) diff --git a/run_acquisition.py b/run_acquisition.py index 91ddc29..49d2ddb 100644 --- a/run_acquisition.py +++ b/run_acquisition.py @@ -45,6 +45,7 @@ async def run_acquisition( caput(f"{eiger_prefix}:Detector:Nimages", frames), caput(f"{eiger_prefix}:Detector:Ntrigger", 1), caput(f"{eiger_prefix}:Detector:FrameTime", exposure_time), + caput(f"{eiger_prefix}:Detector:CountTime", exposure_time), # caput(f"{eiger_prefix}:Detector:TriggerMode", "ints"), # for real detector caput_str(f"{eiger_prefix}:Detector:TriggerMode", "ints"), # for tickit sim ) From 6c1d3dbd3e440817c79f2926b5f6b03ef636d549 Mon Sep 17 00:00:00 2001 From: Gary Yendell Date: Mon, 9 Mar 2026 10:17:14 +0000 Subject: [PATCH 3/3] Update fastcs-odin version Update logger --- pyproject.toml | 3 +-- src/fastcs_eiger/controllers/eiger_controller.py | 5 ++--- src/fastcs_eiger/controllers/eiger_subsystem_controller.py | 6 ++---- src/fastcs_eiger/io.py | 5 ++--- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 750dfeb..15bd51e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,8 +12,7 @@ classifiers = [ description = "Eiger control system integration with FastCS" dependencies = [ "aiohttp", - "fastcs[epicsca]", - "fastcs-odin @ git+https://github.com/DiamondLightSource/fastcs-odin.git@0.8.0a1", + "fastcs-odin~=0.9.0", "numpy", "pillow", "typer", diff --git a/src/fastcs_eiger/controllers/eiger_controller.py b/src/fastcs_eiger/controllers/eiger_controller.py index 0f4310c..1d2eea9 100644 --- a/src/fastcs_eiger/controllers/eiger_controller.py +++ b/src/fastcs_eiger/controllers/eiger_controller.py @@ -5,7 +5,7 @@ from fastcs.connections import IPConnectionSettings from fastcs.controllers import Controller from fastcs.datatypes import Bool, Int -from fastcs.logging import bind_logger +from fastcs.logging import logger from fastcs.methods import command, scan from fastcs_eiger.controllers.eiger_detector_controller import EigerDetectorController @@ -42,7 +42,6 @@ def __init__( ) -> None: super().__init__() self.connection_settings = connection_settings - self.logger = bind_logger(__class__.__name__) self.connection = HTTPConnection(connection_settings) self._parameter_update_lock = asyncio.Lock() @@ -120,7 +119,7 @@ async def update(self): await asyncio.gather(*coros) if self.queue.empty(): - self.logger.info("All parameters updated") + logger.info("All parameters updated") await self.stale_parameters.update(not self.queue.empty()) async def queue_subsystem_update(self, coros: list[Coroutine]): diff --git a/src/fastcs_eiger/controllers/eiger_subsystem_controller.py b/src/fastcs_eiger/controllers/eiger_subsystem_controller.py index ee16314..1491737 100644 --- a/src/fastcs_eiger/controllers/eiger_subsystem_controller.py +++ b/src/fastcs_eiger/controllers/eiger_subsystem_controller.py @@ -4,7 +4,7 @@ from fastcs.attributes import Attribute, AttrR, AttrRW from fastcs.controllers import Controller -from fastcs.logging import bind_logger +from fastcs.logging import logger from fastcs.util import ONCE from fastcs_eiger.eiger_parameter import ( @@ -57,8 +57,6 @@ def __init__( queue_subsystem_update: Callable[[list[Coroutine]], Coroutine], api_version: EigerAPIVersion, ): - self.logger = bind_logger(__class__.__name__) - self.connection = connection self._queue_subsystem_update = queue_subsystem_update self._io = EigerAttributeIO(connection, self.update_now, self.queue_update) @@ -160,7 +158,7 @@ async def update_now(self, parameters: Iterable[str]): if parameters: coros = self._get_update_coros_for_parameters(parameters) await asyncio.gather(*coros) - self.logger.info("Parameters updated during put", parameters=parameters) + logger.info("Parameters updated during put", parameters=parameters) def _get_update_coros_for_parameters( self, parameters: Iterable[str] diff --git a/src/fastcs_eiger/io.py b/src/fastcs_eiger/io.py index 30168f8..64cc4fd 100644 --- a/src/fastcs_eiger/io.py +++ b/src/fastcs_eiger/io.py @@ -3,7 +3,7 @@ from fastcs.attributes import AttributeIO, AttrR, AttrW from fastcs.datatypes import DType_T -from fastcs.logging import bind_logger +from fastcs.logging import logger from fastcs_eiger.eiger_parameter import EigerParameterRef from fastcs_eiger.http_connection import HTTPConnection @@ -25,7 +25,6 @@ def __init__( self.connection = connection self.update_now = update_now self.queue_update = queue_update - self.logger = bind_logger(__class__.__name__) def _handle_params_to_update( self, parameters: list[str], uri: str @@ -53,7 +52,7 @@ async def send( parameters_to_update, attr.io_ref.uri ) - self.logger.info( + logger.info( "Parameter put", attribute=attr, value=value,