Sources and Receivers¶
Instaseis uses objects to represent seismic receivers and different types of
sources. Source
objects are standard moment tensor
or double couple sources, ForceSource
object are
(as the name implies) force sources, and finite source are represented by the
FiniteSource
class.
Note
Instaseis works with geocentric coordinates. Coordinates in for example QuakeML files are defined on the WGS84 ellipsoid. Thus they need to be converted. Instaseis performs this conversion if it is used to read from any file format - if you create the source objects yourself you have to take care to pass geocentric coordinates. The difference in both can be up to 20 kilometers. Depending on the application, this is not an effect you can savely ignore.
The ruleset within Instaseis is simple:
Source and receiver objects are always in geocentric coordinates.
If parsed from any outside file (QuakeML/SEED/SAC/StationXML/…) the coordinates are assumed to be WGS84 and will be converted so the source/receiver objects are again in geocentric coordinates.
The directions of r, theta, and phi are defined according to the standard spherical coordinate system definition used in physics, which is: r positive outward, theta positive downward, and phi positive counter-clockwise.
Receiver¶
- class instaseis.source.Receiver(latitude, longitude, network=None, station=None, location=None, depth_in_m=None)[source]¶
Class dealing with seismic receivers.
- Parameters:
latitude (float) – The geocentric latitude of the receiver in degree.
longitude (float) – The longitude of the receiver in degree.
depth_in_m (float) – The depth of the receiver in meters. Only
network (str, optional) – The network id of the receiver.
station (str, optional) – The station id of the receiver.
location (str) – The location code of the receiver.
>>> from instaseis import Receiver >>> rec = Receiver(latitude=12.34, longitude=56.78, network="AB", ... station="CDE", location="SY") >>> print(rec) Instaseis Receiver: Longitude : 56.8 deg Latitude : 12.3 deg Network : AB Station : CDE Location : SY
- static parse(filename_or_obj, network_code=None)[source]¶
Attempts to parse anything to a list of
Receiver
objects. Always returns a list, even if it only contains a single element. It is meant as a single entry point for receiver information from any source.Supports StationXML, the custom STATIONS fileformat, SAC files, SEED files, and a number of ObsPy objects. This method can furthermore work with anything ObsPy can deal with (filename, URL, memory files, …).
Coordinates are assumed to be defined on the WGS84 ellipsoid and will be converted to geocentric coordinates.
- Parameters:
filename_or_obj – Filename/URL/Python object
network_code – Network code needed to parse ObsPy station objects. Likely only needed for the recursive part of this method.
- Returns:
List of
Receiver
objects.
The following example parses a StationXML file to a list of
Receiver
objects.>>> import instaseis >>> print(instaseis.Receiver.parse(stationxml_file)) [<instaseis.source.Receiver object at 0x...>]
Source¶
- class instaseis.source.Source(latitude, longitude, depth_in_m=None, m_rr=0.0, m_tt=0.0, m_pp=0.0, m_rt=0.0, m_rp=0.0, m_tp=0.0, time_shift=None, sliprate=None, dt=None, origin_time=UTCDateTime(1970, 1, 1, 0, 0))[source]¶
Class to handle a seismic moment tensor source including a source time function.
- Parameters:
latitude – geocentric latitude of the source in degree
longitude – longitude of the source in degree
depth_in_m – source depth in m
m_rr – moment tensor components in r, theta, phi in Nm
m_tt – moment tensor components in r, theta, phi in Nm
m_pp – moment tensor components in r, theta, phi in Nm
m_rt – moment tensor components in r, theta, phi in Nm
m_rp – moment tensor components in r, theta, phi in Nm
m_tp – moment tensor components in r, theta, phi in Nm
time_shift – correction of the origin time in seconds. Useful in the context of finite source or user defined source time functions.
sliprate – normalized source time function (sliprate)
dt – sampling of the source time function
origin_time – The origin time of the source. If you don’t reconvolve with another source time function this time is the peak of the source time function used to generate the database. If you reconvolve with another source time function this time is the time of the first sample of the final seismogram.
>>> import instaseis >>> source = instaseis.Source( ... latitude=89.91, longitude=0.0, depth_in_m=12000, ... m_rr = 4.71e+17, m_tt = 3.81e+15, m_pp =-4.74e+17, ... m_rt = 3.99e+16, m_rp =-8.05e+16, m_tp =-1.23e+17) >>> print(source) Instaseis Source: Origin Time : 1970-01-01T00:00:00.000000Z Longitude : 0.0 deg Latitude : 89.9 deg Depth : 1.2e+01 km km Moment Magnitude : 5.73 Scalar Moment : 4.96e+17 Nm Mrr : 4.71e+17 Nm Mtt : 3.81e+15 Nm Mpp : -4.74e+17 Nm Mrt : 3.99e+16 Nm Mrp : -8.05e+16 Nm Mtp : -1.23e+17 Nm
- property M0¶
Scalar Moment M0 in Nm.
- classmethod from_strike_dip_rake(latitude, longitude, depth_in_m, strike, dip, rake, M0, time_shift=None, sliprate=None, dt=None, origin_time=UTCDateTime(1970, 1, 1, 0, 0))[source]¶
Initialize a source object from a shear source parameterized by strike, dip and rake.
- Parameters:
latitude – geocentric latitude of the source in degree
longitude – longitude of the source in degree
depth_in_m – source depth in m
strike – strike of the fault in degree
dip – dip of the fault in degree
rake – rake of the fault in degree
M0 – scalar moment
time_shift – correction of the origin time in seconds. only useful in the context of finite sources
sliprate – normalized source time function (sliprate)
dt – sampling of the source time function
origin_time – The origin time of the source. If you don’t reconvolve with another source time function this time is the peak of the source time function used to generate the database. If you reconvolve with another source time function this time is the time of the first sample of the final seismogram.
>>> import instaseis >>> source = instaseis.Source.from_strike_dip_rake( ... latitude=10.0, longitude=12.0, depth_in_m=1000, strike=79, ... dip=10, rake=20, M0=1E17) >>> print(source) Instaseis Source: Origin Time : 1970-01-01T00:00:00.000000Z Longitude : 12.0 deg Latitude : 10.0 deg Depth : 1.0e+00 km km Moment Magnitude : 5.27 Scalar Moment : 1.00e+17 Nm Mrr : 1.17e+16 Nm Mtt : -1.74e+16 Nm Mpp : 5.69e+15 Nm Mrt : -4.92e+16 Nm Mrp : 8.47e+16 Nm Mtp : 1.29e+16 Nm
- property moment_magnitude¶
Moment magnitude M_w.
- static parse(filename_or_obj)[source]¶
Attempts to parse anything to a Source object. Can currently read anything ObsPy can read, ObsPy event related objects.
For anything ObsPy related, it must contain a full moment tensor, otherwise it will raise an error.
Coordinates are assumed to be defined on the WGS84 ellipsoid and will be converted to geocentric coordinates.
- Parameters:
filename_or_obj – The object or filename to parse.
The following example will read a local QuakeML file and return a
Source
object.>>> import instaseis >>> source = instaseis.Source.parse(quakeml_file) >>> print(source) Instaseis Source: Origin Time : 2010-03-24T14:11:31.000000Z Longitude : 40.1 deg Latitude : 38.6 deg Depth : 4.5e+00 km km Moment Magnitude : 5.09 Scalar Moment : 5.37e+16 Nm Mrr : 5.47e+15 Nm Mtt : -4.11e+16 Nm Mpp : 3.56e+16 Nm Mrt : 2.26e+16 Nm Mrp : -2.25e+16 Nm Mtp : 1.92e+16 Nm
- property tensor¶
List of moment tensor components in r, theta, phi coordinates: [m_rr, m_tt, m_pp, m_rt, m_rp, m_tp].
- property tensor_voigt¶
List of moment tensor components in theta, phi, r coordinates in Voigt notation: [m_tt, m_pp, m_rr, m_rp, m_rt, m_tp].
ForceSource¶
- class instaseis.source.ForceSource(latitude, longitude, depth_in_m=None, f_r=0.0, f_t=0.0, f_p=0.0, origin_time=UTCDateTime(1970, 1, 1, 0, 0), sliprate=None, time_shift=None, dt=None)[source]¶
Class to handle a seismic force source.
- Parameters:
latitude – geocentric latitude of the source in degree
longitude – longitude of the source in degree
depth_in_m – source depth in m
f_r – force components in r, theta, phi in N
f_t – force components in r, theta, phi in N
f_p – force components in r, theta, phi in N
origin_time – The origin time of the source. If you don’t reconvolve with another source time function this time is the peak of the source time function used to generate the database. If you reconvolve with another source time function this time is the time of the first sample of the final seismogram.
sliprate – normalized source time function (sliprate)
>>> import instaseis >>> source = instaseis.ForceSource(latitude=12.34, longitude=12.34, ... f_r=1E10) >>> print(source) Instaseis Force Source: Origin Time : 1970-01-01T00:00:00.000000Z Longitude : 12.3 deg Latitude : 12.3 deg Fr : 1.00e+10 N Ft : 0.00e+00 N Fp : 0.00e+00 N
- Parameters:
latitude – geocentric latitude of the source in degree
longitude – longitude of the source in degree
depth_in_m – source depth in m
f_r – force components in r, theta, phi in N
f_t – force components in r, theta, phi in N
f_p – force components in r, theta, phi in N
origin_time – The origin time of the source. If you don’t reconvolve with another source time function this time is the peak of the source time function used to generate the database. If you reconvolve with another source time function this time is the time of the first sample of the final seismogram.
sliprate – normalized source time function (sliprate)
time_shift – correction of the origin time in seconds. Useful in the context of finite source or user defined source time functions.
dt – sampling of the source time function
- property force_rtp¶
List of force components in r, theta, phi, coordinates: [f_r, f_t, f_p].
- property force_tpr¶
List of force components in theta, phi, r coordinates: [f_t, f_p, f_r].
FiniteSource¶
- class instaseis.source.FiniteSource(pointsources=None, CMT=None, magnitude=None, event_duration=None, hypocenter_longitude=None, hypocenter_latitude=None, hypocenter_depth_in_m=None)[source]¶
A class to handle finite sources represented by a number of point sources.
- Parameters:
pointsources (list of
Source
objects) – The points sources making up the finite source.CMT (
Source
, optional) – The centroid of the finite source.magnitude (float, optional) – The total moment magnitude of the source.
event_duration (float, optional) – The event duration in seconds.
hypocenter_longitude (float, optional) – The hypocentral longitude.
hypocenter_latitude (float, optional) – The hypocentral latitude.
hypocenter_depth_in_m (float, optional) – The hypocentral depth in m.
- property M0¶
Scalar Moment M0 in Nm.
- compute_centroid(planet_radius=6371000.0, dt=None, nsamp=None)[source]¶
Computes the centroid moment tensor by summing over all pointsource weihted by their scalar moment.
- find_hypocenter()[source]¶
Finds the hypo- and epicenter based on the point source that has the smallest timeshift.
- classmethod from_Haskell(latitude, longitude, depth_in_m, strike, dip, rake, M0, fault_length, fault_width, rupture_velocity, nl=100, nw=1, trise=1.0, tfall=None, dt=0.1, planet_radius=6371000.0, origin_time=UTCDateTime(1970, 1, 1, 0, 0))[source]¶
Initialize a source object from a shear source parameterized by strike, dip and rake.
- Parameters:
latitude – geocentric latitude of the source centroid in degree
longitude – longitude of the source centroid in degree
depth_in_m – source centroid depth in m
strike – strike of the fault in degree
dip – dip of the fault in degree
rake – rake of the fault in degree
M0 – scalar moment
fault_length – fault length in m
fault_width – fault width in m
rupture_velocity – rupture velocity in m / s. Use negative value to propagate the rupture in negative rake direction.
nl – number of point sources along strike direction
nw – number of point sources perpendicular strike direction
trise – rise time
tfall – fall time
dt – sampling of the source time function
planet_radius – radius of the planet, default to Earth.
origin_time – The origin time of the first patch breaking.
- classmethod from_srf_file(filename, normalize=False)[source]¶
Initialize a finite source object from a ‘standard rupture format’ (.srf) file.
Coordinates are assumed to be defined on the WGS84 ellipsoid and will be converted to geocentric coordinates.
- Parameters:
>>> import instaseis >>> source = instaseis.FiniteSource.from_srf_file(srf_file) >>> print(source) Instaseis Finite Source: Moment Magnitude : 7.60 Scalar Moment : 3.20e+20 Nm #Point Sources : 10 Rupture Duration : 222.2 s Time Shift : 0.0 s Min Depth : 50000.0 m Max Depth : 50000.0 m Hypocenter Depth : 50000.0 m Min Latitude : 0.0 deg Max Latitude : 0.0 deg Hypocenter Latitude : 0.0 deg Min Longitude : 0.0 deg Max Longitude : 9.0 deg Hypocenter Longitude : 0.0 deg
- classmethod from_usgs_param_file(filename_or_obj, npts=10000, dt=0.1, trise_min=1.0)[source]¶
Initialize a finite source object from a (.param) file available from the USGS website.
Coordinates are assumed to be defined on the WGS84 ellipsoid and will be converted to geocentric coordinates.
- Parameters:
filename_or_obj (str) – path to the .param file
npts (int) – number of samples for the source time functions. Should be enough to accommodate long rise times plus optional filter responses.
dt (float) – sample interval for the source time functions. Needs to be small enough to sample short rise times and can then be low pass filtered and downsampled before extracting seismograms.
trise_min (float) – minimum rise time. If rise time or fall time is smaller than this value, it is replaced by the minimum value. Mostly meant to handle zero rise times in some USGS files.
>>> import instaseis >>> source = instaseis.FiniteSource.from_usgs_param_file(param_file) >>> print(source) Instaseis Finite Source: Moment Magnitude : 7.87 Scalar Moment : 8.06e+20 Nm #Point Sources : 121 Rupture Duration : 107.6 s Time Shift : 0.0 s Min Depth : 860.1 m Max Depth : 26907.3 m Hypocenter Depth : 26907.3 m Min Latitude : 26.7 deg Max Latitude : 28.7 deg Hypocenter Latitude : 27.9 deg Min Longitude : 84.1 deg Max Longitude : 86.6 deg Hypocenter Longitude : 84.8 deg
- property moment_magnitude¶
Moment magnitude M_w.
- resample_sliprate(dt, nsamp)[source]¶
For convolution, the sliprate is needed at the sampling of the fields in the database. This function resamples the sliprate using linear interpolation for all pointsources in the finite source.
- Parameters:
dt – desired sampling
nsamp – desired number of samples