Metadata

There is metadata associated with each axis/dimension, each value channel and also generic key/value pairs. Although different units of measurement are permitted, there is a strong preference using SI-units. For maximum compatibility with other applications it is best to convert any units used by the application to SI-units when using VDS.

The VDS object annotates each dimension with a name, a unit, starting and ending coordinate. For example, a seismic dataset with a certain number of samples in the time domain will annotate the trace dimension (typically dimension 0) with “Sample”, “ms”, start time, and end time.

Each value channel is annotated with a name, a unit and an estimated value range (e.g. to use a transfer function to show the value as a color).

The VDS system does not deal directly with spatial coordinate systems, it only defines an N-dimensional array of voxels. Spatial coordinates are added through key/value-pair metadata that define the transformation from annotation coordinates to a coordinate reference system. VDS metadata is generally expected to use SI-units when possible, but the spatial coordinates can optionally have another unit specified. Note that the CRS system does not define the units for the other metadata, it is common to have SI-units for the spatial coordinates even when the original CRS system uses feet. It is up to the client application to perform unit conversions where necessary.

Although VDS is a general volumetric format, for applications to properly understand the contents of a VDS dataset, the OpenVDS subcommittee has defined a set of predefined metadata categories, and properties within each category. All OSDU ingestion/delivery tools will be required to adhere to the list of predefined OpenVDS metadata names and types, to ensure compatibility across OSDU implementations/instances/applications.

In the URL encoding scheme described above, the metadata described in this section are part of the VolumeDataLayout JSON object.

Metadata Types

Axis descriptors

Each axis of a volume has a name, unit and annotation start/stop coordinates. The set of recognized axis descriptors given in the name[unit] format. Where multiple options are accepted, the different options are separated by the ‘|’ character. The recognized axis descriptors are:

Descriptor

Unit

Inline

[unitless]

Crossline

[unitless]

CDP

[unitless]

Gather

[unitless]

Trace

[unitless]

Trace (offset)

[m|ft|ussft]

Trace (angle)

[deg|rad]

Trace (azimuth)

[deg|rad]

Sample

[ms|s|m|ft|ussft]

Shot

[unitless]

Receiver

[unitless]

Frequency

[Hz]

Time

[ms|s]

Depth

[m|ft|ussft]

Velocity

[m/s|ft/s|ussft/s]

Easting

[m|ft|ussft]

Northing

[m|ft|ussft]

Key/Value pairs

“Key/Value pairs” are how you typically store single instance values, or simple arrays of data which is true for the whole dataset and all of the channels. Examples include Survey Name, Survey Coordinate Systems, etc. In OpenVDS key/value pairs are also associated with a category which gives a structure to key/value pairs that relate to each other.

These key/value pairs can be of the following types:

Type

Description

Int

An integer type

IntVector2

A 2-component integer vector type

IntVector3

A 3-component integer vector type

IntVector4

A 4-component integer vector type

Float

A floating point type

FloatVector2

A 2-component floating point vector type

FloatVector3

A 3-component floating point vector type

FloatVector4

A 4-component floating point vector type

Double

A double precision floating point type

DoubleVector2

A 2-component double precision vector type

DoubleVector3

A 3-component double precision vector type

DoubleVector4

A 4-component double precision vector type

String

A string type (UTF-8)

BLOB

A base-64 encoded binary large object type

Channel Descriptor

Named channels are useful for storing additional information for individual voxel locations and/or individual trace locations. Examples include Angles and/or Offsets, Trace Header, Trace number, Trace Coordinate, Mute, etc. Each named channel is defined by the name, unit and one of two mapping types:

  1. Volume Data

This means that said named channel has the same dimensionality as the primary channel, so each value in the primary channel has a corresponding value in the named channel. This is useful for things like dip/azimuth for the corresponding seismic voxel.

  1. Per Trace

    This means that said named channel has 1 dimension less than the primary channel, thus a set of values (each entry can be an array) is valid for a whole trace in the primary channel. This is useful for trace headers in SEGY, trace mute, etc.

