def addFieldFromHdf5(self, hdf5Parser, key, names=[], projectedField=False): ''' Add a list field stored in a hdf5 to the TriSurfaceContainer. Arguments: *hdf5Parser*: h5py parser object. Parser object of the source hdf5 file. *key*: python string. The time (as a key) to extract from the HDF5. If it does not exist, IOError is returned. *names*: python list of string. Name of the fields to extract from the HDF5. It can be a single field (names=['oneField']) or multiple. if names=[], all the fields are loaded. Default: names=[]. *projectedField*: python bool Project the fields in the surface coordinate system. Default: projectedField=False. Usages: >>> import h5py >>> parser = h5py.File('myfile.h5','r') >>> tsc = TriSurfaceContainer.createFromHdf5(parser,xViewBasis=[1,0,0]) >>> tsc.addFieldFromHdf5(parser,time=1.5,names=['U','S']) ''' gTime = key time = float(key) if len(names) == 0: names = hdf5Parser[gTime].keys() names.pop(names.index('time')) for name in names: try: dataShape = hdf5Parser[gTime][name].value.shape if len(dataShape) == 1: #data is a scalar tss = TriSurfaceScalar.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField) self.fields[name] = tss elif len(dataShape ) == 2 and dataShape[1] == 3: #data is a vector tsv = TriSurfaceVector.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField) self.fields[name] = tsv elif len(dataShape ) == 2 and dataShape[1] == 6: #data is a symmtensor tsst = TriSurfaceSymmTensor.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField) self.fields[name] = tsst else: raise IOError('variable of name "' + name + '" is not a' 'scalar, not a vector, not a symmTensor.') except KeyError as e: 'time "' + gTime + '" and/or name "' + name + '" does not exist as key in the HDF5 parser. Not read, but continuing' print e except KeyboardInterrupt as e: print e return False except MemoryError as e: print e return False except: print "Unexpected error:", sys.exc_info()[0] #raise IOError('time "'+gTime+'" and/or name "'+name+'" does not ' #'exist as key in the HDF5 parser.') return False return True
def addFieldFromHdf5(self, hdf5Parser, key, names=[], projectedField=False): """ Add a list field stored in a hdf5 to the TriSurfaceContainer. Arguments: *hdf5Parser*: h5py parser object. Parser object of the source hdf5 file. *key*: python string. The time (as a key) to extract from the HDF5. If it does not exist, IOError is returned. *names*: python list of string. Name of the fields to extract from the HDF5. It can be a single field (names=['oneField']) or multiple. if names=[], all the fields are loaded. Default: names=[]. *projectedField*: python bool Project the fields in the surface coordinate system. Default: projectedField=False. Usages: >>> import h5py >>> parser = h5py.File('myfile.h5','r') >>> tsc = TriSurfaceContainer.createFromHdf5(parser,xViewBasis=[1,0,0]) >>> tsc.addFieldFromHdf5(parser,time=1.5,names=['U','S']) """ gTime = key time = float(key) if len(names) == 0: names = hdf5Parser[gTime].keys() names.pop(names.index("time")) for name in names: try: dataShape = hdf5Parser[gTime][name].value.shape if len(dataShape) == 1: # data is a scalar tss = TriSurfaceScalar.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField, ) self.fields[name] = tss elif len(dataShape) == 2 and dataShape[1] == 3: # data is a vector tsv = TriSurfaceVector.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField, ) self.fields[name] = tsv elif len(dataShape) == 2 and dataShape[1] == 6: # data is a symmtensor tsst = TriSurfaceSymmTensor.readFromHdf5( hdf5Parser=hdf5Parser, varName=name, triSurfaceMesh=self.triSurfaceMesh, key=key, projectedField=projectedField, ) self.fields[name] = tsst else: raise IOError('variable of name "' + name + '" is not a' "scalar, not a vector, not a symmTensor.") except KeyError as e: 'time "' + gTime + '" and/or name "' + name + '" does not exist as key in the HDF5 parser. Not read, but continuing' print e except KeyboardInterrupt as e: print e return False except MemoryError as e: print e return False except: print "Unexpected error:", sys.exc_info()[0] # raise IOError('time "'+gTime+'" and/or name "'+name+'" does not ' #'exist as key in the HDF5 parser.') return False return True