L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

obspy

obspy

Seismology data processing with ObsPy. Helps with reading seismic waveforms, filtering/processing time series, fetching data from FDSN services, and earthquake analysis. Use when the agent needs to: (1) Read seismic data formats (MiniSEED, SAC, GSE2, SEGY), (2) Filter or process waveforms, (3) Fetch data from IRIS/USGS/FDSN services, (4) Search for earthqua…

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: obspy description: | Seismology data processing with ObsPy. Helps with reading seismic waveforms, filtering/processing time series, fetching data from FDSN services, and earthquake analysis. Use when the agent needs to: (1) Read seismic data formats (MiniSEED, SAC, GSE2, SEGY), (2) Filter or process waveforms, (3) Fetch data from IRIS/USGS/FDSN services, (4) Search for earthquakes by magnitude/location, (5) Plot seismograms or spectrograms, (6) Remove instrument response, (7) Analyze station metadata. license: MIT metadata: version: 1.0.1 author: Geoscience Skills tags: '["Seismology", "Waveforms", "FDSN", "Earthquake", "Time Series", "ObsPy", "MiniSEED", "Signal Processing"]' dependencies: '["obspy>=1.4.0"]' complements: '["segyio", "disba"]' workflow_role: processing skill_type: domain

ObsPy - Seismology Data Processing

Quick Reference

from obspy import read, UTCDateTime
from obspy.clients.fdsn import Client

# Read local file (MiniSEED, SAC, etc.)
st = read("data.mseed")
tr = st[0]                          # First trace
print(tr.stats)                     # Metadata

# Fetch from FDSN
client = Client("IRIS")
t = UTCDateTime("2023-02-06T01:17:00")
st = client.get_waveforms("IU", "ANMO", "00", "LHZ", t, t + 3600)
st.plot()

Key Classes

ClassPurpose
StreamContainer for multiple Trace objects
TraceSingle waveform with data + metadata
UTCDateTimePrecise time handling
InventoryStation/channel metadata
CatalogEarthquake event information

Essential Operations

Read and Inspect

st = read("data.mseed")              # Auto-detect format
tr = st[0]
print(tr.stats.station, tr.stats.channel, tr.stats.sampling_rate)

Filter and Process

st.detrend("demean")                 # Remove mean
st.detrend("linear")                 # Remove trend
st.taper(max_percentage=0.05)        # Taper edges
st.filter("bandpass", freqmin=0.1, freqmax=10.0)

Fetch Waveforms from FDSN

client = Client("IRIS")
t1 = UTCDateTime("2023-02-06T01:17:00")
st = client.get_waveforms("IU", "ANMO", "00", "LHZ", t1, t1 + 3600)
st.write("output.mseed", format="MSEED")

Search Earthquakes

client = Client("USGS")
cat = client.get_events(
    starttime=UTCDateTime("2023-01-01"),
    endtime=UTCDateTime("2023-12-31"),
    minmagnitude=7.0
)
event = cat[0]
print(f"M{event.magnitudes[0].mag} at {event.origins[0].latitude}")

Get Station Metadata

inv = client.get_stations(
    network="IU", station="ANMO",
    level="response"                 # Required for response removal
)

Remove Instrument Response

st = client.get_waveforms("IU", "ANMO", "00", "LHZ", t, t + 3600)
inv = client.get_stations(network="IU", station="ANMO", level="response")
st.remove_response(inventory=inv, output="VEL")  # VEL, DISP, or ACC

Trim and Select

st.trim(UTCDateTime("2023-01-01"), UTCDateTime("2023-01-01T01:00:00"))
st_z = st.select(channel="*Z")       # Vertical only
st_bh = st.select(channel="BH*")     # BH channels

Merge and Handle Gaps

st.print_gaps()                      # Check for gaps
st.merge(method=1, fill_value="interpolate")

Writing Data

st.write("output.mseed", format="MSEED")
st.write("output.sac", format="SAC")

Error Handling

from obspy.clients.fdsn.header import FDSNNoDataException

try:
    st = client.get_waveforms("IU", "ANMO", "00", "LHZ", t1, t2)
except FDSNNoDataException:
    print("No data available")

Common Tips

  1. Always detrend and taper before filtering to avoid artifacts
  2. Use level="response" when fetching stations for instrument correction
  3. Check for gaps before processing with st.print_gaps()
  4. Wildcards work in queries: station="A*", channel="BH?"
  5. UTCDateTime accepts ISO strings, timestamps, datetime objects

When to Use vs Alternatives

ToolBest For
obspyFull seismology workflows, FDSN data access, waveform processing
segyioFast, low-level SEG-Y file I/O for reflection seismic data
scipy.signalGeneric signal processing without seismology-specific features

Use obspy when you need seismological context: FDSN clients, instrument response removal, earthquake catalogs, or standard seismic formats.

Use segyio instead when working exclusively with SEG-Y files for reflection seismic. segyio is faster for large 3D volumes with inline/crossline access.

Use scipy.signal instead when you only need generic filtering or spectral analysis and don't need seismology-specific metadata or data access.

Common Workflows

Fetch and process earthquake waveforms

- [ ] Initialize FDSN client: `Client("IRIS")`
- [ ] Search events with `client.get_events()` for target magnitude/region
- [ ] Fetch waveforms with `client.get_waveforms()` for desired stations
- [ ] Get station metadata with `level="response"` for instrument correction
- [ ] Preprocess: detrend, taper, remove instrument response
- [ ] Filter to frequency band of interest
- [ ] Trim to analysis window and export or plot

References

Scripts

Skills enregistrées