High level SEG Y writer. Work in progress

This commit is contained in:
Robert Smallshire
2015-01-28 21:50:04 +01:00
parent 255a490914
commit ccbedfa150
+56
View File
@@ -0,0 +1,56 @@
from segpy.encoding import ASCII, is_supported_encoding, UnsupportedEncodingError
from segpy.toolkit import (write_textual_reel_header, write_binary_reel_header, compile_trace_header_format,
write_trace_header, write_trace_samples, format_extended_textual_header,
write_extended_textual_headers)
def write_segy(fh,
seg_y_data,
encoding=None,
endian='>',
progress=None):
"""
Args:
fh: A file-like object open for binary write.
seg_y_data: An object from which the headers and trace_samples data can be retrieved. Requires the following
properties and methods:
seg_y_data.textual_reel_header
seg_y_data.binary_reel_header
seg_y_data.extended_textual_header
seg_y_data.trace_indexes
seg_y_data.trace_header(trace_index)
seg_y_data.trace_samples(trace_index)
seg_y_data.encoding
seg_y_data.endian
One such legitimate object would be a SegYReader instance.
encoding: Optional encoding for text data. Typically 'cp037' for EBCDIC or 'ascii' for ASCII. If ommited, the
seg_y_data object will be queries for an encoding property.
endian: Big endian by default. If omitted, the seg_y_data object will be queried for an encoding property.
progress: An optional progress bar object.
"""
encoding = encoding or (hasattr(seg_y_data, 'encoding') and seg_y_data.encoding) or ASCII
if not is_supported_encoding(encoding):
raise UnsupportedEncodingError("Writing SEG Y", encoding)
extended_header_pages = format_extended_textual_header(seg_y_data.extended_textual_header, encoding, include_text_stop=True)
write_textual_reel_header(fh, seg_y_data.textual_reel_header, encoding)
write_binary_reel_header(fh, seg_y_data.binary_reel_header, endian)
write_extended_textual_headers(fh, extended_header_pages, encoding)
trace_header_format = compile_trace_header_format(endian)
for trace_index in seg_y_data.trace_indexes:
write_trace_header(fh, seg_y_data.trace_header(trace_index), trace_header_format)
write_trace_samples(fh, seg_y_data.trace_samples(trace_index), seg_y_data.data_sample_format)