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)
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
def __init__(self, filename, mode): self.filename = filename self.mode = mode self._file = BinaryFile(self.filename, self.mode)
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()
def CreateFile(self, data): return self.RegisterFile(BinaryFile.createFile(self.binDirectory, data))
def write(self, outfile): if isinstance(outfile , basestring): outfile = BinaryFile(outfile, 'wb') self._write_header(outfile) self._write_traces(outfile) outfile.close()
def write(self, outfile): if isinstance(outfile, basestring): outfile = BinaryFile(outfile, 'wb') self._write_header(outfile) self._write_traces(outfile) outfile.close()
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()