mirror of
https://github.com/wassname/segpy.git
synced 2026-06-27 18:44:26 +08:00
High level SEG Y writer. Work in progress
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user