Ejemplo n.º 1
0
 def __init__(self, arg, x=None, y=None, tracenumbers=None, copyFrom=None):
     """
     Input:
         filename: The name of the 2D data file
     """
     if isinstance(arg, basestring):
         filename = arg
         infile = BinaryFile(filename, 'rb')
         self._read_header(infile)
         self._read_traces(infile)
         infile.close()
     else:
         if x is None or y is None:
             raise ValueError('When creating a new data2d object, '\
                     'x and y must both be specified.')
         self._new_file(arg, x, y, tracenumbers, copyFrom)
Ejemplo n.º 2
0
 def __init__(self, arg, x=None, y=None, tracenumbers=None, copyFrom=None):
     """
     Input:
         filename: The name of the 2D data file
     """
     if isinstance(arg, basestring):
         filename = arg
         infile = BinaryFile(filename, 'rb')
         self._read_header(infile)
         self._read_traces(infile)
         infile.close()
     else:
         if x is None or y is None:
             raise ValueError('When creating a new data2d object, '\
                     'x and y must both be specified.')
         self._new_file(arg, x, y, tracenumbers, copyFrom)
Ejemplo n.º 3
0
class GeoprobeVolumeFileV2(object):
    """Low-level operations for reading and writing to Geoprobe Volume format
    version 2.0 seismic data files."""
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self._file = BinaryFile(self.filename, self.mode)

    def is_valid(self):
        """Returns a boolean indicating whether this is a valid file."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        volSize = os.stat(self.filename).st_size
        predSize = nx*ny*nz + _headerLength

        if (header['magicNum'] != 43970) or (volSize != predSize): 
            return False
        else: 
            return True


    def read_header(self):
        """Reads and returns the header of a geoprobe volume."""
        header = dict()
        for varname, info in _headerDef.iteritems():
            self._file.seek(info['offset'])
            value = self._file.readBinary(info['type'])
            header[varname] = value
        return header

    def read_data(self):
        """Reads an entire Geoprobe volume into memory and returns 
        a numpy array contining the volume."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        dat = np.fromfile(self.filename, dtype=np.uint8)
        dat = dat[_headerLength:]
        dat = dat.reshape((nz, ny, nx)).T
        return dat

    def memmap_data(self):
        """Return an object similar to a memory-mapped numpy array."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        dat = np.memmap(filename=self.filename, mode='r',
            offset=_headerLength, order='F', 
            shape=(nx, ny, nz) 
            )
        return dat

    def write_header(self, header):
        """Write the values in the dict "header" to the file."""
        for varname, info in _headerDef.iteritems():
            value = header.get(varname, info['default'])
            self._file.seek(info['offset'])
            self._file.writeBinary(info['type'], value)

    def write_data(self, data):
        """Writes a geoprobe volume to disk."""
        self._file.seek(_headerLength)
        # Write to file in Fortran order...
        #  Not using data.ravel('F'), as it appears to make a copy if the
        #  array is C-ordered (doubling memory usage). Instead, we just
        #  write the transpose with the tofile method. (tofile writes in
        #  C-order regardless of the order of the input array, thus
        #  requring the transpose for both F and C ordered arrays)
        data.T.tofile(self._file)

    def close(self):
        return self._file.close()
Ejemplo n.º 4
0
 def write(self, outfile):
     if isinstance(outfile , basestring):
         outfile = BinaryFile(outfile, 'wb')
     self._write_header(outfile)
     self._write_traces(outfile)
     outfile.close()
Ejemplo n.º 5
0
 def write(self, outfile):
     if isinstance(outfile, basestring):
         outfile = BinaryFile(outfile, 'wb')
     self._write_header(outfile)
     self._write_traces(outfile)
     outfile.close()
Ejemplo n.º 6
0
class GeoprobeVolumeFileV2(object):
    """Low-level operations for reading and writing to Geoprobe Volume format
    version 2.0 seismic data files."""
    _magic_number = 43970
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self._file = BinaryFile(self.filename, self.mode)

    def is_valid(self):
        """Returns a boolean indicating whether this is a valid file."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        volSize = os.stat(self.filename).st_size
        predSize = nx*ny*nz + _headerLength

        if (header['magicNum'] != self._magic_number) or (volSize != predSize):
            return False
        else:
            return True


    def read_header(self):
        """Reads and returns the header of a geoprobe volume."""
        header = dict()
        for varname, info in _headerDef.iteritems():
            self._file.seek(info['offset'])
            value = self._file.readBinary(info['type'])
            header[varname] = value
        return header

    def read_data(self):
        """Reads an entire Geoprobe volume into memory and returns
        a numpy array contining the volume."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        dat = np.fromfile(self.filename, dtype=np.uint8)
        dat = dat[_headerLength:]
        dat = dat.reshape((nz, ny, nx)).T
        return dat

    def memmap_data(self):
        """Return an object similar to a memory-mapped numpy array."""
        header = self.read_header()
        nx, ny, nz = [header[item] for item in ('_nx', '_ny', '_nz')]
        dat = np.memmap(filename=self.filename, mode='r',
            offset=_headerLength, order='F',
            shape=(nx, ny, nz)
            )
        return dat

    def write_header(self, header):
        """Write the values in the dict "header" to the file."""
        for varname, info in _headerDef.iteritems():
            value = header.get(varname, info['default'])
            self._file.seek(info['offset'])
            self._file.writeBinary(info['type'], value)

    def write_data(self, data):
        """Writes a geoprobe volume to disk."""
        self._file.seek(_headerLength)
        # Write to file in Fortran order...
        #  Not using data.ravel('F'), as it appears to make a copy if the
        #  array is C-ordered (doubling memory usage). Instead, we just
        #  write the transpose with the tofile method. (tofile writes in
        #  C-order regardless of the order of the input array, thus
        #  requring the transpose for both F and C ordered arrays)
        data.T.tofile(self._file)

    def close(self):
        return self._file.close()