fixed error

This commit is contained in:
ayzen
2025-10-20 21:24:01 +03:00
parent f5c63da1c6
commit 72b1b25dc1

View File

@ -333,7 +333,7 @@ export class BScanClickHandler {
const sweep = sweepHistory[sweepIndex]; const sweep = sweepHistory[sweepIndex];
// Use same logic as BScanProcessor: calibrated_data or sweep_data // Use same logic as BScanProcessor: calibrated_data or sweep_data
const hasCalibrated = sweep.calibrated_points && sweep.calibrated_points.length > 0; const hasCalibrated = this.hasCalibratedSweepData(sweep);
const dataToProcess = hasCalibrated ? sweep.calibrated_points : (sweep.sweep_points || []); const dataToProcess = hasCalibrated ? sweep.calibrated_points : (sweep.sweep_points || []);
const referencePoints = sweep.reference_points || []; const referencePoints = sweep.reference_points || [];
const openAirEnabled = config.open_air || false; const openAirEnabled = config.open_air || false;
@ -358,6 +358,90 @@ export class BScanClickHandler {
); );
} }
/**
* Determine if sweep contains calibrated data that differs from raw points.
* @param {Object} sweep - Sweep data entry from processor state
* @returns {boolean} True when calibrated points appear to be applied
*/
hasCalibratedSweepData(sweep) {
const calibratedPoints = Array.isArray(sweep?.calibrated_points) ? sweep.calibrated_points : [];
if (calibratedPoints.length === 0) {
return false;
}
const rawPoints = Array.isArray(sweep?.sweep_points) ? sweep.sweep_points : [];
if (rawPoints.length === 0 || calibratedPoints.length !== rawPoints.length) {
return true;
}
const tolerance = 1e-9;
let comparablePoints = 0;
for (let i = 0; i < calibratedPoints.length; i++) {
const calibrated = this._extractComplexPoint(calibratedPoints[i]);
const raw = this._extractComplexPoint(rawPoints[i]);
if (!this._canCompareComplexPoints(calibrated, raw)) {
continue;
}
comparablePoints++;
if (!this._areComplexPointsClose(calibrated, raw, tolerance)) {
return true;
}
}
return false;
}
_extractComplexPoint(point) {
if (!point) {
return { real: NaN, imag: NaN };
}
if (Array.isArray(point)) {
return {
real: this._toFiniteNumber(point[0]),
imag: this._toFiniteNumber(point[1])
};
}
if (typeof point === 'object') {
const realCandidate = point.real ?? point.r ?? point.Re ?? point.re;
const imagCandidate = point.imag ?? point.i ?? point.Im ?? point.im;
return {
real: this._toFiniteNumber(realCandidate),
imag: this._toFiniteNumber(imagCandidate)
};
}
return { real: NaN, imag: NaN };
}
_toFiniteNumber(value) {
if (typeof value === 'number') {
return Number.isFinite(value) ? value : NaN;
}
if (typeof value === 'string' && value.trim().length > 0) {
const parsed = Number(value);
return Number.isFinite(parsed) ? parsed : NaN;
}
return NaN;
}
_canCompareComplexPoints(a, b) {
return Number.isFinite(a.real) && Number.isFinite(a.imag) && Number.isFinite(b.real) && Number.isFinite(b.imag);
}
_areComplexPointsClose(a, b, tolerance) {
const realScale = Math.max(1, Math.abs(a.real), Math.abs(b.real));
const imagScale = Math.max(1, Math.abs(a.imag), Math.abs(b.imag));
return Math.abs(a.real - b.real) <= tolerance * realScale &&
Math.abs(a.imag - b.imag) <= tolerance * imagScale;
}
/** /**
* Show modal with sweep plot * Show modal with sweep plot
* @param {number} sweepNumber - Sweep number (1-based) * @param {number} sweepNumber - Sweep number (1-based)