evo-seismic-phase-picking
Runs SeisBench pretrained PhaseNet model on ObsPy Streams to detect P and S wave arrivals, extracts pick indices, and writes results to CSV.
SKILL.mdtasks-evolved/seismic-phase-picking/environment/skills/evo-seismic-phase-picking/SKILL.md
GitHubevo-seismic-phase-picking
Overview
Runs SeisBench PhaseNet model inference on preprocessed ObsPy Streams to detect P and S wave arrivals. Extracts pick indices mapped to original sample coordinates and writes CSV output.
Key Knowledge
- Use PhaseNet with "stead" weights for best generalization
- P_threshold=0.3, S_threshold=0.3 for good recall
- model.classify() handles sliding windows automatically
- Convert pick times back to original array indices using UTCDateTime math
- Output CSV: file_name, phase, pick_idx
Usage
import sys
sys.path.insert(0, '/app/environment/skills/evo-seismic-phase-picking/scripts')
from utils import process_all_traces_to_csv, load_phasenet_model, run_phase_picking
# Full pipeline
df = process_all_traces_to_csv('/root/data/', '/root/results.csv')
# Or step by step
model = load_phasenet_model('stead')
classify_out = run_phase_picking(model, stream)
Functions
load_phasenet_model(pretrained)- Load PhaseNet modelrun_phase_picking(model, stream)- Run classify on streamextract_picks_to_dataframe(classify_out)- Get picks as DataFrameconvert_pick_to_original_index(pick_time, start, dt)- Time to indexprocess_single_trace(model, npz_path, file_name)- Process one fileprocess_all_traces_to_csv(data_dir, output_csv)- Process all files