From f4e6658eb8d9ee80df25994f4906e58b7c93b49b Mon Sep 17 00:00:00 2001 From: Matthias Straka Date: Fri, 13 Aug 2021 14:46:24 +0200 Subject: [PATCH] Fix: too many samples returned for ranged async data --- pyDmdReader/_dmd_reader.py | 12 ++++++++++-- tests/data/syncasync.dmd | Bin 0 -> 192512 bytes tests/test_loadfile_dataframe.py | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 tests/data/syncasync.dmd diff --git a/pyDmdReader/_dmd_reader.py b/pyDmdReader/_dmd_reader.py index cf7f070..fe9ca04 100644 --- a/pyDmdReader/_dmd_reader.py +++ b/pyDmdReader/_dmd_reader.py @@ -353,8 +353,16 @@ def __get_ranged_sweeps(self, ch_config, start_time, end_time) -> Tuple[np.array block_max_samples = last_sample - first_sample + 1 raw_timestamps, raw_values, next_sample = self.__get_single_sweep(ch_config, first_sample, block_max_samples) - data = np.r_[data, raw_values] - timestamps = np.r_[timestamps, raw_timestamps] + + if len(raw_timestamps) > 0: + if raw_timestamps[-1] <= actual_end_time: + timestamps = np.r_[timestamps, raw_timestamps] + data = np.r_[data, raw_values] + else: + # Do not use sample values outside the requested range + last_valid = np.argmax(raw_timestamps > actual_end_time) + timestamps = np.r_[timestamps, raw_timestamps[:last_valid]] + data = np.r_[data, raw_values[:(last_valid * ch_config.max_sample_dimension)]] first_sample = next_sample diff --git a/tests/data/syncasync.dmd b/tests/data/syncasync.dmd new file mode 100644 index 0000000000000000000000000000000000000000..2ba49b9a5aad5cd8fbeacd738dfd2f9b9f3a229c GIT binary patch literal 192512 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 F{tu(*(W3wW literal 0 HcmV?d00001 diff --git a/tests/test_loadfile_dataframe.py b/tests/test_loadfile_dataframe.py index 4e29114..fa1f741 100644 --- a/tests/test_loadfile_dataframe.py +++ b/tests/test_loadfile_dataframe.py @@ -9,6 +9,7 @@ import pytest SIMPLE_DMD = os.path.join(os.path.dirname(__file__), "data/simple.dmd") +SYNCASYNC_DMD = os.path.join(os.path.dirname(__file__), "data/syncasync.dmd") INTERNAL_DMD = 'DMD_DEMO_FILE' def test_check_invalid_name(): @@ -149,3 +150,27 @@ def test_timerange_simple(): assert round(data.index[-1], 2) == 0.4 dmd.close() + +def test_async(): + dmd = DmdReader(SYNCASYNC_DMD) + # The file has one sweeps [0 - 0.633] but a recording offset to acquisition start + all_data_sync = dmd.read_dataframe(dmd.channel_names[0]) + all_data_async = dmd.read_dataframe(dmd.channel_names[1]) + assert len(all_data_sync) == 29315 + assert len(all_data_async) == 293 + assert all_data_sync.index[0] == 0 + assert round(all_data_sync.index[-1], 3) == round(dmd.measurement_duration, 3) + assert round(all_data_async.index[0], 2) == 0.01 # Async average with 100 Hz + assert round(all_data_async.index[-1], 2) == 2.93 + + rng_data_sync = dmd.read_dataframe(dmd.channel_names[0], start_time=0.5, end_time=1.5) + rng_data_async = dmd.read_dataframe(dmd.channel_names[1], start_time=0.5, end_time=1.5) + assert len(rng_data_sync) == 10001 + assert len(rng_data_async) == 101 + + assert round(rng_data_sync.index[0], 3) == 0.5 + assert round(rng_data_sync.index[-1], 3) == 1.5 + assert round(rng_data_async.index[0], 2) == 0.5 + assert round(rng_data_async.index[-1], 2) == 1.5 + + dmd.close() \ No newline at end of file