diff --git a/CHANGELOG.md b/CHANGELOG.md index 974f6067..5a1e5bfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ * Updated `Suite2pSegmentationExtractor` to support multi channel and multi plane data. [PR #242](https://github.com/catalystneuro/roiextractors/pull/242) +### Fixes + +* Fixed `MicroManagerTiffImagingExtractor` private extractor's dtype to not override the parent's dtype. [PR #257](https://github.com/catalystneuro/roiextractors/pull/257) + # v0.5.4 diff --git a/src/roiextractors/extractors/tiffimagingextractors/micromanagertiffimagingextractor.py b/src/roiextractors/extractors/tiffimagingextractors/micromanagertiffimagingextractor.py index bfc64d6c..1df9f3d7 100644 --- a/src/roiextractors/extractors/tiffimagingextractors/micromanagertiffimagingextractor.py +++ b/src/roiextractors/extractors/tiffimagingextractors/micromanagertiffimagingextractor.py @@ -100,6 +100,7 @@ def __init__(self, folder_path: PathType): imaging_extractors = [] for file_path, num_frames_per_file in file_counts.items(): extractor = _MicroManagerTiffImagingExtractor(self.folder_path / file_path) + extractor._dtype = self._dtype extractor._num_frames = num_frames_per_file extractor._image_size = (self._height, self._width) imaging_extractors.append(extractor) @@ -207,6 +208,7 @@ def __init__(self, file_path: PathType): super().__init__() self.pages = self.tifffile.TiffFile(self.file_path).pages + self._dtype = None self._num_frames = None self._image_size = None @@ -226,7 +228,7 @@ def get_channel_names(self) -> list: raise NotImplementedError(self.CHANNEL_NAMES_ERROR.format(self.extractor_name)) def get_dtype(self): - raise NotImplementedError(self.DATA_TYPE_ERROR.format(self.extractor_name)) + return self._dtype def get_video( self, start_frame: Optional[int] = None, end_frame: Optional[int] = None, channel: int = 0 @@ -236,7 +238,7 @@ def get_video( end_frame = end_frame or self.get_num_frames() start_frame = start_frame or 0 - video = np.zeros(shape=(end_frame - start_frame, *self.get_image_size())) + video = np.zeros(shape=(end_frame - start_frame, *self.get_image_size()), dtype=self.get_dtype()) for page_ind, page in enumerate(islice(self.pages, start_frame, end_frame)): video[page_ind] = page.asarray() return video diff --git a/tests/test_micromanagertiffimagingextractor.py b/tests/test_micromanagertiffimagingextractor.py index 804b7bfd..ab6b95e2 100644 --- a/tests/test_micromanagertiffimagingextractor.py +++ b/tests/test_micromanagertiffimagingextractor.py @@ -109,7 +109,13 @@ def test_private_micromanagertiffextractor_channel_names(self): self.extractor._imaging_extractors[0].get_channel_names() def test_private_micromanagertiffextractor_dtype(self): + """Test that the dtype of the private extractor is the same as the dtype of the main extractor.""" sub_extractor = self.extractor._imaging_extractors[0] - exc_msg = f"The {sub_extractor.extractor_name}Extractor does not support retrieving the data type." - with self.assertRaisesWith(NotImplementedError, exc_msg=exc_msg): - self.extractor._imaging_extractors[0].get_dtype() + self.assertEqual(self.extractor.get_dtype(), sub_extractor.get_dtype()) + + def test_private_micromanagertiffextractor_get_video(self): + """Test that the dtype of the video is uint16.""" + sub_extractor = self.extractor._imaging_extractors[0] + expected_dtype = np.uint16 + sub_extractor_video_dtype = sub_extractor.get_video().dtype + self.assertEqual(sub_extractor_video_dtype, expected_dtype)