예제 #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)
예제 #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)
예제 #3
0
파일: storages.py 프로젝트: cgorbit/rem
    def CreateFileLocal(self, path, checksum):
        tmpfile = None
        try:
            if not os.path.isfile(path) or not os.access(path, os.R_OK):
                return False

            fd, tmpfile = tempfile.mkstemp(dir=self.binDirectory)
            os.close(fd)
            shutil.copy2(path, tmpfile)

            fileChecksum = BinaryFile.calcFileChecksum(tmpfile)
            if fileChecksum != checksum:
                return False

            remPath = os.path.join(self.binDirectory, checksum)
            os.rename(tmpfile, remPath)
            tmpfile = None
            self.RegisterFile(BinaryFile(remPath, checksum, True))
        finally:
            if tmpfile is not None:
                os.unlink(tmpfile)
        return True
예제 #4
0
 def __init__(self, filename, mode):
     self.filename = filename
     self.mode = mode
     self._file = BinaryFile(self.filename, self.mode)
예제 #5
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()
예제 #6
0
파일: storages.py 프로젝트: cgorbit/rem
 def CreateFile(self, data):
     return self.RegisterFile(BinaryFile.createFile(self.binDirectory, data))
예제 #7
0
 def write(self, outfile):
     if isinstance(outfile , basestring):
         outfile = BinaryFile(outfile, 'wb')
     self._write_header(outfile)
     self._write_traces(outfile)
     outfile.close()
예제 #8
0
 def write(self, outfile):
     if isinstance(outfile, basestring):
         outfile = BinaryFile(outfile, 'wb')
     self._write_header(outfile)
     self._write_traces(outfile)
     outfile.close()
예제 #9
0
 def __init__(self, filename, mode):
     self.filename = filename
     self.mode = mode
     self._file = BinaryFile(self.filename, self.mode)
예제 #10
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()