Recalibration Analysis Report — 2026-04-13
Auto-generated by scripts/recalibrate_algo.py. This report is the
input for algo.md updates — diff against the prior dated section to
see what's actually moved.
Connection: postgres://prop:***@10.0.15.24:5432/prop
Statement timeout: 20min
Row counts and date ranges
| tbl |
n |
lo |
hi |
| contacts |
58560 |
1991-05-04 |
2026-03-07 |
| era5_profiles |
0 |
|
|
| hrrr_native_profiles |
11472 |
2019-03-09 |
2025-09-21 |
| hrrr_profiles |
76151193 |
2016-09-17 |
2026-04-13 |
| iemre_observations |
15745 |
|
|
| nexrad_observations |
7286 |
2019-08-17 |
2024-09-22 |
| propagation_scores |
10543632 |
2026-04-13 |
2026-04-13 |
| rtma_observations |
0 |
|
|
| soundings |
16864 |
1990-06-07 |
2026-03-07 |
| surface_observations |
392444 |
1991-05-03 |
2026-04-13 |
| terrain_profiles |
58554 |
|
|
Data gaps (these should NOT be zero in a healthy prod)
- era5_rows: 0
- hrrr_climatology_rows: 0
- rtma_rows: 0
- metar5_rows: 0
- hrrr_complete_contacts: 44147
- hrrr_pending_contacts: 14413
Contacts by band (≥902 MHz)
| band_mhz |
contacts |
avg_km |
max_km |
| 902 |
36 |
172.000 |
915.000 |
| 1296 |
74 |
259.000 |
1497.000 |
| 2304 |
15 |
91.000 |
348.000 |
| 3456 |
5 |
79.000 |
157.000 |
| 5760 |
4 |
97.000 |
148.000 |
| 10000 |
53698 |
213.000 |
2393.000 |
| 24000 |
3786 |
96.000 |
710.000 |
| 47000 |
764 |
66.000 |
343.000 |
| 75000 |
108 |
62.000 |
289.000 |
| 122000 |
35 |
27.000 |
139.000 |
| 134000 |
5 |
65.000 |
157.000 |
| 142000 |
4 |
47.000 |
79.700 |
| 145000 |
2 |
40.000 |
79.600 |
| 241000 |
15 |
29.000 |
114.400 |
| 288000 |
1 |
1.000 |
1.246 |
| 322000 |
1 |
1.000 |
1.400 |
| 403000 |
1 |
1.000 |
1.400 |
| 411000 |
1 |
0.000 |
0.050 |
Monthly sounding ducting
| month |
soundings |
ducting_pct |
avg_min_grad |
avg_pwat |
| 1 |
95 |
28.400 |
-171.400 |
10.900 |
| 2 |
131 |
29.000 |
-163.100 |
7.900 |
| 3 |
81 |
17.300 |
-148.100 |
9.400 |
| 4 |
107 |
38.300 |
-190.100 |
15.700 |
| 5 |
311 |
51.800 |
-286.400 |
25.600 |
| 6 |
380 |
69.500 |
-355.900 |
32.000 |
| 7 |
292 |
67.800 |
-296.000 |
29.300 |
| 8 |
2572 |
54.900 |
-261.200 |
34.600 |
| 9 |
2335 |
56.200 |
-279.800 |
27.200 |
| 10 |
155 |
57.400 |
-307.100 |
19.300 |
| 11 |
158 |
50.000 |
-256.700 |
12.000 |
| 12 |
140 |
25.700 |
-185.200 |
10.800 |
HRRR native-profile duct distribution (best supportable band)
| band_bin |
profiles |
avg_inv_top_m |
avg_theta_e_jump |
avg_richardson |
| 15-30 GHz |
10 |
2091.000 |
5.900 |
8.690 |
| 30-75 GHz |
4 |
3860.000 |
5.000 |
12.120 |
| 5-15 GHz |
98 |
4408.000 |
25.700 |
12.550 |
| <5 GHz |
1432 |
2097.000 |
5.400 |
18.420 |
| none |
9928 |
11497.000 |
80.500 |
38.270 |
Contact ↔ HRRR per-band Pearson correlations (matched n=1020)
| band_mhz |
n |
rho_pr |
rho_dpc |
rho_pwat |
rho_sref |
rho_grad |
rho_tc |
rho_hpbl |
| 1296.000 |
63.000 |
-0.446 |
0.150 |
-0.004 |
0.321 |
-0.308 |
-0.313 |
-0.383 |
| 10000.000 |
680.000 |
-0.101 |
0.043 |
0.004 |
0.179 |
-0.136 |
-0.109 |
-0.206 |
| 24000.000 |
147.000 |
-0.291 |
-0.180 |
-0.221 |
0.094 |
-0.032 |
-0.299 |
-0.218 |
| 47000.000 |
75.000 |
-0.111 |
0.016 |
0.007 |
0.217 |
-0.175 |
0.089 |
-0.154 |
10 GHz: HPBL bin distance distribution
| bin |
n |
avg_km |
p50_km |
| <200 |
56 |
221.800 |
176.000 |
| 200-500 |
177 |
193.700 |
160.000 |
| 500-1000 |
178 |
153.200 |
126.000 |
| 1000-1500 |
100 |
158.400 |
132.500 |
| 1500-2000 |
95 |
142.900 |
134.000 |
| >=2000 |
74 |
100.300 |
90.000 |
10 GHz: pressure bin distance distribution
| bin |
n |
avg_km |
p50_km |
| <990 |
101 |
212.100 |
134.000 |
| 990-1000 |
538 |
155.400 |
128.000 |
| 1000-1010 |
28 |
164.600 |
115.000 |
| 1010-1020 |
2 |
23.000 |
23.000 |
| >=1020 |
11 |
103.100 |
23.000 |
NEXRAD composite reflectivity vs distance (matched n=102)
Sanity check for the rain-attenuation direction: at rain-sensitive bands higher max_dbz should map to shorter contacts. At 10 GHz the effect should be barely detectable.
10 GHz:
| bin |
n |
avg_km |
p50_km |
| none (<5) |
59 |
155.700 |
143.000 |
| drizzle (5-20) |
7 |
56.400 |
49.000 |
| light (20-30) |
13 |
95.200 |
40.000 |
| moderate (30-45) |
4 |
97.200 |
92.000 |
| heavy (>=45) |
1 |
213.000 |
213.000 |
24 GHz:
| bin |
n |
avg_km |
p50_km |
| none (<5) |
5 |
29.800 |
23.000 |
| drizzle (5-20) |
1 |
49.000 |
49.000 |
| light (20-30) |
5 |
34.000 |
40.000 |
| moderate (30-45) |
1 |
60.000 |
60.000 |
hrrr_native_profiles.best_duct_band_ghz vs distance (matched n=619)
Validates the 1.15× boost in Scorer.score_refractivity/4: contacts where the native duct supports the target band should run longer than those where it does not.
10 GHz:
| bin |
n |
avg_km |
p50_km |
| none |
447.000 |
140.800 |
128.000 |
| <5 GHz |
38.000 |
150.000 |
114.500 |
24 GHz:
| bin |
n |
avg_km |
p50_km |
| none |
97.000 |
47.600 |
32.000 |
| <5 GHz |
3.000 |
56.300 |
60.000 |
47 GHz:
| bin |
n |
avg_km |
p50_km |
| none |
16.000 |
54.700 |
42.000 |
Commercial-link rx_power degradation vs contemporaneous DFW contacts (matched n=0)
No DFW-zone contacts fall inside the commercial_samples date window yet. Expected to stay empty until the Aug/Sep contest season produces contacts that overlap with live SNMP polling.