From ab57c482506965d3b0630e0ca8167c44af63d8fe Mon Sep 17 00:00:00 2001 From: gac-x02da Date: Tue, 17 Jun 2025 10:35:29 +0200 Subject: [PATCH] wip --- tomcat_bec/devices/pco_edge/pcoedgecamera.py | 13 ++++++-- tomcat_bec/scans/simple_scans.py | 31 ++++++++++---------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/tomcat_bec/devices/pco_edge/pcoedgecamera.py b/tomcat_bec/devices/pco_edge/pcoedgecamera.py index 2bc810e..417ffad 100644 --- a/tomcat_bec/devices/pco_edge/pcoedgecamera.py +++ b/tomcat_bec/devices/pco_edge/pcoedgecamera.py @@ -245,7 +245,8 @@ class PcoEdge5M(PSIDeviceBase, PcoEdgeBase): self, name: str, file_path: str = "", - file_prefix: str = "", + file_name: str | None = None, + file_suffix:str = "", num_images: int | None = None, frames_per_trigger: int | None = None, ) -> StatusBase: @@ -263,14 +264,20 @@ class PcoEdge5M(PSIDeviceBase, PcoEdgeBase): Returns: DeviceStatus: The status of the restart operation. It resolves when the camera is ready to receive the first image. """ + if file_name is not None and file_suffix: + raise ValueError("Both file_name and file_suffix are specified. Please choose one.") + self.acq_configs[name] = {} conf = {} if file_path: self.acq_configs[name]["file_path"] = self.file_path.get() conf["file_path"] = file_path - if file_prefix: + if file_suffix: self.acq_configs[name]["file_prefix"] = self.file_prefix.get() - conf["file_prefix"] = file_prefix + conf["file_prefix"] = "_".join([self.file_prefix.get(), file_suffix]) + if file_name: + self.acq_configs[name]["file_prefix"] = self.file_prefix.get() + conf["file_prefix"] = file_name if num_images is not None: self.acq_configs[name]["num_images"] = self.num_images.get() conf["num_images"] = num_images diff --git a/tomcat_bec/scans/simple_scans.py b/tomcat_bec/scans/simple_scans.py index 7344d0e..432278f 100644 --- a/tomcat_bec/scans/simple_scans.py +++ b/tomcat_bec/scans/simple_scans.py @@ -45,7 +45,7 @@ class TomoComponents: self, name: str, num_images: int, - prefix: str = "", + file_suffix: str = "", file_path: str = "", frames_per_trigger: int = 1, ): @@ -55,18 +55,16 @@ class TomoComponents: Args: name (str): Name of the configuration to restart with. num_images (int): Number of images to acquire. - prefix (str): Prefix for the file names. + file_suffix (str): Suffix for the file names. file_path (str): Path where the files will be saved. frames_per_trigger (int): Number of frames to acquire per trigger. """ - if not prefix: - return for cam in self.cameras: yield from self.stubs.send_rpc_and_wait( device=cam, func_name="restart_with_new_config", name=name, - file_prefix=prefix, + file_suffix=file_suffix, file_path=file_path, num_images=num_images, frames_per_trigger=frames_per_trigger, @@ -121,7 +119,7 @@ class TomoComponents: device=cam, func_name="update_live_processing_reference", reference_type=ref_type ) - def acquire_dark(self, num_images: int, exposure_time: float, name="dark", restart=True): + def acquire_dark(self, num_images: int, exposure_time: float, name="dark", restart=True, restore=True): """ Acquire dark images. @@ -136,20 +134,20 @@ class TomoComponents: if restart: yield from self.restart_cameras( - name=name, prefix=name, num_images=num_images, frames_per_trigger=num_images + name=name, file_suffix=name, num_images=num_images, frames_per_trigger=num_images ) # yield from self.close_shutter() yield from self.stubs.trigger(min_wait=exposure_time * num_images) yield from self.complete() yield from self.update_live_processing_references(ref_type="dark") - if restart: + if restore: yield from self.restore_configs(name=name) # yield from self.open_shutter() self.connector.send_client_info("") logger.info("Dark image acquisition complete.") - def acquire_flat(self, num_images: int, exposure_time: float, name="flat", restart=True): + def acquire_flat(self, num_images: int, exposure_time: float, name="flat", restart=True, restore=True): """ Acquire flat images. @@ -164,21 +162,21 @@ class TomoComponents: if restart: yield from self.restart_cameras( - name=name, prefix=name, num_images=num_images, frames_per_trigger=num_images + name=name, file_suffix=name, num_images=num_images, frames_per_trigger=num_images ) # yield from self.open_shutter() yield from self.stubs.trigger(min_wait=exposure_time * num_images) yield from self.complete() yield from self.update_live_processing_references(ref_type="flat") - if restart: + if restore: yield from self.restore_configs(name=name) logger.info("Flat image acquisition complete.") self.connector.send_client_info("") - def acquire_references(self, num_darks: int, num_flats: int, exp_time: float, restart=True): - yield from self.acquire_dark(num_darks, exposure_time=exp_time, restart=restart) - yield from self.acquire_flat(num_flats, exposure_time=exp_time, restart=restart) + def acquire_references(self, num_darks: int, num_flats: int, exp_time: float, restart=True, restore=True): + yield from self.acquire_dark(num_darks, exposure_time=exp_time, restart=restart, restore=restore) + yield from self.acquire_flat(num_flats, exposure_time=exp_time, restart=restart, restore=restore) class AcquireDark(ScanBase): @@ -263,8 +261,11 @@ class AcquireReferences(ScanBase): def scan_report_instructions(self): yield from self.components.scan_report_instructions() + def pre_scan(self): + yield from self.components.acquire_references(self.num_darks, self.num_flats, self.exp_time, restart=True, restore=False) + def scan_core(self): - yield from self.components.acquire_references(self.num_darks, self.num_flats, self.exp_time) + pass class TomoScan(LineScan):