feat: visualize beam spread around peaks

This commit is contained in:
Codex
2026-08-28 15:48:02 +09:00
parent 95f2ca19a6
commit b678d1f9c7
8 changed files with 414 additions and 2 deletions
+26
View File
@@ -121,12 +121,38 @@ function finiteMetricSubset(metrics = {}) {
);
}
function beamSpreadForResult(spread) {
if (!spread || typeof spread !== "object") return null;
return {
calibrated: false,
method: spread.method,
halfPowerRatio: Number(spread.halfPowerRatio),
thresholdValue: Number(spread.thresholdValue),
pixelCount: Number(spread.pixelCount),
centroid: spread.centroid.map(Number),
covarianceM2: {
xx: Number(spread.covarianceM2.xx),
xy: Number(spread.covarianceM2.xy),
yy: Number(spread.covarianceM2.yy),
},
ellipse: {
axisScale: spread.ellipse.axisScale,
angleReference: spread.ellipse.angleReference,
majorRmsRadiusM: Number(spread.ellipse.majorRmsRadiusM),
minorRmsRadiusM: Number(spread.ellipse.minorRmsRadiusM),
angleDeg: Number(spread.ellipse.angleDeg),
},
};
}
function peakForResult(peak) {
const result = {
position: peak.position.map(Number),
value: Number(peak.value),
};
if (peak.sourceId) result.sourceId = peak.sourceId;
const beamSpread = beamSpreadForResult(peak.beamSpread);
if (beamSpread) result.beamSpread = beamSpread;
if (Number.isFinite(peak.localizationErrorM)) result.localizationErrorM = peak.localizationErrorM;
if (Number.isFinite(peak.localizationErrorPixels)) {
result.localizationErrorPixels = peak.localizationErrorPixels;