From 0ef75c9393068fd800f79981a677e6fb2bfdaa7d Mon Sep 17 00:00:00 2001 From: pswain <peter.swain@ed.ac.uk> Date: Thu, 7 Mar 2024 17:25:12 +0000 Subject: [PATCH] change(metadata): searching for log files For both old and new log files, we now also search the parent directory for the log file. For pipeline, OMERO_channels can be specified explicitly. --- src/agora/io/metadata.py | 6 +++--- src/aliby/broken_pipeline.py | 5 +++-- src/aliby/io/image.py | 3 ++- src/aliby/io/omero.py | 1 - src/aliby/tile/tiler.py | 4 +++- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/agora/io/metadata.py b/src/agora/io/metadata.py index 4da1b28..bed04c4 100644 --- a/src/agora/io/metadata.py +++ b/src/agora/io/metadata.py @@ -211,6 +211,9 @@ def get_meta_from_legacy(parsed_metadata: dict): def parse_swainlab_metadata(filedir: t.Union[str, Path]): """Parse new, .log, and old, .txt, files in a directory into a dict.""" filedir = Path(filedir) + if filedir.is_file() or str(filedir).endswith(".zarr"): + # log file is in parent directory + filedir = filedir.parent filepath = find_file(filedir, "*.log") if filepath: # new log files ending in .log @@ -218,9 +221,6 @@ def parse_swainlab_metadata(filedir: t.Union[str, Path]): minimal_meta = get_minimal_meta_swainlab(raw_parse) else: # old log files ending in .txt - if filedir.is_file() or str(filedir).endswith(".zarr"): - # log file is in parent directory - filedir = filedir.parent legacy_parse = parse_logfiles(filedir) minimal_meta = ( get_meta_from_legacy(legacy_parse) if legacy_parse else {} diff --git a/src/aliby/broken_pipeline.py b/src/aliby/broken_pipeline.py index b03eabf..d54c269 100644 --- a/src/aliby/broken_pipeline.py +++ b/src/aliby/broken_pipeline.py @@ -224,7 +224,7 @@ class Pipeline(ProcessABC): directory = self.store or root_dir / conn.unique_name if not directory.exists(): directory.mkdir(parents=True) - # get logs to use for metadata + # copy logs to h5 directory conn.cache_logs(directory) print("Positions available:") for i, pos in enumerate(position_ids.keys()): @@ -280,7 +280,8 @@ class Pipeline(ProcessABC): def run(self): """Run separate pipelines for all positions in an experiment.""" - self.OMERO_channels = self.channels_from_OMERO() + if not hasattr(self, "OMERO_channels"): + self.OMERO_channels = self.channels_from_OMERO() config = self.parameters.to_dict() position_ids = self.setup() # pick particular positions if desired diff --git a/src/aliby/io/image.py b/src/aliby/io/image.py index 4200564..b87bcdc 100644 --- a/src/aliby/io/image.py +++ b/src/aliby/io/image.py @@ -50,8 +50,9 @@ def instantiate_image( def dispatch_image(source: t.Union[str, int, t.Dict[str, str], Path]): - """Pick the appropriate Image class depending on the source of data.""" + """Pick the appropriate Image class for the source of data.""" if isinstance(source, (int, np.int64)): + # requires omero module from aliby.io.omero import Image instantiator = Image diff --git a/src/aliby/io/omero.py b/src/aliby/io/omero.py index e91ec68..8d453f5 100644 --- a/src/aliby/io/omero.py +++ b/src/aliby/io/omero.py @@ -4,7 +4,6 @@ Tools to manage I/O using a remote OMERO server. import re import typing as t -from abc import abstractmethod from pathlib import Path import dask.array as da diff --git a/src/aliby/tile/tiler.py b/src/aliby/tile/tiler.py index c8bb150..981b4c7 100644 --- a/src/aliby/tile/tiler.py +++ b/src/aliby/tile/tiler.py @@ -268,7 +268,9 @@ class Tiler(StepABC): list(range(metadata.get("size_c", 0))), ) else: - # new image meta data contains channels for that image + channels = [] + if not channels: + # image meta data contains channels for that image channels = metadata.get( "channels", list(range(metadata.get("size_c", 0))) ) -- GitLab