Source code for obsplus.datasets.bingham_test

"""
The Bingham dataset.
"""
import numpy as np
import obspy
from obspy import UTCDateTime as UTC
from obspy.clients.fdsn.mass_downloader import (
    CircularDomain,
    Restrictions,
    MassDownloader,
)
from obspy.geodetics import kilometers2degrees

import obsplus
from obsplus import WaveBank, events_to_df
from obsplus.datasets.dataset import DataSet


[docs] class Bingham(DataSet): """ The Bingham Canyon dataset includes waveforms recorded during and after the Manefay Slide, one of the largest anthropogenic landslides ever recorded (https://bit.ly/2bsRsyR). Fortunately, due to close monitoring, no one was injured. I have personally modified and added some phase picks to the events. As such, this dataset should be used for testing and demonstration purposes only. """ name = "bingham_test" version = "0.1.0" time_before = np.timedelta64(10, "s") time_after = np.timedelta64(60, "s") # define spatial extents variables (center of pit) latitude = 40.53829 longitude = -112.149_506 max_dist = 20 # distance in km
[docs] def download_events(self): """Simply copy events from base directory.""" cat = obspy.read_events(str(self.source_path / "events.xml")) obsplus.EventBank(self.event_path).put_events(cat)
def _download_bingham(self): """Use obspy's mass downloader to get station/waveforms data.""" bank = WaveBank(self.waveform_path) domain = CircularDomain( self.latitude, self.longitude, minradius=0, maxradius=kilometers2degrees(self.max_dist), ) chan_priorities = ["HH[ZNE]", "BH[ZNE]", "EL[ZNE]", "EN[ZNE]"] cat = obspy.read_events(str(self.source_path / "events.xml")) df = events_to_df(cat) for _, row in df.iterrows(): starttime = row.time - self.time_before endtime = row.time + self.time_after restrictions = Restrictions( starttime=UTC(starttime), endtime=UTC(endtime), minimum_length=0.90, minimum_interstation_distance_in_m=100, channel_priorities=chan_priorities, location_priorities=["", "00", "01", "--"], ) kwargs = dict( domain=domain, restrictions=restrictions, mseed_storage=str(self.waveform_path), stationxml_storage=str(self.station_path), ) MassDownloader(providers=[self._download_client]).download(**kwargs) # ensure data were downloaded bank.update_index() assert not bank.read_index(starttime=starttime, endtime=endtime).empty # update wavebank WaveBank(self.waveform_path).update_index() download_stations = _download_bingham download_waveforms = _download_bingham