Seismic I/O: Java library for fast seismic access

The jwitsml.org Log Studio™ research application uses the high quality Seismic I/O library (seismicio.jar) from Petroware AS 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.

Javadoc

Full programming API documentation for the Seismic I/O library is available in the 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 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 the intervention of a user.

The code below indicates the few simple steps involved for doing a raw read of a SEG-Y file:


     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.

Contact

Petroware AS does not currently have the resources to take on licensing of the Seismic I/O library, but it may still be available on request.

For more information, please contact: