macOS app for forensic hail verification

Weatherman turns post-storm signals into defensible hail size estimates.

Weatherman fuses MRMS radar, dual-pol signatures, satellite imagery, ground reports, and environmental data to verify hailfall and estimate surface hail size with confidence and uncertainty bounds.

target +1.2 mm Bias after calibration
straighten 14.7 mm RMSE vs ground truth
analytics 0.52 Heidke Skill Score

Outputs per location

  • Calibrated hail size estimate
  • Confidence rating (High, Medium, Low)
  • Uncertainty bounds from RMSE
  • Trajectory-based melting adjustment
Swift and SwiftUI implementation Actor-based concurrency

Data sources

Multi-source fusion, not single radar snapshots.

Weatherman blends radar, satellite, and ground truth to reduce bias in MESH and deliver location-specific hail verification for forensic analysis.

radar

MRMS radar

MESH, VIL, echo tops, POSH, and rotation tracks provide spatial hail structure and storm evolution.

sensors

Dual-pol signatures

HDR thresholds flag hail presence and severity when dual-polarization coverage is available.

satellite_alt

Satellite

GOES ABI and GLM capture overshooting tops, cloud top temperature, and lightning density.

place

Ground truth

SPC and mPING reports calibrate storms with weighted confidence by report quality.

thermostat

Environment

Freezing level, wet bulb zero, surface temperature, CAPE, and storm motion refine melt and drift.

Six phase pipeline

A calibration-first workflow built for defensible estimates.

Each phase adds physical realism or observational correction before final scoring and uncertainty bounds.

  1. cloud_download

    Parallel data acquisition

    Radar, satellite, ground reports, and environmental data are fetched concurrently.

  2. hub

    Storm cell identification

    Radar contours are clustered into storm cells and matched with ground-truth reports.

  3. tune

    Per-storm calibration

    Ground truth reports calibrate MESH with Wilson et al. bias correction as a fallback.

  4. science

    Physical validation

    HailTrack modeling adds melt rate and trajectory adjustments for surface size estimates.

  5. verified

    Confidence scoring

    Multi-factor scoring weighs calibration agreement, thresholds, and false alarm penalties.

  6. query_stats

    Uncertainty bounds

    RMSE-derived bounds provide probabilistic size estimates and asymmetric confidence intervals.

Confidence and uncertainty

Every output comes with a transparent confidence score.

Weatherman combines observations and calibration agreement into a single score, then maps it to clear labels.

calculate

Score factors

  • Ground truth count0 to 40
  • Calibration agreement0 to 25
  • MESH threshold0 to 20
  • Physical validation0 to 10
  • False alarm penalty-10 to 0
speed

Confidence labels

  • check_circle High confidence65+
  • radio_button_checked Medium confidence35–64
  • error Low confidence<35

Uncertainty bounds are tuned by MESH magnitude, keeping low-hail events conservative.

Validation results

Better bias, lower false alarms, stronger skill.

Independent validation shows Weatherman improves MESH performance for forensic hail verification.

leaderboard

Performance summary

Metric Raw MESH Weatherman
Bias (mm) +9.28 +1.2
RMSE (mm) 20.34 14.7
POD (28 mm) 0.62 0.68
POFD (28 mm) 0.25 0.18
HSS 0.37 0.52
insights

What this means

Weatherman reduces systematic overestimation while increasing detection skill. The result is a more reliable forensic record for insurance loss assessment, agriculture, and structural evaluation.

  • trending_down Bias reduced by 87 percent
  • shield False alarm rate reduced by 28 percent
  • verified Confidence scores mapped to thresholds

Implementation

Native Swift and SwiftUI performance.

Actor-based concurrency keeps data fusion thread-safe while parallel fetch reduces latency by roughly 60 percent.

code

Concurrent data acquisition

async let radarTask = fetchRadarData(for: date)
async let satelliteTask = fetchSatelliteData(for: date)
async let groundTask = fetchGroundReports(for: date)
async let envTask = fetchEnvironmentData(for: date)

let (radar, satellite, ground, env) = await (
	radarTask,
	satelliteTask,
	groundTask,
	envTask
)
memory

System highlights

  • bolt Actor-based HailFusionEngine orchestration
  • hub Storm cell clustering for per-storm calibration
  • speed Lazy trajectory modeling to control compute costs
  • description Output tuned for forensic reporting
verified

Why it matters

Defensible hail verification, built for real world claims.

Weatherman turns fragmented storm signals into a consistent story: calibrated hail size, confidence, and uncertainty for each location. That means fewer false alarms and better evidence for post-event decisions. Need help? Visit the Help Center arrow_forward for troubleshooting and support.