Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/mdio/builder/template_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@
from mdio.builder.templates.seismic_2d_streamer_shot import Seismic2DStreamerShotGathersTemplate
from mdio.builder.templates.seismic_3d_cdp import Seismic3DCdpGathersTemplate
from mdio.builder.templates.seismic_3d_coca import Seismic3DCocaGathersTemplate
from mdio.builder.templates.seismic_3d_obn import Seismic3DObnReceiverGathersTemplate
from mdio.builder.templates.seismic_3d_obn_single_component import Seismic3DObnSingleComponentGathersTemplate
from mdio.builder.templates.seismic_3d_poststack import Seismic3DPostStackTemplate
from mdio.builder.templates.seismic_3d_shot_receiver_line import Seismic3DShotReceiverLineGathersTemplate
from mdio.builder.templates.seismic_3d_streamer_field import Seismic3DStreamerFieldRecordsTemplate
from mdio.builder.templates.seismic_3d_streamer_shot import Seismic3DStreamerShotGathersTemplate

Expand Down Expand Up @@ -138,6 +141,13 @@ def _register_default_templates(self) -> None:
self.register(Seismic3DStreamerShotGathersTemplate())
self.register(Seismic3DStreamerFieldRecordsTemplate())

# OBN (Ocean Bottom Node) data
self.register(Seismic3DObnReceiverGathersTemplate())
self.register(Seismic3DObnSingleComponentGathersTemplate())

# Land/OBC shot-receiver data
self.register(Seismic3DShotReceiverLineGathersTemplate())

