Source code for quakemigrate.export.to_snuffler

# -*- coding:utf-8 -*-
"""
This module provides parsers to generate input files for Snuffler, a manual phase
picking interface from the Pyrocko package.

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

"""

import pathlib


[docs]def snuffler_stations(stations, output_path, filename, network_code=None): """ Function to create station files compatible with snuffler. Parameters ---------- stations : `pandas.DataFrame` object DataFrame containing station information. output_path : str Location to save snuffler station file. filename : str Name of output station file. network_code : str Unique identifier for the seismic network. """ output = pathlib.Path(output_path) / filename line_template = "{nw}.{stat}. {lat} {lon} {elev} {dep}\n" with output.open(mode="w") as f: for i, station in stations.iterrows(): if network_code is None: try: network_code = station["Network"] except KeyError: network_code = "" line = line_template.format( nw=network_code, stat=station["Name"], lat=station["Latitude"], lon=station["Longitude"], elev=station["Elevation"], dep="0", ) f.write(line)
[docs]def snuffler_markers(event, output_path, filename=None): """ Function to create marker files compatible with snuffler Parameters ---------- event : `ObsPy.Event` object Contains information about the origin time and a list of associated picks. output_path : str Location to save the marker file. filename : str, optional Name of marker file - defaults to 'eventid/eventid.markers'. """ if filename is None: filename = f"{event.resource_id}.markers" output_path = pathlib.Path(output_path) / str(event.resource_id) output_path.mkdir(parents=True, exist_ok=True) output = output_path / filename line_template = ( "phase: {year}-{month}-{day} {hr}:{min}:{sec}.{msec} 5 {nw}.{stat}..{comp} " "None None None {phase} None False\n" ) origin = event.origins[0] # Write event line to file event_line = ( "event: {year}-{month}-{day} {hr}:{min}:{sec}.{msec} 0 {eventid} 0.0 0.0 None " "None None Event None\n" ) event_line = event_line.format( year=origin.time.year, month=str(origin.time.month).zfill(2), day=str(origin.time.day).zfill(2), hr=str(origin.time.hour).zfill(2), min=str(origin.time.minute).zfill(2), sec=str(origin.time.second).zfill(2), msec=origin.time.microsecond, eventid=str(event.resource_id), ) with output.open("w") as f: f.write("# Snuffler Markers File Version 0.2\n") f.write(event_line) for pick in event.picks: if pick.phase_hint == "P": comp = "BHZ" elif pick.phase_hint == "S": comp = "BHN" line = line_template.format( year=pick.time.year, month=str(pick.time.month).zfill(2), day=str(pick.time.day).zfill(2), hr=str(pick.time.hour).zfill(2), min=str(pick.time.minute).zfill(2), sec=str(pick.time.second).zfill(2), msec=pick.time.microsecond, nw=pick.waveform_id.network_code, stat=pick.waveform_id.station_code, comp=comp, phase=pick.phase_hint, ) f.write(line)