Model Validation
The model validation module compares HyFI rupture plane estimates with independent focal mechanism solutions to assess reconstruction accuracy and determine active fault planes based on hypocenter distribution constraints. For details, see the original HyFI publication (Truttmann et al., 2023).
Core Concepts
Angular Differences (ε) as Quality Measure
HyFI calculates the angle between the computed rupture plane and the active nodal plane of the focal mechanism.
Physical Interpretation:
0°: Perfect alignment (computed plane ≡ focal mechanism plane)
< 15°: Excellent agreement (typical for well-constrained cases)
15-30°: Good agreement (acceptable for seismic data quality)
30-45°: Fair agreement (visible discrepancy)
45°: Poor agreement (significant misalignment)
Pre-specified vs. Auto-determined Planes
HyFI can be used to verify pre-specified nodal planes (A=1 or A=2) and automatically determines unspecified nodal planes (A=0 or A=NaN) based on the fit with the calculated rupture plane from the fault network module.
Note that the pre-specified nodal planes are always preserved!
Computational Workflow
The validation module is executed according to the following structured pipeline:
Step 1: Data Merging - Focal Mechanism Integration
Focal mechanism data is merged with hypocenter data using two strategies (tried in order):
Strategy A: ID-Based Matching (Primary)
Match events by event ID across catalogs
Requires identical ID formatting in both files
Most reliable when ID numbers are unique and consistent
Fastest approach - direct one-to-one correspondence
Strategy B: Temporal Matching (Fallback)
If ID matching fails, use
merge_asofon datetimeMatches events within 60-second tolerance window
Sorted by date before merging
More robust for catalogs with ID formatting differences or with unconsistent/missing catalog IDs
The algorithm also performs two Quality Control Checks (Optional, configurable):
Magnitude Consistency Check:
Compare hypocenter magnitude (MAG) with focal mechanism magnitude
Remove focal data if |MAG_hypo - MAG_focal| > threshold (default: 0.2)
Reports events with significant magnitude mismatches
Protects against erroneous cross-catalog associations
Location Consistency Check:
Compare hypocenter location (X, Y, Z) with focal mechanism location
Depth threshold: km units (default: 1.0 km)
Latitude/Longitude: converted from km to degrees (~0.009°/km)
Reports mismatches but does NOT remove data (just warnings)
Identifies potential duplicate events in different catalogs
Step 2: Normal Vector Conversion
In step 2, both nodal planes are converted from azimuth/dip to normal vectors. This results in normal vectors for both focal mechanism nodal planes
Step 3: Angular Difference Calculation
For each event with both a computed rupture plane and a focal mechanism, the angular difference from the rupture plane to both nodal planes (1 and 2) is calculated:
Plane 1 angular difference:
angle1 = angle_between(nor_computed, nor_focal_plane1)
Ensure acute angle: angle1 = min(angle1, 180 - angle1)
Plane 2 angular difference:
angle2 = angle_between(nor_computed, nor_focal_plane2)
Ensure acute angle: angle2 = min(angle2, 180 - angle2)
Geometric meaning: Angular difference measures the angle between the normal vectors and thus how well the computed rupture plane aligns with each focal mechanism nodal plane
Step 4: Preferred Plane Selection
In the next step, a two-tier selection process to define the active nodal plane is exexuted:
Tier 1: Active Plane Indicator (if available)
Check column A (specifies the known 1active plane) from the focal mechanism catalog: values 1, 2 indicate pre-specified active plane
If A = 1: Use angle1 (Strike1, Dip1, Rake1) as final angular difference (epsilon)
If A = 2: Use angle2 (Strike2, Dip2, Rake2) as final angular difference (epsilon)
If A = 0: Fall through to Tier 2 (unknown nodal plane, use geometry)
If A = NaN: Fall through to Tier 2 (no pre-specification, use geometry)
Tier 2: Geometric Selection
Compare: angle1 vs. angle2
Choose plane with MINIMUM angular difference (epsilon = min(angle1, angle2))
Rationale:
Pre-specified active planes (A=1 or A=2) take priority and are always maintained
For unknown planes (A=0 or A=NaN), the algorithm selects the nodal plane based on the best geometric fit to the computed rupture plane
Output columns:
epsilon: Angular difference of the preferred focal plane in degrees (0-90°)pref_foc: HyFI-based preferred focal plane (1 or 2)plane_determination_method: Categorical description“Pre-specified (A=1 or A=2)”
“Newly determined (A=0, geometric selection)”
“Newly determined (no A, geometric selection)”
“Not determined (A specified but no rupture plane)”
“Not determined (no computed rupture plane)”
Step 5: Reporting
Finally, the validation module generates comprehensive summary files on the preferred plane determination (see below).
Main Outputs
Active Plane Statistics: active_plane_statistics.txt
This file includes the statistics summary in a human-readable format for quick understanding of validation results quality.
Total events with focal mechanisms
Breakdown by determination method with counts
For newly determined planes: selection distribution (plane 1 vs. 2)
Angular difference statistics: mean, median, min, max
For pre-specified planes: similar angular difference statistics
For not-determined events: reasons and counts
Interpretation guidance
Active Plane Determination Summary: active_plane_determination_summary.csv
Detailed row-by-row documentation including:
Event ID, Date, Location (X, Y, Z), Magnitude
Focal mechanism data: Strike1, Dip1, Rake1, Strike2, Dip2, Rake2
Focal mechanism active plane indicator: A
Computed fault plane: rupt_plane_azi, rupt_plane_dip
Validation results: pref_foc, epsilon
Preferred strike/dip/rake extracted from selected plane
Determination method: How was pref_foc determined?
Sorted by:
Determination method (pre-specified → newly determined → not determined)
Angular difference (best matches first)
References
Truttmann, S., Diehl, T., & Herwegh, M. (2023). Hypocenter-based 3D imaging of active faults: Method and applications in the Southwestern Swiss Alps. Journal of Geophysical Research: Solid Earth, 128, e2023JB026352. https://doi.org/10.1029/2023JB026352
Happy fault imaging! 🎉