- make paths absolute if possible

- seqfind: read some metadata from display_and_comments.txt if needed and present
This commit is contained in:
w.pomp
2026-03-03 15:56:27 +01:00
parent e5eac07b7b
commit 4563908254
3 changed files with 20 additions and 8 deletions

View File

@@ -1306,9 +1306,11 @@ class Imread(np.lib.mixins.NDArrayOperatorsMixin, ABC):
@staticmethod @staticmethod
def split_path_series(path: Path | str) -> tuple[Path, int]: def split_path_series(path: Path | str) -> tuple[Path, int]:
if isinstance(path, str): if isinstance(path, str):
path = Path(path) path = Path(path).absolute()
if isinstance(path, Path) and path.name.startswith("Pos") and path.name.lstrip("Pos").isdigit(): if isinstance(path, Path) and path.name.startswith("Pos") and path.name.lstrip("Pos").isdigit():
return path.parent, int(path.name.lstrip("Pos")) return path.absolute().parent, int(path.name.lstrip("Pos"))
if isinstance(path, Path):
return path.absolute(), 0
return path, 0 return path, 0
def view(self, *args: Any, **kwargs: Any) -> View: def view(self, *args: Any, **kwargs: Any) -> View:

View File

@@ -1,4 +1,5 @@
import re import re
import warnings
from abc import ABC from abc import ABC
from datetime import datetime from datetime import datetime
from itertools import product from itertools import product
@@ -59,6 +60,7 @@ class Reader(AbstractReader, ABC):
ome = model.OME() ome = model.OME()
with tifffile.TiffFile(self.filedict[0, 0, 0]) as tif: with tifffile.TiffFile(self.filedict[0, 0, 0]) as tif:
metadata = {key: yaml.safe_load(value) for key, value in tif.pages[0].tags[50839].value.items()} metadata = {key: yaml.safe_load(value) for key, value in tif.pages[0].tags[50839].value.items()}
if "Summary" in metadata["Info"] and "UserName" in metadata["Info"]["Summary"]:
ome.experimenters.append( ome.experimenters.append(
model.Experimenter(id="Experimenter:0", user_name=metadata["Info"]["Summary"]["UserName"]) model.Experimenter(id="Experimenter:0", user_name=metadata["Info"]["Summary"]["UserName"])
) )
@@ -112,7 +114,7 @@ class Reader(AbstractReader, ABC):
type=pixel_type, type=pixel_type,
physical_size_x=pxsize, physical_size_x=pxsize,
physical_size_y=pxsize, physical_size_y=pxsize,
physical_size_z=metadata["Info"]["Summary"]["z-step_um"], physical_size_z=metadata["Info"]["Summary"]["z-step_um"] if "Summary" in metadata["Info"] else None,
), ),
objective_settings=model.ObjectiveSettings(id="Objective:0"), objective_settings=model.ObjectiveSettings(id="Objective:0"),
) )
@@ -164,7 +166,15 @@ class Reader(AbstractReader, ABC):
metadata = {key: yaml.safe_load(value) for key, value in tif.pages[0].tags[50839].value.items()} metadata = {key: yaml.safe_load(value) for key, value in tif.pages[0].tags[50839].value.items()}
# compare channel names from metadata with filenames # compare channel names from metadata with filenames
if "Summary" in metadata["Info"] and "ChNames" in metadata["Info"]["Summary"]:
cnamelist = metadata["Info"]["Summary"]["ChNames"] cnamelist = metadata["Info"]["Summary"]["ChNames"]
elif (self.path.parent / "display_and_comments.txt").exists():
warnings.warn(f"{self.path} is missing some metadata")
with open(self.path.parent / "display_and_comments.txt") as f:
cnamelist = [channel["Name"] for channel in yaml.safe_load(f)["Channels"]]
else:
raise ValueError("could not find metadata describing the order of the channels")
cnamelist = [c for c in cnamelist if any([c in f.name for f in filelist])] cnamelist = [c for c in cnamelist if any([c in f.name for f in filelist])]
pattern_c = re.compile(r"img_\d{3,}_(.*)_\d{3,}$", re.IGNORECASE) pattern_c = re.compile(r"img_\d{3,}_(.*)_\d{3,}$", re.IGNORECASE)

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "ndbioimage" name = "ndbioimage"
version = "2026.1.2" version = "2026.3.0"
description = "Bio image reading, metadata and some affine registration." description = "Bio image reading, metadata and some affine registration."
authors = [ authors = [
{ name = "W. Pomp", email = "w.pomp@nki.nl" } { name = "W. Pomp", email = "w.pomp@nki.nl" }