def read_reel_header(f, filename, endian='>'): """ reel_header = read_reel_header(filename) """ #data = open(filename, 'rb').read() reel_header = {'filename': filename} for key in SH_def.keys(): pos = SH_def[key]["pos"] format = SH_def[key]["type"] reel_header[key], index = read_binary_value(f, pos, format, endian) logger.debug(str(pos) + " " + str(format) + " Reading " + key + "=" + str(reel_header[key])) # SET NUMBER OF BYTES PER DATA SAMPLE bps = getBytePerSample(reel_header) file_size = file_length(f) ntraces = (file_size - REEL_HEADER_NUM_BYTES) / (reel_header['ns'] * bps + TRACE_HEADER_NUM_BYTES) reel_header["ntraces"] = ntraces logger.debug('read_reel_header : successfully read ' + filename) return reel_header
def read_reel_header(f, filename, endian='>'): """ reel_header = read_reel_header(filename) """ #data = open(filename, 'rb').read() reel_header = {'filename': filename} for key in SH_def.keys(): pos = SH_def[key]["pos"] format = SH_def[key]["type"] reel_header[key], index = read_binary_value(f, pos, format, endian) logger.debug( str(pos) + " " + str(format) + " Reading " + key + "=" + str(reel_header[key])) # SET NUMBER OF BYTES PER DATA SAMPLE bps = getBytePerSample(reel_header) file_size = file_length(f) ntraces = (file_size - REEL_HEADER_NUM_BYTES) / (reel_header['ns'] * bps + TRACE_HEADER_NUM_BYTES) reel_header["ntraces"] = ntraces logger.debug('read_reel_header : successfully read ' + filename) return reel_header
def getDefaultSegyHeader(ntraces=100, ns=100): """ SH = getDefaultSegyHeader() """ # TraceSequenceLine SH = {"Job": {"pos": 3200, "type": "int32", "def": 0}} for key in SH_def.keys(): tmpkey = SH_def[key] if tmpkey.has_key("def"): val = tmpkey["def"] else: val = 0 SH[key] = val SH["ntraces"] = ntraces SH["ns"] = ns return SH
def getDefaultSegyHeader(ntraces=100, ns=100): """ SH = getDefaultSegyHeader() """ # TraceSequenceLine SH = {"Job": {"pos": 3200, "type": "int32", "def": 0}} for key in SH_def.keys(): tmpkey = SH_def[key] if tmpkey.has_key('def'): val = tmpkey['def'] else: val = 0 SH[key] = val SH["ntraces"] = ntraces SH["ns"] = ns return SH
def writeSegyStructure(filename, Data, SH, STH, endian='>'): # modified by A Squelch """ writeSegyStructure(filename, Data, SegyHeader, SegyTraceHeaders) Write SEGY file using SegyPy data structures See also readSegy (c) 2005, Thomas Mejer Hansen """ logger.debug("writeSegyStructure : Trying to write " + filename) f = open(filename, 'wb') # VERBOSE INF revision = SH["SegyFormatRevisionNumber"] dsf = SH["DataSampleFormat"] try: # block added by A Squelch DataDescr = SH_def["DataSampleFormat"]["descr"][revision][dsf] except KeyError: logging.critical(" An error has ocurred interpreting a SEGY binary header key") logging.critical(" Please check the Endian setting for this file: {0}".format(SH["filename"])) sys.exit() logger.debug("writeSegyStructure : SEG-Y revision = " + str(revision)) logger.debug("writeSegyStructure : DataSampleFormat = " + str(dsf) + "(" + DataDescr + ")") # WRITE SEGY HEADER for key in SH_def.keys(): pos = SH_def[key]["pos"] format = SH_def[key]["type"] value = SH[key] putValue(value, f, pos, format, endian) # SEGY TRACES ctype = SH_def['DataSampleFormat']['datatype'][revision][dsf] bps = SH_def['DataSampleFormat']['bps'][revision][dsf] sizeT = TRACE_HEADER_NUM_BYTES + SH['ns'] * bps for itrace in range(SH['ntraces']): index = REEL_HEADER_NUM_BYTES + itrace * sizeT logger.debug('Writing Trace #' + str(itrace + 1) + '/' + str(SH['ntraces'])) # WRITE SEGY TRACE HEADER for key in STH_def.keys(): pos = index + STH_def[key]["pos"] format = STH_def[key]["type"] value = STH[key][itrace] logger.debug(str(pos) + " " + str(format) + " Writing " + key + "=" + str(value)) putValue(value, f, pos, format, endian) # Write Data cformat = endian + ctype for s in range(SH['ns']): strVal = struct.pack(cformat, Data[s, itrace]) f.seek(index + TRACE_HEADER_NUM_BYTES + s * struct.calcsize(cformat)) f.write(strVal) f.close()
def writeSegyStructure(filename, Data, SH, STH, endian='>'): # modified by A Squelch """ writeSegyStructure(filename, Data, SegyHeader, SegyTraceHeaders) Write SEGY file using SegyPy data structures See also readSegy (c) 2005, Thomas Mejer Hansen """ logger.debug("writeSegyStructure : Trying to write " + filename) f = open(filename, 'wb') # VERBOSE INF revision = SH["SegyFormatRevisionNumber"] dsf = SH["DataSampleFormat"] try: # block added by A Squelch DataDescr = SH_def["DataSampleFormat"]["descr"][revision][dsf] except KeyError: logging.critical( " An error has ocurred interpreting a SEGY binary header key") logging.critical( " Please check the Endian setting for this file: {0}".format( SH["filename"])) sys.exit() logger.debug("writeSegyStructure : SEG-Y revision = " + str(revision)) logger.debug("writeSegyStructure : DataSampleFormat = " + str(dsf) + "(" + DataDescr + ")") # WRITE SEGY HEADER for key in SH_def.keys(): pos = SH_def[key]["pos"] format = SH_def[key]["type"] value = SH[key] putValue(value, f, pos, format, endian) # SEGY TRACES ctype = SH_def['DataSampleFormat']['datatype'][revision][dsf] bps = SH_def['DataSampleFormat']['bps'][revision][dsf] sizeT = TRACE_HEADER_NUM_BYTES + SH['ns'] * bps for itrace in range(SH['ntraces']): index = REEL_HEADER_NUM_BYTES + itrace * sizeT logger.debug('Writing Trace #' + str(itrace + 1) + '/' + str(SH['ntraces'])) # WRITE SEGY TRACE HEADER for key in STH_def.keys(): pos = index + STH_def[key]["pos"] format = STH_def[key]["type"] value = STH[key][itrace] logger.debug( str(pos) + " " + str(format) + " Writing " + key + "=" + str(value)) putValue(value, f, pos, format, endian) # Write Data cformat = endian + ctype for s in range(SH['ns']): strVal = struct.pack(cformat, Data[s, itrace]) f.seek(index + TRACE_HEADER_NUM_BYTES + s * struct.calcsize(cformat)) f.write(strVal) f.close()