How hsnterp/jormungandr works
Jormungandr is an edge-oriented seismic detector and P/S phase picker. Its workflow prepares STEAD waveforms and labels, trains a compact U-Net (including EQTransformer knowledge distillation), exports an INT8 ONNX model, then scores continuous sensor data in windows and turns detection probabilities into event triggers for transmission gating. The README also describes evaluation against STA/LTA and other pickers, plus zero-shot evaluation. Some subsystems are documented but their source was not sampled, so their internal wiring is not expanded.
Main entry points: dataset.py Dataset loader · model.py 1D U-Net picker · stream_infer.py Streaming inference entry · demo_edge.py Transmission gate demo
Components 22
Data preparation
- Dataset loader
src/seismic_edge_picker/dataset.py - Leakage-safe splits
src/seismic_edge_picker/splits.py - Waveform preprocessing
src/seismic_edge_picker/preprocessing.py - Training augmentation
src/seismic_edge_picker/augment.py - Target labels
src/seismic_edge_picker/labels.py
Model training
- 1D U-Net picker
src/seismic_edge_picker/model.py - Student training
scripts/train.py - Distillation utilities
src/seismic_edge_picker/distill.py - Distillation training
scripts/train_distill.py
Edge inference
- ONNX INT8 export
scripts/export_onnx.py - Windowed streaming
src/seismic_edge_picker/streaming.py - Causal preprocessing
src/seismic_edge_picker/preprocessing.py - Streaming inference entry
scripts/stream_infer.py - Transmission gate demo
scripts/demo_edge.py
Evaluation
- Model evaluation
scripts/evaluate.py - Picker baselines
scripts/fair_comparison.py - False-alarm analysis
scripts/false_alarm_rate.py
Other components
- Waveform source
- STEAD / SeisBench
- EQTransformer teacher
- STA/LTA detector
- Reported event packets
Connections 26
- STEAD / SeisBench → Dataset loader: provides traces
- Dataset loader → Leakage-safe splits: splits metadata
- Dataset loader → Waveform preprocessing: preprocesses traces
- Dataset loader → Training augmentation: augments training
- Dataset loader → Target labels: builds targets
- Student training → Dataset loader: loads batches
- Student training → 1D U-Net picker: trains model
- EQTransformer teacher → Distillation utilities: provides soft targets
- Distillation utilities → Dataset loader: wraps train data
- Distillation training → Distillation utilities: uses cache utilities
- Distillation training → 1D U-Net picker: trains student
- ONNX INT8 export → 1D U-Net picker: exports model
- Waveform source → Streaming inference entry: streams waveform
- Streaming inference entry → Causal preprocessing: preprocesses chunks
- Streaming inference entry → Windowed streaming: windows and merges
- Streaming inference entry → ONNX INT8 export: loads ONNX model
- Windowed streaming → Transmission gate demo: emits probabilities
- Transmission gate demo → Reported event packets: selects packets
- Model evaluation → Dataset loader: loads test split
- Model evaluation → 1D U-Net picker: scores predictions
- Picker baselines → EQTransformer teacher: compares picker
- Picker baselines → Model evaluation: compares metrics
- False-alarm analysis → STA/LTA detector: benchmarks against
- False-alarm analysis → 1D U-Net picker: measures triggers
- Transmission gate demo → STA/LTA detector: compares trigger
- STA/LTA detector → Reported event packets: selects packets