Seismic I/O: Library for fast seismic access

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 utilize high capacity memory mapped 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

      Seismic I/O for .Net: Doxygen (on request)


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<SegyTraceHeader> 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: