Source code for pyrocko.scenario.station
# http://pyrocko.org - GPLv3
#
# The Pyrocko Developers, 21st Century
# ---|P------/S----------~Lg----------
from __future__ import absolute_import, division, print_function
import numpy as num
from pyrocko import model
from pyrocko.guts import Int, String, List
from .base import LocationGenerator
guts_prefix = 'pf.scenario'
[docs]class StationGenerator(LocationGenerator):
nstations = Int.T(
default=10,
help='Number of randomly distributed stations.')
network_name = String.T(
default='CO',
help='Network name')
channels = List.T(
optional=True,
default=['BHE', 'BHN', 'BHZ'],
help='Seismic channels to generate. Default: BHN, BHE, BHZ')
[docs]class RandomStationGenerator(StationGenerator):
def __init__(self, **kwargs):
StationGenerator.__init__(self, **kwargs)
self._stations = None
def clear(self):
StationGenerator.clear(self)
self._stations = None
def nsl(self, istation):
return self.network_name, 'S%03i' % (istation + 1), '',
def get_stations(self):
if self._stations is None:
if self.channels:
channels = [model.station.Channel(c) for c in self.channels]
else:
channels = None
stations = []
for istation in range(self.nstations):
lat, lon, north_shift, east_shift, depth = map(
float, self.get_coordinates(istation))
net, sta, loc = self.nsl(istation)
station = model.Station(
net, sta, loc,
lat=lat,
lon=lon,
north_shift=north_shift,
east_shift=east_shift,
depth=depth,
channels=channels)
stations.append(station)
self._stations = stations
return self._stations
def get_distance_range(self, sources):
dists = []
for source in sources:
for station in self.get_stations():
dists.append(
source.distance_to(station))
return num.min(dists), num.max(dists)
def ensure_data(self, engine, sources, path, tmin=None, tmax=None):
return []
def add_map_artists(self, engine, sources, automap):
automap.add_stations(self.get_stations())