Converting Data to ASDF

To convert generic data to ASDF please just use ObsPy to read it and add it to ASDF files as written in the tutorial: Tutorial.

Converting a folder of SAC files to ASDF

As this is a common use case we ship a utility for this. Note that this is not a silver bullet and it cannot cover all cases, so please check your data afterwards.

$ python -m pyasdf.scripts.sac2asdf folder_with_sac_files out.h5 synthetics

This will search (not recursively) for all SAC files in folder_with_sac_files and write them to the out.h5 ASDF file. All waveforms will (in this case) have the tag synthetics.

It will honor the following SAC header fields and convert them to corresponding StationXML and QuakeML documents:

  • evla

  • evlo

  • evdp

  • o

  • stla

  • stlo

  • stel

  • stdp

The waveforms will be correctly linked to the corresponding QuakeML files with ASDF’s internal reference system. Please see the help of the script for more details.

$ python -m pyasdf.scripts.sac2asdf --help

The file can then be read as follows:

>>> import pyasdf
>>> ds = pyasdf.ASDFDataSet("./out.h5")
>>> ds
ASDF file [format version: 1.0.0]: 'out.h5' (615.1 MB)
    Contains 1 event(s)
    Contains waveform data from 1829 station(s).

# Get all events.
>>> cat = ds.events
>>> cat
1 Event(s) in Catalog:
2005-02-16T20:28:06.438750Z | -35.390,  -16.000

# Get waveforms.
>>> st = ds.waveforms.IU_ANMO.synthetics
>>> st
3 Trace(s) in Stream:
IU.ANMO.S3.MXE | 2005-02-16T20:28:06.438750Z - ... | 6.2 Hz, 37200 samples
IU.ANMO.S3.MXN | 2005-02-16T20:28:06.438750Z - ... | 6.2 Hz, 37200 samples
IU.ANMO.S3.MXZ | 2005-02-16T20:28:06.438750Z - ... | 6.2 Hz, 37200 samples

# Get station coordinates.
>>> ds.waveforms.IU_ANMO.coordinates
{'elevation_in_m': 1720.0,
 'latitude': 34.945899963378906,
 'longitude': -106.45719909667969}

# Get event associated with a certain trace
>>> event = st[0].stats.asdf.event_ids[0].get_referred_object()
>>> event.origins[0].latitude, event.origins[0].longitude
(-35.38999938964844, -16.0)