Seismic I/O - Seismic access library
The Log Studio™ research platform uses the high quality Seismic I/O library for accessing data from common seismic formats such as SEG-Y. Seismic I/O is useful for inspecting and performing QC of seismic files. Seismic I/O utilize high capacity non-blocking I/O from Java 8 in order to get maximum performance for very large (GB) files.
Seismic I/O is available for Java (SeismicIo.jar).
The library is lightweight (< 100kB) and self-contained; It has no external dependencies.
API Documentation
Seismic I/O for Java: Javadoc |
SEG-Y
The SEG-Y format was developed by the Society of Exploration Geophysicists in 1973 (rev 0). It was further fomalised with SEG-Y rev 1 in 2002. An upcomming SEG-Y rev 2 is in the making. Log I/O is based on the SEG-Y rev 2 draft, but is backwards compatible with all previous versions.
The SEG-Y file format is quite simple. It contains an optional tape label, a 3200-byte textual header, a 400-byte binary file header, an optional set of additional 3200-byte textual headers, and then the seismic traces in sequence. Each trace contains a 240-byte binary trace header followed by the trace data. The textual header is defined to be encoded as EBCDIC, but is often plain ASCII. The trace data are 1, 2 or 4 byte integers or floating point data encoded as IBM System/360 or IEEE 754. The format dictates that binary values should be big-endian, but little-endian representations are commonplace. SEG-Y files may contain both 2D and 3D data.
The Log I/O SEG-Y accessor is a low level raw format reader and handles all the issues mentioned above.
Although SEG-Y is simple and well defined, it may still be tricky to work with. This is due to myriads of dialects and interpretations and usage of the header meta data. The Log Studio™ application has put a layer of intelligence on top of the Seismic I/O library in order to handle all possible SEG-Y inputs without any user intervention.
The code below indicates the few simple steps involved for doing a raw read of a SEG-Y file using the Seismic I/O library:
import no.petroware.logio.segy.*;
:
File file = ...;
// Instantiate a reader
SegyFileReader reader = new SegyFileReader(file);
// Read the SEG-Y file with all its content
boolean shouldReadTraceData = true;
SegyFile segyFile = reader.readFile(shouldReadTraceData);
// Accessing the file header
SegyFileHeader fileHeader = segyFile.getFileHeader();
:
// Accessing the textual file header(s)
List<SegyTextHeader> textHeaders = segyFile.getTextHeaders();
:
// Loop over all traces
for (SegyTrace segyTrace : segyFile.getTraces()) {
// Access the trace header
List traceHeader = segyTrace.getHeader();
:
// The trace values are accessed by trace.getValue(index) :
:
}
The images below indicates how some of the Seismic I/O information is used in
the Log Studio™ application: