Access the full documentation for SEGY-SAK from readthedocs
SEGY-SAK aims to be your Python Swiss Army Knife for Seismic Data.
To do this SEGY-SAK offers two things; a commandline interface (CLI) for inspecting and converting SEGY data to a more friendly format called NETCDF4, and by providing convienience functions for the data using xarray. We try hard to load the data the same way everytime so your functions will work no-matter which cube/line you load. The xarray conventions we use are outlined in the documentation.
Why NETCDF4? Well, NETCDF4 is a fancy type of enclosed file binary format that
allows for faster indexing and data retreival than SEGY. We try our best to
scan in the header information and to make it easy (or easier) to load SEGY
in different formats, different configuration (2D, 2D gathers, 3D, 3D gathers).
We do all this with the help of segyio
which is a lower level interface to SEGY. If you stick to our xarray
format
of files we also offer utility functions to return to SEGY so you can export to
other software.
- CLI:
- Convert 2D, 3D and gathers type SEGY to NETCDF4 and back. The NETCDF4 files
are one line open with
xarray.open_dataset
. - Extract sub-volumes via cropping xline and inline.
- Read EBCIDC header.
- Perform a limited header scan.
- Convert 2D, 3D and gathers type SEGY to NETCDF4 and back. The NETCDF4 files
are one line open with
- Xarray and Python API:
- Load 2D, 3D and gathers type SEGY to a
xarray.Dataset
. - Access header information and text headers in Python with conveience functions.
- Select traces by UTM X and Y coordinates.
- Load 2D, 3D and gathers type SEGY to a
SEGY-SAK can be installed by using pip or python setuptools.
From the command line run the pip
package manager
pip install segysak
Clone the SEGY-SAK Github repository and in the top level directory run setuptools via
python setup.py install
The command line interface (CLI) provides an easy tool to convert or manipulate SEG-Y data. In your Python command-line environment it can be accessed by calling segysak.
For a full list of options run
segysak --help
Any SEG-Y files converted using the convert
command. For example
segysak convert test.segy
Can be loaded into Python using xarray
.
test = xarray.open_dataset('test.SEISNC')
The xarray
seismic specification termed seisnc
can be used by segysak to
output NETCDF4 files is more performant for Python operations than standard SEG-Y.
Unlike SEG-Y, xarray
compatable files fit neatly into the Python scientific
stack providing operations like lazy loading, easy slicing, compatability with
multi-core and multi-node operations using dask
as well as important features
such as labelled axes and coordinates.
This specification is not meant to be prescriptive but outlines some basic
requirements for xarray
datasets to work with SEGYSAK functionality.
SEGY-SAK uses the convention .seisnc
for the suffix on NETCDF4 files it
creates. These files are datasets with specific 1D and 2D coordiates and have a
single variable called data
.
The data
variable contains the seismic cube volume or 2D line traces.
Attributes can be used to provide further metadata about the cube.
SEGY-SAK uses the convention labels of iline
, xline
and offset
to
describe
the bins of 3D data. Vertical dimensions are twt
and depth
. A typical
xarray
dataset created by SEGY-SAK will return for example
>>> seisnc_3d = segysak.segy_loader('test3d.sgy', iline=189, xline=193)
>>> seisnc_3d.dims
Frozen(SortedKeysDict({'iline': 61, 'xline': 202, 'twt': 850}))
For 2D data SEGY-SAK uses the dimensino labels cdp
and offset
. This allows
the package to distinguish between 2D and 3D data to allow automation on saving
and convience wrappers. The same vertical dimensions apply as for 3D.
A typical xarray
in 2D format would return
>>> seisnc_2d = segysak.segy_loader('test2d.sgy', cdp=21)
>>> seisnc_2d.dims
Frozen(SortedKeysDict({'cdp': 61, 'twt': 850}))
If the cdpx
and cdpy
byte locations are specified during loading the
SEGY the coordinates will be populated from the headers with the variable names
cdp_x
and cdp_y
. These will have dimensions equivalent to the horizontal
dimensions of the data (iline
, xline
for 3D and cdp
for 2D).
Any number of attributes can be added to a siesnc
file. Currently the
following attributes are extracted or reserved for use by SEGY-SAK
.
ns
number of samples per traceds
sample intervaltext
ebcidc header as ascii textd3_units
vertical units of the datad3_domain
vertical domain of the dataepsg
data epsg codecorner_points
corner points of the dataset in grid coordinatescorner_points_xy
corner points of the dataset in xysource_file
name of the file the dataset was created fromsrd
seismic reference datum of the data in vertical unitsd3_units
andd3_domain
datatype
the data type e.g. amplitude, velocity, attribute
The complete documentation for SEGY-SAK can be found at readthedocs