mirror of
https://github.com/wassname/segpy.git
synced 2026-06-27 17:17:13 +08:00
Fixed length catalog is an option and a fallback
This commit is contained in:
+19
-5
@@ -13,6 +13,7 @@ from segpy.toolkit import (extract_revision,
|
||||
read_binary_reel_header,
|
||||
read_trace_header,
|
||||
catalog_traces,
|
||||
catalog_fixed_length_traces,
|
||||
read_binary_values,
|
||||
REEL_HEADER_NUM_BYTES,
|
||||
TRACE_HEADER_NUM_BYTES,
|
||||
@@ -21,7 +22,7 @@ from segpy.toolkit import (extract_revision,
|
||||
guess_textual_header_encoding)
|
||||
|
||||
|
||||
def create_reader(fh, encoding=None, trace_header_format=TraceHeaderRev1, endian='>', progress=None, cache_directory=".segpy"):
|
||||
def create_reader(fh, encoding=None, trace_header_format=TraceHeaderRev1, endian='>', progress=None, cache_directory=".segpy", fast=False):
|
||||
"""Create a SegYReader (or one of its subclasses) based on performing
|
||||
a scan of SEG Y data.
|
||||
|
||||
@@ -56,6 +57,9 @@ def create_reader(fh, encoding=None, trace_header_format=TraceHeaderRev1, endian
|
||||
are interpreted as being relative to the directory containing
|
||||
the SEG Y file. Absolute paths are used as is. If
|
||||
cache_directory is None, caching is disabled.
|
||||
|
||||
fast: Boolean flag to try a quick fixed length catalog before inline or
|
||||
CDP catalogs.
|
||||
|
||||
Raises:
|
||||
ValueError: ``fh`` is unsuitable for some reason, such as not
|
||||
@@ -112,7 +116,7 @@ def create_reader(fh, encoding=None, trace_header_format=TraceHeaderRev1, endian
|
||||
reader = _load_reader_from_cache(cache_file_path, seg_y_path)
|
||||
|
||||
if reader is None:
|
||||
reader = _make_reader(fh, encoding, trace_header_format, endian, progress)
|
||||
reader = _make_reader(fh, encoding, trace_header_format, endian, progress, fast=fast)
|
||||
if cache_directory is not None:
|
||||
_save_reader_to_cache(reader, cache_file_path)
|
||||
|
||||
@@ -207,7 +211,7 @@ def _load_reader_from_cache(cache_file_path, seg_y_path):
|
||||
return reader
|
||||
|
||||
|
||||
def _make_reader(fh, encoding, trace_header_format, endian, progress):
|
||||
def _make_reader(fh, encoding, trace_header_format, endian, progress, fast=False):
|
||||
if encoding is None:
|
||||
encoding = guess_textual_header_encoding(fh)
|
||||
if encoding is None:
|
||||
@@ -217,8 +221,18 @@ def _make_reader(fh, encoding, trace_header_format, endian, progress):
|
||||
extended_textual_header = read_extended_textual_headers(fh, binary_reel_header, encoding)
|
||||
revision = extract_revision(binary_reel_header)
|
||||
bps = bytes_per_sample(binary_reel_header, revision)
|
||||
trace_offset_catalog, trace_length_catalog, cdp_catalog, line_catalog = catalog_traces(fh, bps, trace_header_format,
|
||||
endian, progress)
|
||||
if fast:
|
||||
try:
|
||||
trace_offset_catalog, trace_length_catalog, cdp_catalog, line_catalog = catalog_fixed_length_traces(fh, binary_reel_header, trace_header_format,endian, progress)
|
||||
except:
|
||||
trace_offset_catalog, trace_length_catalog, cdp_catalog, line_catalog = catalog_traces(fh, bps, trace_header_format,endian, progress)
|
||||
else:
|
||||
try:
|
||||
trace_offset_catalog, trace_length_catalog, cdp_catalog, line_catalog = catalog_traces(fh, bps, trace_header_format,endian, progress)
|
||||
except:
|
||||
fh.seek(REEL_HEADER_NUM_BYTES)
|
||||
trace_offset_catalog, trace_length_catalog, cdp_catalog, line_catalog = catalog_fixed_length_traces(fh, binary_reel_header, trace_header_format,endian, progress)
|
||||
|
||||
|
||||
if line_catalog is not None:
|
||||
return SegYReader3D(fh, textual_reel_header, binary_reel_header, extended_textual_header, trace_offset_catalog,
|
||||
|
||||
Reference in New Issue
Block a user