def __parse_load(className): name = className.split('.')[0] jsonFile = open(className, 'r') openJson = json.load(jsonFile) if name == 'SignalObj': openMat = sio.loadmat(openJson['timeSignalAddress']) out = SignalObj(openMat['timeSignal'], domain=openJson['lengthDomain'], samplingRate=openJson['samplingRate'], freqMin=openJson['freqLims'][0], freqMax=openJson['freqLims'][1], comment=openJson['comment']) out.channels = __parse_channels(openJson['channels'], out.channels) os.remove(openJson['timeSignalAddress']) elif name == 'ImpulsiveResponse': ir = pytta_load(openJson['SignalAddress']['ir']) out = ImpulsiveResponse(ir=ir, **openJson['methodInfo']) os.remove(openJson['SignalAddress']['ir']) elif name == 'RecMeasure': inch = list(np.arange(len(openJson['inChannels']))) out = RecMeasure(device=openJson['device'], inChannels=inch, lengthDomain='samples', fftDegree=openJson['fftDegree']) out.inChannels = __parse_channels(openJson['inChannels'], out.inChannels) elif name == 'PlayRecMeasure': inch = list(1 + np.arange(len(openJson['inChannels']))) excit = pytta_load(openJson['excitationAddress']) out = PlayRecMeasure(excitation=excit, device=openJson['device'], inChannels=inch) out.inChannels = __parse_channels(openJson['inChannels'], out.inChannels) os.remove(openJson['excitationAddress']) elif name == 'FRFMeasure': inch = list(1 + np.arange(len(openJson['inChannels']))) excit = pytta_load(openJson['excitationAddress']) out = FRFMeasure(excitation=excit, device=openJson['device'], inChannels=inch) out.inChannels = __parse_channels(openJson['inChannels'], out.inChannels) os.remove(openJson['excitationAddress']) elif name == 'Meta': out = [] for val in openJson.values(): out.append(pytta_load(val)) os.remove(val) os.remove(className) jsonFile.close() return out
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