diff --git a/src/lasp/__init__.py b/src/lasp/__init__.py index 091899c..b6f3e90 100644 --- a/src/lasp/__init__.py +++ b/src/lasp/__init__.py @@ -13,6 +13,7 @@ from .lasp_octavefilter import * from .lasp_slm import * # SLM, Dummy from .lasp_record import * # RecordStatus, Recording from .lasp_daqconfigs import * +from .lasp_measurementset import * # from .lasp_siggen import * # SignalType, NoiseType, SiggenMessage, SiggenData, Siggen # from .lasp_weighcal import * # WeighCal # from .tools import * # SmoothingType, smoothSpectralData, SmoothingWidth diff --git a/src/lasp/lasp_measurementset.py b/src/lasp/lasp_measurementset.py index e69de29..6010b7a 100644 --- a/src/lasp/lasp_measurementset.py +++ b/src/lasp/lasp_measurementset.py @@ -0,0 +1,66 @@ +""" +Provides class MeasurementSet, a class used to perform checks and adjustments +on a group of measurements at the same time. + +""" +__all__ = ['MeasurementSet'] +from .lasp_measurement import Measurement +from typing import List + + +class MeasurementSet(list): + """ + Group of measurements that have some correspondence to one another. Class + is used to operate on multiple measurements at once. + + """ + def __init__(self, mlist: List[Measurement] =[]): + """ + Initialize a measurement set + + Args: + mlist: Measurement list + + """ + if any([not isinstance(i, Measurement) for i in mlist]): + raise TypeError('Object in list should be of Measurement type') + + super().__init__(mlist) + + def measTimeSame(self): + """ + Returns True if all measurements have the same measurement + time (recorded time) + + """ + if len(self) > 0: + first = self[0].N + return all([first == meas.N for meas in self]) + else: + return False + + def measSimilar(self): + """ + Similar means: channel metadata is the same, and the measurement time + is the same. It means that the recorded data is, of course, different. + + Returns: + True if measChannelsSame() and measTimeSame() else False + + """ + return self.measTimeSame() and self.measChannelsSame() + + + def measChannelsSame(self): + """ + This method is used to check whether a set of measurements can be + accessed in a loop, i.e. for computing power spectra or sound levels on + a set of measurements, simultaneously. If the channel data is the same + (name, sensitivity, ...) it returns True. + """ + if len(self) > 0: + first = self[0].channelConfig + return all([first == meas.channelConfig for meas in self]) + else: + return False +