diff --git a/webapp/index.html b/webapp/index.html
index aec4edf..8fad0bd 100644
--- a/webapp/index.html
+++ b/webapp/index.html
@@ -134,7 +134,10 @@
-
Metrics Comparison: All Scenarios
+
Metrics vs PhenoCam (fusion scenarios)
+
+ R² (variance explained), nRMSE (RMSE normalised by PhenoCam σ), NSE_PC (Nash–Sutcliffe vs PhenoCam). Other metrics remain in metrics.json.
+
@@ -605,8 +608,8 @@
const scenarios = ["aggressive_sigma20", "aggressive_sigma30", "nonaggressive_sigma20", "nonaggressive_sigma30"];
const scenarioNames = ["Aggressive σ20", "Aggressive σ30", "Non-aggressive σ20", "Non-aggressive σ30"];
- const metrics = ["pearson_r", "r_squared", "rmse", "mae", "nrmse", "nse_pc"];
- const metricLabels = { pearson_r: "r", r_squared: "R²", rmse: "RMSE", mae: "MAE", nrmse: "nRMSE", nse_pc: "NSE_PC" };
+ const metrics = ["r_squared", "nrmse", "nse_pc"];
+ const metricLabels = { r_squared: "R²", nrmse: "nRMSE", nse_pc: "NSE_PC" };
let html = "";
html += "";
@@ -621,7 +624,12 @@
html += `| S2 (baseline) | `;
metrics.forEach(m => {
const val = m === "nse_pc" ? (data.nse_pc ?? data.nse) : data[m];
- const fmt = val !== null && val !== undefined ? (m === "pearson_r" || m === "r_squared" || m === "nse_pc" ? val.toFixed(3) : val.toFixed(4)) : "—";
+ const fmt =
+ val !== null && val !== undefined
+ ? m === "nrmse"
+ ? val.toFixed(4)
+ : val.toFixed(3)
+ : "—";
html += `${fmt} | `;
});
html += "
";
@@ -635,7 +643,12 @@
html += `${scenarioNames[i]} | `;
metrics.forEach(m => {
const val = m === "nse_pc" ? (data.nse_pc ?? data.nse) : data[m];
- const fmt = val !== null && val !== undefined ? (m === "pearson_r" || m === "r_squared" || m === "nse_pc" ? val.toFixed(3) : val.toFixed(4)) : "—";
+ const fmt =
+ val !== null && val !== undefined
+ ? m === "nrmse"
+ ? val.toFixed(4)
+ : val.toFixed(3)
+ : "—";
html += `${fmt} | `;
});
html += "";
@@ -646,7 +659,7 @@
// Add phenocam stats info if available
if (metricsData.phenocam_stats) {
const stats = metricsData.phenocam_stats;
- html += `PhenoCam stats: mean=${stats.mean.toFixed(3)}, std=${stats.std.toFixed(3)}, n=${stats.n_samples}
`;
+ html += `PhenoCam GCC samples (ground truth): n = ${stats.n_samples}
`;
}
container.innerHTML = html;
diff --git a/webapp/metrics.html b/webapp/metrics.html
index 9cc23b4..1dab574 100644
--- a/webapp/metrics.html
+++ b/webapp/metrics.html
@@ -18,7 +18,6 @@
th, td { border: 1px solid #ccc; padding: 6px 8px; text-align: left; }
th { background: #f5f5f5; }
td.num { text-align: right; font-variant-numeric: tabular-nums; }
- .compare-note { font-size: 12px; color: #555; margin: 0 0 8px 0; max-width: 720px; }
.section-note { font-size: 12px; color: #555; margin: -6px 0 8px 0; max-width: 720px; line-height: 1.45; }
.section-note code { background: #f1f1f1; padding: 1px 4px; border-radius: 3px; font-size: 11px; }
.intro { font-size: 13px; color: #333; background: #fafafa; border: 1px solid #e5e5e5;
@@ -50,10 +49,22 @@