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