From 7797f38a59ddafaf6cc6acdce736b1f61b174779 Mon Sep 17 00:00:00 2001 From: Wim Pomp Date: Thu, 12 Oct 2023 14:55:37 +0200 Subject: [PATCH] - transforms bugfixes --- ndbioimage/__init__.py | 12 ++++++++++-- ndbioimage/readers/cziread.py | 6 +++--- ndbioimage/readers/seqread.py | 2 +- ndbioimage/transforms.py | 3 +++ pyproject.toml | 2 +- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ndbioimage/__init__.py b/ndbioimage/__init__.py index d66e3ec..217db89 100755 --- a/ndbioimage/__init__.py +++ b/ndbioimage/__init__.py @@ -40,6 +40,7 @@ except (Exception,): ureg.default_format = '~P' set_application_registry(ureg) +warnings.filterwarnings('ignore', 'Reference to unknown ID') class ReaderNotFoundError(Exception): @@ -51,7 +52,7 @@ class ImTransforms(Transforms): def __init__(self, path, cyllens, file=None, transforms=None): super().__init__() - self.cyllens = cyllens + self.cyllens = tuple(cyllens) if transforms is None: # TODO: check this if re.search(r'^Pos\d+', path.name): @@ -106,7 +107,7 @@ class ImTransforms(Transforms): files = (Path(files),) elif isinstance(files, Path): files = (files,) - return files + return tuple(files) except (Exception,): return () @@ -1375,6 +1376,13 @@ class AbstractReader(Imread, metaclass=ABCMeta): else: self.immersionN = 1 + p = re.compile(r'(\d+):(\d+)$') + try: + self.track, self.detector = zip(*[[int(i) for i in p.findall(find( + self.ome.images[0].pixels.channels, id=f'Channel:{c}').detector_settings.id)[0]] + for c in range(self.shape['c'])]) + except Exception: + pass def main(): parser = ArgumentParser(description='Display info and save as tif') diff --git a/ndbioimage/readers/cziread.py b/ndbioimage/readers/cziread.py index fc2885c..d8d3060 100644 --- a/ndbioimage/readers/cziread.py +++ b/ndbioimage/readers/cziread.py @@ -182,7 +182,7 @@ class Reader(AbstractReader, ABC): ome.images[0].pixels.channels.append( model.Channel( - id=f"Channel:0:{idx}", + id=f"Channel:{idx}", name=channel.attrib["Name"], acquisition_mode=text(channel.find("AcquisitionMode")), color=model.Color(text(channels_ds[channel.attrib["Id"]].find("Color"))), @@ -378,12 +378,12 @@ class Reader(AbstractReader, ABC): ome.images[0].pixels.channels.append( model.Channel( - id=f"Channel:0:{idx}", + id=f"Channel:{idx}", name=channel.attrib["Name"], acquisition_mode=text(channel.find("AcquisitionMode")), color=model.Color(text(channels_ds[channel.attrib["Id"]].find("Color"))), detector_settings=model.DetectorSettings(id=detector.attrib["Id"], binning=binning), - emission_wavelength=text(channel.find("EmissionWavelength")), + # emission_wavelength=text(channel.find("EmissionWavelength")), # TODO: fix excitation_wavelength=light_source_settings.wavelength, filter_set_ref=model.FilterSetRef(id=ome.instruments[0].filter_sets[filterset_idx].id), illumination_type=text(channel.find("IlluminationType")), diff --git a/ndbioimage/readers/seqread.py b/ndbioimage/readers/seqread.py index bd50785..addbb37 100644 --- a/ndbioimage/readers/seqread.py +++ b/ndbioimage/readers/seqread.py @@ -15,7 +15,7 @@ def lazy_property(function, field, *arg_fields): def lazy(self): if self.__dict__.get(field) is None: self.__dict__[field] = function(*[getattr(self, arg_field) for arg_field in arg_fields]) - self.__fields_set__.add(field) + self.model_fields_set.add(field) return self.__dict__[field] return property(lazy) diff --git a/ndbioimage/transforms.py b/ndbioimage/transforms.py index dc31b3b..8972325 100644 --- a/ndbioimage/transforms.py +++ b/ndbioimage/transforms.py @@ -66,6 +66,9 @@ class Transforms(dict): def __setstate__(self, state): self.__dict__.update(state) + def __hash__(self): + return hash(frozenset((*self.__dict__.items(), *self.items()))) + def save(self, file): with open(file.with_suffix(".yml"), 'w') as f: yaml.safe_dump(self.asdict(), f, default_flow_style=None) diff --git a/pyproject.toml b/pyproject.toml index 0373fb3..9b834ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ndbioimage" -version = "2023.9.0" +version = "2023.10.0" description = "Bio image reading, metadata and some affine registration." authors = ["W. Pomp "] license = "GPLv3"