def get(self, template_name: str) -> AbstractDatasetTemplate:
"""Get an instance of a template from the registry by its name.
Expand Down
98 changes: 98 additions & 0 deletions src/mdio/builder/templates/seismic_3d_obn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
"""Seismic3DObnReceiverGathersTemplate MDIO v1 dataset templates."""

from typing import Any

from mdio.builder.schemas.dtype import ScalarType
from mdio.builder.schemas.v1.variable import CoordinateMetadata
from mdio.builder.templates.base import AbstractDatasetTemplate
from mdio.builder.templates.types import SeismicDataDomain


class Seismic3DObnReceiverGathersTemplate(AbstractDatasetTemplate):
"""Seismic 3D OBN (Ocean Bottom Node) receiver gathers template."""

def __init__(self, data_domain: SeismicDataDomain = "time"):
super().__init__(data_domain=data_domain)

self._spatial_dim_names = ("component", "receiver", "shot_line", "gun", "shot_point")
self._dim_names = (*self._spatial_dim_names, self._data_domain)
self._physical_coord_names = (
"group_coord_x",
"group_coord_y",
"source_coord_x",
"source_coord_y",
)
self._logical_coord_names = ("orig_field_record_num",)
self._var_chunk_shape = (4, 8, 1, 2, 8, 4096)

@property
def _name(self) -> str:
return "ObnReceiverGathers3D"

def _load_dataset_attributes(self) -> dict[str, Any]:
return {"surveyType": "3D", "gatherType": "common_receiver"}

def _add_coordinates(self) -> None:
# Add dimension coordinates
self._builder.add_coordinate(
"component",
dimensions=("component",),
data_type=ScalarType.UINT8,
)
self._builder.add_coordinate(
"receiver",
dimensions=("receiver",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"shot_line",
dimensions=("shot_line",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"gun",
dimensions=("gun",),
data_type=ScalarType.UINT8,
)
self._builder.add_coordinate(
"shot_point",
dimensions=("shot_point",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
self._data_domain,
dimensions=(self._data_domain,),
data_type=ScalarType.INT32,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key(self._data_domain)),
)

# Add non-dimension coordinates
self._builder.add_coordinate(
"group_coord_x",
dimensions=("receiver",),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_x")),
)
self._builder.add_coordinate(
"group_coord_y",
dimensions=("receiver",),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_y")),
)
self._builder.add_coordinate(
"source_coord_x",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_x")),
)
self._builder.add_coordinate(
"source_coord_y",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_y")),
)
self._builder.add_coordinate(
"orig_field_record_num",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.UINT32,
)
93 changes: 93 additions & 0 deletions src/mdio/builder/templates/seismic_3d_obn_single_component.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
"""Seismic3DObnSingleComponentGathersTemplate MDIO v1 dataset templates."""

from typing import Any

from mdio.builder.schemas.dtype import ScalarType
from mdio.builder.schemas.v1.variable import CoordinateMetadata
from mdio.builder.templates.base import AbstractDatasetTemplate
from mdio.builder.templates.types import SeismicDataDomain


class Seismic3DObnSingleComponentGathersTemplate(AbstractDatasetTemplate):
"""Seismic 3D OBN (Ocean Bottom Node) single-component gathers template."""

def __init__(self, data_domain: SeismicDataDomain = "time"):
super().__init__(data_domain=data_domain)

self._spatial_dim_names = ("receiver", "shot_line", "gun", "shot_point")
self._dim_names = (*self._spatial_dim_names, self._data_domain)
self._physical_coord_names = (
"group_coord_x",
"group_coord_y",
"source_coord_x",
"source_coord_y",
)
self._logical_coord_names = ("orig_field_record_num",)
self._var_chunk_shape = (16, 1, 2, 16, 4096)

@property
def _name(self) -> str:
return "ObnSingleComponentGathers3D"

def _load_dataset_attributes(self) -> dict[str, Any]:
return {"surveyType": "3D", "gatherType": "common_receiver"}

def _add_coordinates(self) -> None:
# Add dimension coordinates
self._builder.add_coordinate(
"receiver",
dimensions=("receiver",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"shot_line",
dimensions=("shot_line",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"gun",
dimensions=("gun",),
data_type=ScalarType.UINT8,
)
self._builder.add_coordinate(
"shot_point",
dimensions=("shot_point",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
self._data_domain,
dimensions=(self._data_domain,),
data_type=ScalarType.INT32,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key(self._data_domain)),
)

# Add non-dimension coordinates
self._builder.add_coordinate(
"group_coord_x",
dimensions=("receiver",),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_x")),
)
self._builder.add_coordinate(
"group_coord_y",
dimensions=("receiver",),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_y")),
)
self._builder.add_coordinate(
"source_coord_x",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_x")),
)
self._builder.add_coordinate(
"source_coord_y",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_y")),
)
self._builder.add_coordinate(
"orig_field_record_num",
dimensions=("shot_line", "gun", "shot_point"),
data_type=ScalarType.UINT32,
)
93 changes: 93 additions & 0 deletions src/mdio/builder/templates/seismic_3d_shot_receiver_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
"""Seismic3DShotReceiverLineGathersTemplate MDIO v1 dataset templates."""

from typing import Any

from mdio.builder.schemas.dtype import ScalarType
from mdio.builder.schemas.v1.variable import CoordinateMetadata
from mdio.builder.templates.base import AbstractDatasetTemplate
from mdio.builder.templates.types import SeismicDataDomain


class Seismic3DShotReceiverLineGathersTemplate(AbstractDatasetTemplate):
"""Seismic 3D shot-ordered gathers with receiver lines template."""

def __init__(self, data_domain: SeismicDataDomain = "time"):
super().__init__(data_domain=data_domain)

self._spatial_dim_names = ("shot_line", "shot_point", "receiver_line", "receiver")
self._dim_names = (*self._spatial_dim_names, self._data_domain)
self._physical_coord_names = (
"source_coord_x",
"source_coord_y",
"group_coord_x",
"group_coord_y",
)
self._logical_coord_names = ("orig_field_record_num",)
self._var_chunk_shape = (1, 32, 1, 32, 2048)

@property
def _name(self) -> str:
return "ShotReceiverLineGathers3D"

def _load_dataset_attributes(self) -> dict[str, Any]:
return {"surveyType": "3D", "gatherType": "common_source"}

def _add_coordinates(self) -> None:
# Add dimension coordinates
self._builder.add_coordinate(
"shot_line",
dimensions=("shot_line",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"shot_point",
dimensions=("shot_point",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"receiver_line",
dimensions=("receiver_line",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
"receiver",
dimensions=("receiver",),
data_type=ScalarType.UINT32,
)
self._builder.add_coordinate(
self._data_domain,
dimensions=(self._data_domain,),
data_type=ScalarType.INT32,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key(self._data_domain)),
)

# Add non-dimension coordinates
self._builder.add_coordinate(
"source_coord_x",
dimensions=("shot_line", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_x")),
)
self._builder.add_coordinate(
"source_coord_y",
dimensions=("shot_line", "shot_point"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("source_coord_y")),
)
self._builder.add_coordinate(
"group_coord_x",
dimensions=("receiver_line", "receiver"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_x")),
)
self._builder.add_coordinate(
"group_coord_y",
dimensions=("receiver_line", "receiver"),
data_type=ScalarType.FLOAT64,
metadata=CoordinateMetadata(units_v1=self.get_unit_by_key("group_coord_y")),
)
self._builder.add_coordinate(
"orig_field_record_num",
dimensions=("shot_line", "shot_point"),
data_type=ScalarType.UINT32,
)
Loading