5. Magnitude calculation¶
EQcorrscan contains both an automatic amplitude picker and a singular-value decomposition derived magnitude calculation, which is very accurate but requires high levels of event similarity.
5.1. Relative moment by singular-value decomposition¶
This method closely follows the method outlined by Rubinstein & Ellsworth 2010.
This example requires data downloaded from the eqcorrscan github repository.
>>> from eqcorrscan.utils.mag_calc import svd_moments
>>> from obspy import read
>>> import glob
>>> from eqcorrscan.utils.clustering import svd
>>> import numpy as np
>>> from eqcorrscan import tests
>>> import os
>>> # Get the path for the test-data so we can test this
>>> testing_path = os.path.dirname(
... tests.__file__) + '/test_data/similar_events_processed'
>>> stream_files = glob.glob(os.path.join(testing_path, '*'))
>>> stream_list = [read(stream_file) for stream_file in stream_files]
>>> event_list = []
>>> for i, stream in enumerate(stream_list):
... st_list = []
... for tr in stream:
... # Only use the vertical channels of sites with known high similarity.
... # You do not need to use this step for your data.
... if (tr.stats.station, tr.stats.channel) not in\
... [('WHAT2', 'SH1'), ('WV04', 'SHZ'), ('GCSZ', 'EHZ')]:
... stream.remove(tr)
... continue
... st_list.append(i)
... event_list.append(st_list)
<obspy.core.stream.Stream object at ...>
>>> event_list = np.asarray(event_list).T.tolist()
>>> SVectors, SValues, Uvectors, stachans = svd(stream_list=stream_list)
>>> M, events_out = svd_moments(u=Uvectors, s=SValues, v=SVectors,
... stachans=stachans, event_list=event_list)