def _h5_save(self, h5group): """ Saves itself inside a hdf5 group from an already opened file via pytta.save(...). """ h5group.attrs['class'] = 'Analysis' h5group.attrs['anType'] = self.anType h5group.attrs['nthOct'] = self.nthOct h5group.attrs['minBand'] = self.minBand h5group.attrs['maxBand'] = self.maxBand h5group.attrs['dataLabel'] = _h5.attr_parser(self.dataLabel) h5group.attrs['errorLabel'] = _h5.attr_parser(self.errorLabel) h5group.attrs['comment'] = _h5.attr_parser(self.comment) h5group.attrs['xLabel'] = _h5.attr_parser(self.xLabel) h5group.attrs['yLabel'] = _h5.attr_parser(self.yLabel) h5group.attrs['title'] = _h5.attr_parser(self.title) h5group['data'] = self.data if self.error is not None: h5group['error'] = self.error return
def __h5_unpack(objH5Group): """ Unpack an HDF5 group into its respective PyTTa object """ if objH5Group.attrs['class'] == 'SignalObj': # PyTTaObj attrs unpacking samplingRate = objH5Group.attrs['samplingRate'] freqMin = _h5.none_parser(objH5Group.attrs['freqMin']) freqMax = _h5.none_parser(objH5Group.attrs['freqMax']) lengthDomain = objH5Group.attrs['lengthDomain'] comment = objH5Group.attrs['comment'] # SignalObj attr unpacking channels = eval(objH5Group.attrs['channels']) # Added with an if for compatibilitie issues if 'signalType' in objH5Group.attrs: signalType = _h5.attr_parser(objH5Group.attrs['signalType']) else: signalType = 'power' # Creating and conforming SignalObj SigObj = SignalObj(signalArray=np.array(objH5Group['timeSignal']), domain='time', signalType=signalType, samplingRate=samplingRate, freqMin=freqMin, freqMax=freqMax, comment=comment) SigObj.channels = channels SigObj.lengthDomain = lengthDomain return SigObj elif objH5Group.attrs['class'] == 'ImpulsiveResponse': systemSignal = __h5_unpack(objH5Group['systemSignal']) method = objH5Group.attrs['method'] winType = objH5Group.attrs['winType'] winSize = objH5Group.attrs['winSize'] overlap = objH5Group.attrs['overlap'] IR = ImpulsiveResponse(method=method, winType=winType, winSize=winSize, overlap=overlap, ir=systemSignal) return IR elif objH5Group.attrs['class'] == 'RecMeasure': # PyTTaObj attrs unpacking samplingRate = objH5Group.attrs['samplingRate'] freqMin = _h5.none_parser(objH5Group.attrs['freqMin']) freqMax = _h5.none_parser(objH5Group.attrs['freqMax']) comment = objH5Group.attrs['comment'] lengthDomain = objH5Group.attrs['lengthDomain'] fftDegree = objH5Group.attrs['fftDegree'] timeLength = objH5Group.attrs['timeLength'] # Measurement attrs unpacking device = _h5.list_w_int_parser(objH5Group.attrs['device']) inChannels = eval(objH5Group.attrs['inChannels']) blocking = objH5Group.attrs['blocking'] # Recreating the object rObj = measurement(kind='rec', device=device, inChannels=inChannels, blocking=blocking, samplingRate=samplingRate, freqMin=freqMin, freqMax=freqMax, comment=comment, lengthDomain=lengthDomain, fftDegree=fftDegree, timeLength=timeLength) return rObj elif objH5Group.attrs['class'] == 'PlayRecMeasure': # PyTTaObj attrs unpacking samplingRate = objH5Group.attrs['samplingRate'] freqMin = _h5.none_parser(objH5Group.attrs['freqMin']) freqMax = _h5.none_parser(objH5Group.attrs['freqMax']) comment = objH5Group.attrs['comment'] lengthDomain = objH5Group.attrs['lengthDomain'] fftDegree = objH5Group.attrs['fftDegree'] timeLength = objH5Group.attrs['timeLength'] # Measurement attrs unpacking device = _h5.list_w_int_parser(objH5Group.attrs['device']) inChannels = eval(objH5Group.attrs['inChannels']) outChannels = eval(objH5Group.attrs['outChannels']) blocking = objH5Group.attrs['blocking'] # PlayRecMeasure attrs unpacking excitation = __h5_unpack(objH5Group['excitation']) outputAmplification = objH5Group.attrs['outputAmplification'] # Recreating the object prObj = measurement(kind='playrec', excitation=excitation, outputAmplification=outputAmplification, device=device, inChannels=inChannels, outChannels=outChannels, blocking=blocking, samplingRate=samplingRate, freqMin=freqMin, freqMax=freqMax, comment=comment) return prObj elif objH5Group.attrs['class'] == 'FRFMeasure': # PyTTaObj attrs unpacking samplingRate = objH5Group.attrs['samplingRate'] freqMin = _h5.none_parser(objH5Group.attrs['freqMin']) freqMax = _h5.none_parser(objH5Group.attrs['freqMax']) comment = objH5Group.attrs['comment'] lengthDomain = objH5Group.attrs['lengthDomain'] fftDegree = objH5Group.attrs['fftDegree'] timeLength = objH5Group.attrs['timeLength'] # Measurement attrs unpacking device = _h5.list_w_int_parser(objH5Group.attrs['device']) inChannels = eval(objH5Group.attrs['inChannels']) outChannels = eval(objH5Group.attrs['outChannels']) blocking = objH5Group.attrs['blocking'] # PlayRecMeasure attrs unpacking excitation = __h5_unpack(objH5Group['excitation']) outputAmplification = objH5Group.attrs['outputAmplification'] # FRFMeasure attrs unpacking method = _h5.none_parser(objH5Group.attrs['method']) winType = _h5.none_parser(objH5Group.attrs['winType']) winSize = _h5.none_parser(objH5Group.attrs['winSize']) overlap = _h5.none_parser(objH5Group.attrs['overlap']) # Recreating the object frfObj = measurement(kind='frf', method=method, winType=winType, winSize=winSize, overlap=overlap, excitation=excitation, outputAmplification=outputAmplification, device=device, inChannels=inChannels, outChannels=outChannels, blocking=blocking, samplingRate=samplingRate, freqMin=freqMin, freqMax=freqMax, comment=comment) return frfObj elif objH5Group.attrs['class'] == 'Analysis': # Analysis attrs unpacking anType = _h5.attr_parser(objH5Group.attrs['anType']) nthOct = _h5.attr_parser(objH5Group.attrs['nthOct']) minBand = _h5.attr_parser(objH5Group.attrs['minBand']) maxBand = _h5.attr_parser(objH5Group.attrs['maxBand']) comment = _h5.attr_parser(objH5Group.attrs['comment']) title = _h5.attr_parser(objH5Group.attrs['title']) dataLabel = _h5.attr_parser(objH5Group.attrs['dataLabel']) errorLabel = _h5.attr_parser(objH5Group.attrs['errorLabel']) xLabel = _h5.attr_parser(objH5Group.attrs['xLabel']) yLabel = _h5.attr_parser(objH5Group.attrs['yLabel']) # Analysis data unpacking data = np.array(objH5Group['data']) # If error in save moment was None no group was created for it if 'error' in objH5Group: error = np.array(objH5Group['error']) else: error = None # Recreating the object anObject = Analysis(anType=anType, nthOct=nthOct, minBand=minBand, maxBand=maxBand, data=data, dataLabel=dataLabel, error=error, errorLabel=errorLabel, comment=comment, xLabel=xLabel, yLabel=yLabel, title=title) return anObject elif objH5Group.attrs['class'] == 'dict': dictObj = {} for PyTTaObjName, PyTTaObjH5Group in objH5Group.items(): dictObj[PyTTaObjName] = __h5_unpack(PyTTaObjH5Group) return dictObj elif objH5Group.attrs['class'] == 'list': dictObj = {} for idx, PyTTaObjH5Group in objH5Group.items(): dictObj[int(idx)] = __h5_unpack(PyTTaObjH5Group) idxs = [int(item) for item in list(dictObj.keys())] maxIdx = max(idxs) listObj = [] for idx in range(maxIdx + 1): listObj.append(dictObj[idx]) return listObj else: raise NotImplementedError