diff --git a/nd2reader/raw_metadata.py b/nd2reader/raw_metadata.py index 1152219..3d4624c 100644 --- a/nd2reader/raw_metadata.py +++ b/nd2reader/raw_metadata.py @@ -1,3 +1,4 @@ +from collections.abc import Sequence import re import xmltodict import six @@ -137,13 +138,21 @@ def _process_channels_metadata(self, metadata): channels.append('Unknown') return channels + def _parse_validity(self): + parsed = self.image_metadata[six.b('SLxExperiment')] + for _ in range(2): + parsed = parsed[six.b('ppNextLevelEx')][six.b('')] + if isinstance(parsed, Sequence): + # Old format had this structure. + parsed = parsed[0] + return parsed[six.b('pItemValid')] + def _get_channel_validity_list(self, metadata): try: - validity = self.image_metadata[six.b('SLxExperiment')][six.b('ppNextLevelEx')][six.b('')][0][ - six.b('ppNextLevelEx')][six.b('')][0][six.b('pItemValid')] + validity = self._parse_validity() except (KeyError, TypeError): # If none of the channels have been deleted, there is no validity list, so we just make one - validity = [True for _ in metadata] + validity = [True for _ in metadata[six.b('sPlaneNew')]] return validity def _parse_fields_of_view(self):