mcpField
S
segyio

segyio

github.com/steadfastasartデータ・データベース7370 回インストール6 週間前に更新
リポジトリ

segyio について

segyioは、SEG-Y地震データの読み取り、確認、変更、作成に使うPythonライブラリです。トレースやヘッダーに加え、3D測量データの形状に沿ったスライスにも対応します。

主な機能

  1. 01トレースとヘッダーの読み取り
  2. 02インライン・クロスラインのスライス取得
  3. 033D測量データ形状の確認
  4. 04SEG-Yファイルの作成と変更

活用シーン

  1. 01トレースや3Dスライスの抽出
  2. 02測量ヘッダーと形状の確認
  3. 03処理データのSEG-Yへの書き込み

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill segyio

インストール後、Claude Code で/segyioを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
header_fields.md
troubleshooting.md
scripts/
extract_subset.py
inspect_segy.py

詳細

segyio - SEG-Y 地震データ

クイックリファレンス

import segyio

# Read
with segyio.open('seismic.sgy', 'r') as f:
    print(f.tracecount, len(f.samples))
    trace0 = f.trace[0]              # Single trace as numpy array
    data = segyio.tools.collect(f.trace[:])  # All traces

# 3D access (specify inline/xline byte locations)
with segyio.open('seismic.sgy', 'r', iline=189, xline=193) as f:
    inline_100 = f.iline[100]        # 2D array (xlines x samples)
    cube = segyio.tools.cube(f)      # Full 3D cube

# Write
spec = segyio.spec()
spec.samples = samples
spec.tracecount = n_traces
with segyio.create('output.sgy', spec) as f:
    f.trace[0] = data

主なアクセス方法

モード説明
f.trace[i]インデックスによるトレースへの順次アクセス
f.header[i]トレースヘッダーへのアクセス(辞書形式)
f.iline[n]インラインスライス(3D 調査)
f.xline[n]クロスラインスライス(3D 調査)
f.depth_slice[n]水平の時間/深度スライス
f.text[0]テキストヘッダー(3200 バイト)
f.binバイナリヘッダー

基本操作

開いて内容を確認する
with segyio.open('seismic.sgy', 'r') as f:
    print(f"Traces: {f.tracecount}")
    print(f"Samples: {len(f.samples)}")
    print(f"Sample interval: {f.samples[1] - f.samples[0]} ms")
    if f.ilines is not None:
        print(f"Inlines: {f.ilines}")
        print(f"Crosslines: {f.xlines}")
トレースヘッダーを読み込む
with segyio.open('seismic.sgy', 'r') as f:
    header = f.header[0]
    print(header[segyio.TraceField.INLINE_3D])
    print(header[segyio.TraceField.CDP_X])

    # Get all values for one field
    inlines = f.attributes(segyio.TraceField.INLINE_3D)[:]
3D データを読み込む
with segyio.open('seismic.sgy', 'r', iline=189, xline=193) as f:
    inline_data = f.iline[100]       # Shape: (n_xlines, n_samples)
    xline_data = f.xline[200]        # Shape: (n_ilines, n_samples)
    time_slice = f.depth_slice[250]  # Shape: (n_ilines, n_xlines)
    cube = segyio.tools.cube(f)      # Shape: (ilines, xlines, samples)
非構造化データを読み込む
# For 2D lines or unsorted data
with segyio.open('seismic.sgy', 'r', ignore_geometry=True) as f:
    data = segyio.tools.collect(f.trace[:])
新しい SEG-Y を作成する
import numpy as np

spec = segyio.spec()
spec.samples = np.arange(500) * 4  # 4ms sample rate
spec.tracecount = 100
spec.format = 1  # IBM float

with segyio.create('output.sgy', spec) as f:
    for i in range(100):
        f.trace[i] = data[i]
        f.header[i] = {
            segyio.TraceField.TRACE_SEQUENCE_LINE: i + 1,
        }
既存ファイルを変更する
with segyio.open('seismic.sgy', 'r+') as f:
    f.trace[0] = f.trace[0] * 2.0
    f.header[0][segyio.TraceField.CDP] = 999

データ形式

コード形式
1IBM 4 バイト浮動小数点数
24 バイト符号付き整数
32 バイト符号付き整数
5IEEE 4 バイト浮動小数点数
81 バイト符号付き整数

代替ツールとの使い分け

ツール最適な用途
segyio高速な SEG-Y の入出力、3D インライン/クロスラインへのアクセス、ヘッダー操作
obspyより幅広い地震学用途:FDSN アクセス、波形処理、イベント解析
segysakxarray ベースの SEG-Y ワークフロー、NetCDF 変換、ラベル付き次元

segyio を使う場合:トレース、ヘッダー、3D スライスの読み込みや、プログラムによる新しい SEG-Y ファイルの作成など、SEG-Y ファイルへの高速かつ低レベルなアクセスが必要な場合です。

代わりに obspy を使う場合:ファイル入出力にとどまらない地震学的処理、すなわち機器応答の除去、FDSN データの取得、地震解析が必要な場合です。

代わりに segysak を使う場合:ラベル付き次元(インライン、クロスライン、時間)を備えた xarray との統合や、NetCDF/Zarr への簡単な変換が必要な場合です。

よくあるワークフロー

3D 地震データを読み込み、内容を確認して抽出する
- [ ] Open file with `segyio.open()`, specify `iline=` and `xline=` byte positions
- [ ] Inspect geometry: trace count, sample count, inline/crossline ranges
- [ ] Read headers to verify coordinate and survey metadata
- [ ] Extract target inline/crossline slices or full cube
- [ ] Apply amplitude scaling or subset extraction as needed
- [ ] Write results to new SEG-Y or export as numpy arrays

よくある問題

問題解決策
ジオメトリが検出されないバイト位置を iline= と xline= で指定します
3D スライスを読み込めない非構造化データには ignore_geometry=True を使用します
インライン/クロスラインのバイト位置が正しくないf.header[0] でヘッダーを確認し、正しいバイト位置を特定します
ファイルを開けないファイルパス、権限、SEG-Y 形式の妥当性を確認します

参考資料

スクリプト

コメント