diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index b9d7c5f3b661..0fde7b08a640 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -5,7 +5,7 @@ import { formatMetricValue } from '../../utils/formatMetricValue'; // Render calibration data as a table export const CalibrationTable = (props) => { - const { calibrationData, qubitSwitch, couplerSwitch, qubitMetricOptions, couplerMetricOptions } = props; + const { calibrationData, qubitSwitch, qubitMetricOptions, couplerMetricOptions } = props; if (!calibrationData) return
No calibration data available
; const allMetrics = Object.keys(calibrationData); @@ -13,20 +13,44 @@ export const CalibrationTable = (props) => { // Get all unique qubit/coupler IDs const allIds = new Set(); + const idMap = {}; // Map normalized IDs to actual IDs in data allMetrics.forEach(metric => { Object.keys(calibrationData[metric]).forEach(id => { - if (id !== 'statistics' && ((qubitSwitch && !id.includes("__")) || (couplerSwitch && id.includes("__")))) { - allIds.add(id); + if (id !== 'statistics' && ((qubitSwitch && !id.includes("__")) || (!qubitSwitch && id.includes("__")))) { + // Normalize the ID + const match = id.match(/QB(\d+)__QB(\d+)/); + let normalizedId = id; + if (match) { + const [, num1, num2] = match; + const smaller = Math.min(parseInt(num1), parseInt(num2)); + const larger = Math.max(parseInt(num1), parseInt(num2)); + normalizedId = `QB${smaller}__QB${larger}`; + } + allIds.add(normalizedId); + idMap[normalizedId] = id; // Store the actual ID } }); }); - const sortedIds = Array.from(allIds); - + var sortedIds; + if (qubitSwitch){ + sortedIds = Array.from(allIds).sort((a, b) => { + const numA = parseInt(a.replace('QB', '')); + const numB = parseInt(b.replace('QB', '')); + return numA - numB; + }); + } else { + sortedIds = Array.from(allIds).sort((a, b) => { + const [a1, a2] = a.match(/QB(\d+)__QB(\d+)/).slice(1).map(Number); + const [b1, b2] = b.match(/QB(\d+)__QB(\d+)/).slice(1).map(Number); + return a1 - b1 || a2 - b2; + }); + } // Filter out metrics that have only N/A values for the filtered IDs const metrics = allMetrics.filter(metric => { return sortedIds.some(id => { - const data = calibrationData[metric][id]; + const actualId = idMap[id]; + const data = calibrationData[metric][actualId]; const value = data?.value; return value !== null && value !== undefined; }); @@ -53,9 +77,23 @@ export const CalibrationTable = (props) => {