Recognized Volume Types

The set of axis descriptors defines the volume type. In the following table the axis descriptors are listed as Name[unit] dimension 0/…/Name[unit] dimension N, where dimension 0 is the fastest running indices (i.e. consecutive values in memory). Where multiple options are accepted, the different options are separated by the ‘|’ character. The recognized volume types are:

Volume Type

Axis Descriptors

3D Poststack

Sample|Time|Depth/Crossline/Inline

3D Prestack

Sample|Time|Depth/Trace(offset|angle)|Velocity|Frequency/Crossline/Inline

2D Poststack

Sample|Time|Depth/Trace|CDP

2D Prestack

Sample|Time|Depth/Trace(offset|angle)|Velocity|Frequency/Gather|CDP

Shot/Receiver Gathers

Sample|Time|Depth/Trace(offset|angle)|Velocity|Frequency/Shot|Receiver

Horizon (3D Poststack)

Crossline/Inline, primary data channel is Sample|Time|Depth

Horizon (3D Prestack)

Trace(offset|angle)|Velocity|Frequency/Crossline/Inline, primary data channel is Sample|Time|Depth

When the axis name is Sample, the unit should be ms|s for time data and m|ft for depth data (prefer milliseconds for time data and meters for depth data). For horizons, the primary data channel name should be Sample|Time|Depth (i.e. the axis name of the seismic that the horizon was tracked on) and when the channel name is Sample, the unit should be ms|s for time data and m|ft for depth data (prefer milliseconds for time data and meters for depth data).

Recognized Key/Value Pairs

The following is the recognized key/value categories and properties:

Category - SurveyCoordinateSystem

This category of OpenVDS metadata contains two families that provide information to position a dataset in a coordinate reference system.

In the absence of any of these families, a default setting is considered. In the following, these metadata families are explained.

  1. The Inline/Crossline system

In this system a DoubleVector2 defines the origin, and two more DoubleVector2 define the inline and crossline spacing. These are applied to transform the OpenVDS dimensions with name Inline/Crossline to Easting/Northing coordinates. The Z coordinate is defined by the axis descriptor for the first dimension of the volume.

All coordinates are using SI-units (meters) unless there is a Unit metadata that says otherwise, while the CRSWkt will specify the unit of the CRS. If the CRS unit is different from the unit of the coordinates (which common when the CRS unit is feet) the Origin/InlineSpacing/CrosslineSpacing etc. needs to be converted to the unit of the CRS before a CRS transformation (e.g. transforming to a different CRS or lat/long coordinates) can be applied.

  1. The 3D IJK System

The Inline/Crossline system has flexibility for only two dimensions. In order to have more freedom, the 3DIJK metadata is defined. A DoubleVector3 is used to represent the origin and three step vectors that corresponded to the dimensions named “I”, “J” and “K” respectively.

  1. The Default System

    Other dimension names that are recognized and transformed to XYZ coordinates are X, Y and Z, which will be mapped directly to the corresponding XYZ coordinate.

Keys in the SurveyCoordinateSystem category

Key

Type

Description

CrosslineSpacing

DoubleVector2

The XY spacing between units in the Crossline annotation dimension.

CRSWkt

String

The appropriate OpenGIS Well Known Text description of the coordinate system used.

InlineSegments

BLOB

An array of IntVector3 defining the inline, and crossline start and end for each inline segment.

InlineSpacing

DoubleVector2

The XY spacing between units in the Inline annotation dimension.

IStepVector

DoubleVector3

The step vector corresponded to dimension named ‘I’.

JStepVector

DoubleVector3

The step vector corresponded to dimension named ‘J’.

KStepVector

DoubleVector3

The step vector corresponded to dimension named ‘K’.

LatticeScale

Int

Scaling factor from SEG-Y import used on X/Y coordinates.

Origin

