Source code for quakemigrate.io.amplitudes

# -*- coding: utf-8 -*-
"""
Module to handle input/output of .amps files.

:copyright:
    2020–2023, QuakeMigrate developers.
:license:
    GNU General Public License, Version 3
    (https://www.gnu.org/licenses/gpl-3.0.html)

"""


[docs]def write_amplitudes(run, amplitudes, event): """ Write amplitude results to a new .amps file. This includes amplitude measurements, and the magnitude estimates derived from them (with station correction terms applied, if provided). Parameters ---------- run : :class:`~quakemigrate.io.core.Run` object Light class encapsulating i/o path information for a given run. amplitudes : `pandas.DataFrame` object P- and S-wave amplitude measurements for each component of each station in the station file, and individual local magnitude estimates derived from them. Columns = ["epi_dist", "z_dist", "P_amp", "P_freq", "P_time", "P_avg_amp", "P_filter_gain", "S_amp", "S_freq", "S_time", "S_avg_amp", "S_filter_gain", "Noise_amp", "is_picked", "ML", "ML_Err"] Index = Trace ID (see `obspy.Trace` object property 'id') event : :class:`~quakemigrate.io.event.Event` object Light class encapsulating waveforms, coalescence information, picks and location information for a given event. """ fpath = run.path / "locate" / run.subname / "amplitudes" fpath.mkdir(exist_ok=True, parents=True) # Work on a copy amplitudes = amplitudes.copy() # Set floating point precision for output file for col in [ "epi_dist", "z_dist", "P_amp", "P_avg_amp", "S_amp", "S_avg_amp", "Noise_amp", ]: amplitudes[col] = amplitudes[col].map(lambda x: f"{x:.5g}", na_action="ignore") for col in ["P_freq", "S_freq"]: amplitudes[col] = amplitudes[col].map(lambda x: f"{x:.2g}", na_action="ignore") for col in ["P_filter_gain", "S_filter_gain"]: amplitudes[col] = amplitudes[col].map(lambda x: f"{x:.3g}", na_action="ignore") # Handle case where no amplitude measurement made if "ML" in amplitudes.columns: for col in ["ML", "ML_Err"]: amplitudes[col] = amplitudes[col].map( lambda x: f"{x:.3g}", na_action="ignore" ) fstem = f"{event.uid}" file = (fpath / fstem).with_suffix(".amps") amplitudes.to_csv(file, index=True)