Magnitude Homogenization

Magnitude Homogenization is one of the fundamental steps in seismic hazard analysis. The process involves combining earthquake data from multiple catalogues into a single consistent earthquake catalogue by carefully evaluating available bulletins, identifying duplicate events across different sources, and applying empirical conversion relationships to transform various native magnitude scales into a common target magnitude scale [9].

There is a homogenisor module in oq-mbtk that was developed for the database of the International Seismological Center (ISC), but can be used for any other compiled database to create a magnitude-homogeneous global earthquake catalogue. Please note that the module contains not only the reviewed and reprocessed time/location (origin) and magnitude solutions for each event, but also the original solutions from all of the contributing local recording networks [9]. This homogenisor supports several agency-magnitude scales (e.g., surface-wave magnitude (\(M_s\)), body-wave magnitude (\(m_b\)), and moment magnitude (\(M_w\))) and converts them to a standardized \(M_w\) using empirical relations based on their hierarchical criteria for selection of origin and magnitude for homogenizing a global earthquake catalogue.

[1]:
import pandas as pd
import numpy as np

from openquake.cat import isc_homogenisor

Here, we define some case rules for the homogenisation. If you want to know more about isc_homogenisor and their rules, please refer to homogenisor module in oq-mbtk.

Briefly, the block below initializes the logic for converting different magnitude scales reported by the International Seismological Center (ISC) into a standardized \(M_w\) using the ISC-GEM methodology.

Ms rule

  • Agency: ISC

  • Model: Converts \(M_s\) to \(M_w\) using the General Orthogonal Regression (GOR) model.

  • Uncertainty: Applies a specific sigma model (ISCGORMs_toGCMTMw_Sigma) to track measurement errors.

mb rule

  • Agency: ISC

  • Model: Converts \(m_b\) to \(M_w\) using the General Orthogonal Regression (GOR) model tailored for body waves.

  • Uncertainty: Applies the corresponding \(m_b\) sigma model (ISCGORmb_toGCMTMw_Sigma) to ensure consistent error propagation.

[2]:
homog_rules = {
    'Ms': isc_homogenisor.MagnitudeConversionRule(
        'ISC', 'Ms',
        isc_homogenisor.ISCGORMs_toGCMTMw,
        isc_homogenisor.ISCGORMs_toGCMTMw_Sigma
    ),
    'mb': isc_homogenisor.MagnitudeConversionRule(
        'ISC', 'mb',
        isc_homogenisor.ISCGORmb_toGCMTMw,
        isc_homogenisor.ISCGORmb_toGCMTMw_Sigma
    )
}

Below, a mock dataset representing raw earthquake data with different scales and original uncertainties (sigma) is created.

[3]:
raw_data = {
    'event_id': [1, 2, 3, 4],
    'orig_scale': ['Ms', 'mb', 'Ms', 'mb'],
    'orig_mag': [7.2, 5.4, 6.1, 4.8],
    'orig_sigma': [0.1, 0.1, 0.1, 0.1]
}

df = pd.DataFrame(raw_data)
display(df)
event_id orig_scale orig_mag orig_sigma
0 1 Ms 7.2 0.1
1 2 mb 5.4 0.1
2 3 Ms 6.1 0.1
3 4 mb 4.8 0.1

You have a sample dataset and defined conversion rules. Now, you can run the code snippet below and homogenize your catalogue.

[4]:
def homogenize(row):
    """
    Applies conversion rules to convert original magnitude to Mw.
    Handles list outputs from GOR models and propagates uncertainty.
    """
    rule = homog_rules.get(row['orig_scale'])

    if rule:
        new_mag, new_sigma = rule.convert_value(row['orig_mag'], row['orig_sigma'])

        if isinstance(new_mag, (list, np.ndarray)):
            new_mag = new_mag[0]

        return pd.Series([round(float(new_mag), 2), round(new_sigma, 3)])

df[['Mw_Unified', 'Sigma_Unified']] = df.apply(homogenize, axis=1)

print("\nHomogenized Catalogue:")
display(df)

Homogenized Catalogue:
event_id orig_scale orig_mag orig_sigma Mw_Unified Sigma_Unified
0 1 Ms 7.2 0.1 7.25 0.228
1 2 mb 5.4 0.1 5.66 0.330
2 3 Ms 6.1 0.1 6.22 0.211
3 4 mb 4.8 0.1 4.83 0.330