DoubleVector2

The XY position of the origin of the annotation (Inline/Crossline/Time) coordinate system.

Origin3D

DoubleVector3

The XYZ position of the origin of the annotation (I/J/K) coordinate system.

Unit

String

String of the Lattice unit used, typically meter, decimeter, centimeter, kilometer, foot, or mile.

Category - SEGY

The metadata in this category is only meant for round-tripping original SEG-Y data, and not for application parsing. The SEG-Y specific metadata allow for exporting a SEG-Y identical to the original SEG-Y. Note that bitwise identity cannot be achieved with Wavelet compressed files unless the WaveletLossless method is applied — a certain signal-loss corresponding to the compression tolerance is to be expected.

Keys in the SEGY category

Key

Type

Description

BinaryHeader

BLOB

The original SEG-Y binary header (400 bytes).

TextHeader

BLOB

The original SEG-Y textual header (3200 bytes x binary header record count)

PrimaryKey

String

The primary sort key of the original SEG-Y. For crossline-sorted files, the PrimaryKey will be ‘Crossline’ to indicate that this was the original order of the file even if the VDS has been normalized to a Time/Crossline/Inline volume.

Category – TraceCoordinates

A seismic line may populate the PositionProperty, VerticalOffsetProperty, EnergySourcePointNumberProperty and EnsembleNumberProperty from metadata BLOBs found in the “TraceCoordinates” category.

The PositionProperty and VerticalOffsetProperty define the position of a seismic line.

Keys in the TraceCoordinates category

Key

Type

Description

TracePositions

BLOB

An array of DoubleVector2 defining the position for each trace, where (0, 0) is treated as an undefined position.

TraceVerticalOffsets

BLOB

An array of doubles defining the offset for each trace from the vertical start position in the Time/Depth/Sample dimension of the OpenVDS.

EnergySourcePointNumbers

BLOB

An array of scalar int32 values defining the energy source point number for each trace.

EnsembleNumbers

BLOB

An array of scalar int32 values defining the ensemble number for each trace.

If the axis descriptor is Trace or Gather, the trace/gather number from the axis coordinates (minus one to make it zero-based) is used as the index into these BLOBs. If the axis descriptor name is CDP, the sample index should be used and there will be no EnsembleNumbers BLOB as the ensemble number (CDP) is defined by the axis coordinates.

Category - ImportInformation

This category of VDS metadata contains information about the initial import to VDS. That is, information about the original file (file name, last modification time etc.) and when/how it was imported. The intended use is e.g., to give a default file name for an export operation or to inform the user about whether the VDS was imported from some particular file.

Keys in the ImportInformation category

Key

Type

Description

DisplayName

String

An informative name (e.g. the survey name) that can be displayed to a user but is not necessarily a valid file name.

InputFileName

String

The original input file name. In cases where the input is not a simple file this should still be a valid file name that can be used as the default for a subsequent export operation.

InputFileSize

Double

The total size (in bytes) of the input file(s), which is an integer stored as a double because there is no 64-bit integer metadata type.

InputTimeStamp

String

The last modified time of the input in ISO8601 format.

ImportTimeStamp

String

The time in ISO8601 format when the data was imported to VDS.

Named Channels

The following are known volume data channels:

Name

Description

Amplitude

Amplitude values are stored as float values.

Semblance

Semblance values are stored as float values.

Frequency

Frequency values are stored as float values.

Vrms/Vint/Vavg

Velocity values are stored as float values.

Intercept/Gradient

Intercept/Gradient values are stored as float values.

The following are known Per Trace channels:

Name

Description

Mute

Mute values are stored as 2-component 16-bits values, representing mute start time and end time.

Offset

Offset values are stored as float values

Trace

Trace is a bool-mask if trace was present or not during conversion

Azimuth

Azimuth values are stored as float values

Angle

Angle values are stored as float values

SEGYTraceHeader

SEG-Y Trace headers are stored as 240x byte values