feat: harden end-to-end simulation workflow
This commit is contained in:
@@ -5,6 +5,7 @@ export const RESULT_METRIC_KEYS = Object.freeze([
|
||||
"energyInsideTruthRatio",
|
||||
"precision",
|
||||
"recall",
|
||||
"mainLobeWidthM",
|
||||
]);
|
||||
|
||||
const RESULT_METRIC_KEY_SET = new Set(RESULT_METRIC_KEYS);
|
||||
@@ -457,6 +458,8 @@ export function evaluateDasBand(options) {
|
||||
minimumPeakDistanceM,
|
||||
sidelobeExclusionRadiusM,
|
||||
halfPowerRatio,
|
||||
dynamicRangeDb,
|
||||
maximumDetections,
|
||||
},
|
||||
metrics: {
|
||||
peakToSidelobeDb: peakToSidelobeDb(
|
||||
@@ -470,6 +473,7 @@ export function evaluateDasBand(options) {
|
||||
energyInsideTruthRatio: energyInsideRatio(values, scan, truths, truthRadiusM, globalPeak?.value ?? 0),
|
||||
precision,
|
||||
recall,
|
||||
mainLobeWidthM: mainLobe?.equivalentDiameterM ?? 0,
|
||||
},
|
||||
diagnostics: {
|
||||
mainLobe,
|
||||
@@ -513,11 +517,30 @@ export function exportBandEvaluation(evaluation, options = {}) {
|
||||
if (match) {
|
||||
resultPeak.sourceId = match.sourceId;
|
||||
resultPeak.localizationErrorM = match.localizationErrorM;
|
||||
const resolution = evaluation.diagnostics?.gridResolutionM;
|
||||
if (resolution?.x > 0 && resolution?.y > 0) {
|
||||
resultPeak.localizationErrorPixels = Math.hypot(
|
||||
(match.peak.position[0] - match.truthPosition[0]) / resolution.x,
|
||||
(match.peak.position[1] - match.truthPosition[1]) / resolution.y,
|
||||
);
|
||||
}
|
||||
}
|
||||
return resultPeak;
|
||||
});
|
||||
return {
|
||||
peaks,
|
||||
metrics: selectResultMetrics(evaluation, options.metricNames ?? RESULT_METRIC_KEYS),
|
||||
evaluation: {
|
||||
version: "1.0.0",
|
||||
truthRadiusM: evaluation.parameters.truthRadiusM,
|
||||
matchToleranceM: evaluation.parameters.matchToleranceM,
|
||||
detectionThresholdRatio: evaluation.parameters.detectionThresholdRatio,
|
||||
detectionThresholdValue: evaluation.parameters.detectionThresholdValue,
|
||||
minimumPeakDistanceM: evaluation.parameters.minimumPeakDistanceM,
|
||||
sidelobeExclusionRadiusM: evaluation.parameters.sidelobeExclusionRadiusM,
|
||||
halfPowerRatio: evaluation.parameters.halfPowerRatio,
|
||||
dynamicRangeDb: evaluation.parameters.dynamicRangeDb,
|
||||
maximumDetections: evaluation.parameters.maximumDetections,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user