Skip to content

Commit

Permalink
Merge pull request #257 from catalystneuro/fix_micromanagertiff_dtype
Browse files Browse the repository at this point in the history
Fix `MicroManagerTiffImagingExtractor` private extractor's `dtype`
  • Loading branch information
CodyCBakerPhD authored Nov 9, 2023
2 parents 8041fb0 + 3d6104d commit f404852
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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
12 changes: 9 additions & 3 deletions tests/test_micromanagertiffimagingextractor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit f404852

Please sign in to comment.