From f5301c039d8c89446841aa91005141eae9ec4b03 Mon Sep 17 00:00:00 2001 From: Ruben Verweij Date: Tue, 20 Jun 2017 16:22:19 +0200 Subject: [PATCH] Add a third method to determine the loop sampling interval --- nd2reader/raw_metadata.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/nd2reader/raw_metadata.py b/nd2reader/raw_metadata.py index cc79d58..319e9f4 100644 --- a/nd2reader/raw_metadata.py +++ b/nd2reader/raw_metadata.py @@ -349,11 +349,7 @@ class RawMetadata(object): # uiLoopType == 6 is a stimulation loop is_stimulation = get_from_dict_if_exists('uiLoopType', loop) == 6 - # sampling interval in ms - interval = get_from_dict_if_exists('dPeriod', loop) - - if interval is None or interval <= 0: - interval = get_from_dict_if_exists('dAvgPeriodDiff', loop) + interval = self._determine_sampling_interval(duration, loop) parsed_loop = { 'start': time_offset, @@ -369,6 +365,29 @@ class RawMetadata(object): return parsed_loops + @staticmethod + def _determine_sampling_interval(duration, loop): + """Determines the loop sampling interval in milliseconds + + Args: + duration: loop duration in milliseconds + loop: loop dictionary + + Returns: + float: the sampling interval in milliseconds + + """ + interval = get_from_dict_if_exists('dPeriod', loop) + if interval is None or interval <= 0: + # Use a fallback if it is still not found + interval = get_from_dict_if_exists('dAvgPeriodDiff', loop) + if interval is None or interval <= 0: + # In some cases, both keys are not saved. Then try to calculate it. + number_of_loops = get_from_dict_if_exists('uiCount', loop) + number_of_loops = number_of_loops if number_of_loops > 0 else 1 + interval = duration / number_of_loops + return interval + @property def image_text_info(self): """Textual image information