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