From 0232b8aae02385cec0021b7839abab6ab161485c Mon Sep 17 00:00:00 2001 From: "J.A. de Jong - Redu-Sone B.V., ASCEE V.O.F" Date: Fri, 18 Sep 2020 08:55:24 +0200 Subject: [PATCH] We have some problems with the Measurement class. One way or another, changes to measurement files (sensitivity values) from ACME are not stored in the measurement file. Moreover, we concluded that the Measurement interface contains some inconsistencies/unclarities in its interface --- lasp/lasp_common.py | 14 ++++++++----- lasp/lasp_measurement.py | 43 +++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/lasp/lasp_common.py b/lasp/lasp_common.py index 3c3ec95..2bb9e74 100644 --- a/lasp/lasp_common.py +++ b/lasp/lasp_common.py @@ -99,12 +99,13 @@ class SIQtys: @dataclass class CalSetting: name: str - cal_value: float + cal_value_dB: float + cal_value_linear: float qty: Qty class CalibrationSettings: - one = CalSetting('94 dB SPL', 1.0, SIQtys.AP) - two = CalSetting('114 dB SPL', 10.0, SIQtys.AP) + one = CalSetting('94 dB SPL', 94.0 , 1.0, SIQtys.AP) + two = CalSetting('114 dB SPL', 114.0 , 10.0, SIQtys.AP) types = (one, two) default = one @@ -120,12 +121,15 @@ class CalibrationSettings: """ cb.clear() for ty in CalibrationSettings.types: - cb.addItem(f'{ty.name}') + cb.addItem(f'{ty.cal_value_dB}') cb.setCurrentIndex(CalibrationSettings.default_index) @staticmethod def getCurrent(cb): - return CalibrationSettings.types[cb.currentIndex()] + if cb.currentIndex() < len(CalibrationSettings.types): + return CalibrationSettings.types[cb.currentIndex()] + else: + return None lasp_appdir = appdirs.user_data_dir('Lasp', 'ASCEE') diff --git a/lasp/lasp_measurement.py b/lasp/lasp_measurement.py index 643b8d4..9699bf4 100644 --- a/lasp/lasp_measurement.py +++ b/lasp/lasp_measurement.py @@ -370,6 +370,8 @@ class Measurement: sensitivity is applied, converted to floating point acoustic pressure values [Pa].""" + print('TODO: THIS SHOULD BE CHANGED, VERY INCONSISTENT AND CONFUSING API') + blocks = self.rawData(block) # Apply scaling (sensitivity, integer -> float) @@ -394,26 +396,6 @@ class Measurement: """ return self._sens - def checkOverflow(self): - """Coarse check for overflow in measurement. - - Return: - True if overflow is possible, else False - """ - - with self.file() as f: - for block in self.iterBlocks(f): - dtype = block.dtype - if dtype.kind == 'i': - # minvalue = np.iinfo(dtype).min - maxvalue = np.iinfo(dtype).max - if np.max(np.abs(block)) >= 0.9*maxvalue: - return True - else: - # Cannot check for floating point values. - return False - return False - @sensitivity.setter def sensitivity(self, sens): """Set the sensitivity of the measurement in the file. @@ -437,6 +419,27 @@ class Measurement: f.attrs['sensitivity'] = sens self._sens = sens + def checkOverflow(self): + """Coarse check for overflow in measurement. + + Return: + True if overflow is possible, else False + """ + + with self.file() as f: + for block in self.iterBlocks(f): + dtype = block.dtype + if dtype.kind == 'i': + # minvalue = np.iinfo(dtype).min + maxvalue = np.iinfo(dtype).max + if np.max(np.abs(block)) >= 0.9*maxvalue: + return True + else: + # Cannot check for floating point values. + return False + return False + + def exportAsWave(self, fn=None, force=False, newsampwidth=None, normalize=True): """Export measurement file as wave. In case the measurement data is stored as floats, the values are scaled to the proper integer (PCM)