def get_parsed_metadata(self): """Returns the parsed metadata in dictionary form. Returns: dict: the parsed metadata """ if self._metadata_parsed is not None: return self._metadata_parsed frames_per_channel = self._parse_total_images_per_channel() self._metadata_parsed = { "height": parse_if_not_none(self.image_attributes, self._parse_height), "width": parse_if_not_none(self.image_attributes, self._parse_width), "date": parse_if_not_none(self.image_text_info, self._parse_date), "fields_of_view": self._parse_fields_of_view(), "frames": self._parse_frames(), "z_levels": self._parse_z_levels(), "z_coordinates": parse_if_not_none(self.z_data, self._parse_z_coordinates), "total_images_per_channel": frames_per_channel, "channels": self._parse_channels(), "pixel_microns": parse_if_not_none(self.image_calibration, self._parse_calibration) } self._set_default_if_not_empty('fields_of_view') self._set_default_if_not_empty('frames') self._metadata_parsed['num_frames'] = len(self._metadata_parsed['frames']) self._parse_roi_metadata() self._parse_experiment_metadata() self._parse_events() return self._metadata_parsed
def _parse_z_levels(self): """The different levels in the Z-plane. If they are not available from the _parse_dimension function AND there is NO 'Dimensions: ' textinfo item in the file, we return a range with the length of z_coordinates if available, otherwise an empty list. Returns: list: the z levels, just a sequence from 0 to n. """ # get the dimension text to check if we should apply the fallback or not dimension_text = self._parse_dimension_text() # this returns range(len(z_levels)) z_levels = self._parse_dimension(r""".*?Z\((\d+)\).*?""", dimension_text) if len(z_levels) > 0 or len(dimension_text) > 0: # Either we have found the z_levels (first condition) so return, or # don't fallback, because Z is apparently not in Dimensions, so # there should be no z_levels return z_levels # Not available from dimension, get from z_coordinates z_levels = parse_if_not_none(self.z_data, self._parse_z_coordinates) if z_levels is None: # No z coordinates, return empty list return [] warnings.warn( "Z-levels details missing in metadata. Using Z-coordinates instead." ) return range(len(z_levels))
def _parse_z_levels(self): """The different levels in the Z-plane. Returns: list: the z levels, just a sequence from 0 to n. """ z_levels = self._parse_dimension(r""".*?Z\((\d+)\).*?""") if 0 == len(z_levels): z_levels = parse_if_not_none(self.z_data, self._parse_z_coordinates) if z_levels is None: z_levels = [] else: z_levels = range(len(z_levels)) warnings.warn( "Z-levels details missing in metadata. Using Z-coordinates instead." ) return z_levels