The SEG-Y file format has become a widely used industry standard for working with and sharing seismic data. Since the format's first publication in 1975, a lot has changed in the way we record, store, and process seismic data. Many proprietary extensions or modifications have been designed to work around the limitations of the file format, but such alternatives often make shared data sets difficult or impossible to interpret without additional development.
In 2002, SEG-Y revision 1 was released adding support for IEEE floating point data, ASCII text, and a system for extending the format in text headers. The latest update, revision 2, released in 2017 takes more significant steps towards modernizing the format and eliminating the problem of custom work-arounds.
File Format Overview
The following diagram shows an overview of the updated SEG-Y file format.
SEG-Y files start with an optional 128 byte SEG-Y tape label. The first piece of mandatory data is the 3200 byte text header that typically contains company and survey information in a human-readable format. The text header is followed by the 400 byte binary header which defines the size and type of data contained in the file.
Next, the SEG-Y file may contain a number of optional extended text headers. These headers were introduced in revision 1, and expanded on in revision 2. Extended text headers allow users to define how the file should be interpreted using official extensions. Developers can also design and publish their own extensions to the format without altering the contents of any parts of the file defined by the standard.
The bulk of the SEG-Y file is taken up by 1 or more traces. Each trace must include a 240 byte trace header, followed by an optional number of extended trace headers. Extended trace headers were introduced in revision 2 to provide space for new official and user-defined header parameters.
Finally, revision 2 allows for extra user-defined data to be placed at the end of the SEG-Y. This data must be preceded by headers and divided into 3200 byte blocks, but does prevent older code from accurately reading the file.
Revision 2 introduces many new features to the format. The following is an overview of how to use some the most significant changes that will make the SEG-Y format more precise and easier to work with.
File Version and Backwards Compatibility
A SEG-Y file's version is identified in 2 places: line 39 of the text header, and bytes 3501-3502 of the binary header. For a SEG-Y revision 2 file, line 39 of the text header should read “SEG-Y REV2.0”. Bytes 3501 and 3502 of the binary header are the major and minor revision numbers. For a SEG-Y revision 2 file they would be 0216 and 0016 respectively.
The latest version of the SEG-Y file format is mostly backwards compatible with prior versions. A program written using the new standard will be able to read old SEG-Y files, and a program written using the old standard will be able to read new SEG-Y files that do not use any of the new extended data blocks. Extended text headers were introduced in revision 1, so they are not compatible with programs built to read revision 0. Similarly, extended trace headers were introduced in revision 2, so they are not compatible with older programs.
In general, any parameters in a SEG-Y file with a value of 0 are considered to be not set. New features can therefore be ignored by setting their values to 0. Additionally, the update to the standard did not move or remove any parameters: new parameters were added in unassigned or reserved space so old SEG-Y files should have all new fields set to 0.
Trace Header Extensions
A common challenge in reading SEG-Y files is in interpreting the values of trace headers. Due to limitations in the original format, many users implement custom solutions that use fields for data outside of the specification. SEG-Y revision 2 solves this problem by adding extended trace headers that provide space for additional official and custom header parameters.
Extended trace headers are a series of 240 byte blocks. The maximum number of additional trace headers in a file is specified in binary file header bytes 3507-3510. The actual number of extended trace headers may vary from one trace to the next, unless the file has fixed length traces. While the standard allows for variable length traces, fixed length traces are common to allow fast seeking. As of revision 1, a SEG-Y file can guarantee it has fixed length traces by setting field 3503-3504 in the binary header to 1. For variable length traces, the actual number of extended headers is indicated in bytes 157-158 of the first extended header.
The final 8 bytes of all trace headers are now used to indicate the header's name. The standard trace header should be named “SEG00000”. If extended trace headers are used, the first one must be the new standard header named “SEG00001”. Further headers are fully customizable with the final 8 bytes reserved for a unique name. All header names of the format “SEG#####” are reserved for future revisions.
Revision 2 provides a number of changes that make SEG-Y able to handle much larger data sets. Files can contain more traces and traces can contain more samples. Files can now contain up to 264-1 traces and 232-1 traces per ensemble. This is accomplished by including several 64-bit unsigned integer fields in the extended trace header that override smaller data fields in the standard header. Bytes 1-8 of the extended header override the trace sequence number in a line (bytes 1-4 of the standard header) and bytes 9-16 override the trace sequence number in a file (bytes 5-8). Similarly, bytes 3261-3264 of the binary header override the number of traces per ensemble (bytes 3213-3214).
Traces now also support more samples and new data formats. Bytes 3269-3272 of the binary file header override the number of samples per trace (bytes 3221-3222) allowing for up to 232-1 samples per trace. The trace data format is specified by setting bytes 3225-3226 of the binary file header to a particular code. Most notably, 4-byte IEEE floating point numbers were added in revision 1 and 8-byte IEEE floating point numbers were add in revision 2 (codes 5 and 6 respectively).
This revision also provides a number of changes to make SEG-Y faster and easier to use on modern computers. SEG-Y files can now be written in little-endian format for faster I/O performance. Bytes 3297-3300 can be used to detect the correct byte order. A value of 1690906010 (0102030416) would indicate all bytes are in the correct order, while 6730598510 (0403020116) would indicate the bytes must be reversed.
The new revision also provides a better way to specify many standard parameters with improved precision. Sampling interval can be specified as 64-bit IEEE floating point number in bytes 3273-3280 of the binary file header (this overrides bytes 3217-3218). Source and receiver coordinates, depths, and elevations can also be set as doubles as well using the first extended trace header:
These parameters eliminate the need for the various scaling factors that are present in the standard trace header.
Finally, the standard trace header in bytes 29-30 is an identification code for the type of data contained in the trace. Many new types of data have been added, including velocity, electro-magnetic, and rotational sensor data.
Trace Header Mapping
A common challenge with using the SEG-Y format has been interpreting trace header data. Due to limitations in the original format, various custom solutions have arisen that can make sharing files difficult. While the new standard extended trace headers should alleviate most of problems, trace header mapping should eliminate the problem completely.
The extended text header is a series of 3200 byte records. The number of records is provided in bytes 3505-3506 of the binary file header. These headers provide extra space for any data the user wishes to include in the file. Extended text headers are organized into sets of data, each set is referred to as a “stanza”. A stanza can include data in any format the user wishes, however a number of standard stanzas have been published with the SEG-Y specification. Stanzas must start on a 3200 byte boundary and are started with a stanza header. The header includes the name of the stanza as well as the company that published it. For example, a trace header mapping would begin with “((SEG: Trace Header Mapping ver 1.0))”.
Revision 2 provides a specification for a text header stanza that overrides standard trace header locations. Custom extensions to the SEG-Y file format can now be codified within the file itself for easier processing. User defined parameters can be mapped, and standard parameters can be remapped to new locations or data formats.
Trace header mappings are specified in the extended text header field.
The following is an excerpt of the example trace header mapping provided in the SEG-Y revision 2 standard:
((SEG: Trace Header Mapping ver 1.0))
Header name = SEG00000
Field name 1 = tracl
Byte position 1 = 1
Value format code 1 = 2
Field description 1 = Trace sequence number within line
Field name 2 = tracr
Byte position 2 = 5
Value format code 2 = 2
Field description 2 = Trace sequence number within SEG-Y file
Field name 3 = fldr
Byte position 3 = 9
Value format code 3 = 2
Field description 3 = Original field record number
As seen in the example, a field is mapped by specifying its name, position, format, and description. Using standard names for fields allows developers to document their proprietary modifications to the SEG-Y format in a way that can still be read by anyone that the data is shared with.
If extra data needs to be saved with each trace, new fields can also be mapped to custom headers. The “Header name” line indicates which trace header block is currently being mapped. The example above maps its fields to the standard trace header “SEG00000”.
SEG-Y revision 2 represents a significant step forward in modernizing the file format. By using the new extended trace headers for more precision, and trace header mappings to document any modifications or extra headers, the SEG-Y format will be much easier to use for processing and sharing seismic data.
 Hagelund, Rune, and Stewart A. Levin, editors. “SEG-Y_r2.0: SEG-Y Revision 2.0 Data Exchange Format.” Mar. 2017, seg.org/Portals/0/SEG/News%20and%20Resources/Technical%20Standards/seg_y_rev2_0-mar2017.pdf.