The noise models
How a compiled QCCD program becomes a logical error rate. The program is replayed on the device, which says where every ion is, how hot it is and how long everything takes. Each operation becomes its gate in a stim circuit, and each clause of the model below puts its Pauli noise before or after what it names, with the probability its term computes from the replay and the device's physics. The model IS this text: the grader reads it, and the Evaluation page explains every word of it. The circuit's detectors come from the memory experiment's circuit, so an experiment means the same thing whichever compiler compiled it. A board names its model; changing the physics makes a new model, never an edit to an old one.
qccd-noise@2
It prices what the schedule does, not only the gates. An ion loses memory for every instruction that does not operate on it, whether it idles, rides a rotation or is shuttled, linearly in time and coherently over each idle stretch. A readout disturbs the ions beside it, and every gate starts from the motion cooling leaves behind. Every number is a published measurement on trapped-ion hardware. A per-shuttle error is left out because no experiment reports one: transport is charged through its time and its heating instead. Ion loss is left out too, because no vendor reports a number and it is not a Pauli channel. A Z-basis memory cannot see dephasing, so the boards under this model measure an X and a Z memory together. Used by Surface code memory, distance 5, both bases, Surface code memory, distance 3, both bases, Surface code memory, distance 7, both bases, Steane code memory, both bases, Shor code memory, both bases, Repetition code memory, distance 3, both bases, Repetition code memory, distance 5, both bases, Bivariate bicycle code [[18,4,4]] memory, both bases, Bivariate bicycle code [[72,12,6]] memory, both bases, Bivariate bicycle code [[90,8,10]] memory, both bases.
The clauses, as the text writes them (the whole text; digest sha256:08b78aad27ca):
| channel | clause | booked under | from |
|---|---|---|---|
prepareThe first preparation | after p in preparations: X_ERROR(min(1 / 2, scale * primitive("reset", "error"))) on ions(p) counted as reset Every ion starts in |0>, prepared as a reset is, with a reset's error. | reset | Quantinuum Helios-1E emulator parameters (p_init); arXiv:2511.05465 Table II |
memory_coherentCoherent dephasing over a wait | before o in qubit_operations, i in ions(o): Z_ERROR(min(1 / 2, scale * pow(sin(pi * coherent_rate * waited(i, o) * 1e-6), 2))) on i When an operation reaches an ion, the ion has waited since the last one: a coherent Z rotation of angle 2 pi f T over that wait T, entered as its Pauli twirl. It grows as T squared, so one long wait costs far more than many short ones. | memory_coherent | arXiv:2511.05465 Table II (quadratic memory term, 7(2)e-5 per 55 ms layer squared); Quantinuum Helios-1E emulator parameters (quadratic_dephasing_rate) |
readout_zA wrong readout | before m in measurements where basis(m) = "Z": X_ERROR(min(1 / 2, scale * (1 - primitive("measure", "fidelity")))) on ions(m) counted as measure The readout reports the wrong outcome with probability 1 - F: a flip the measurement then sees. | measure | arXiv:2511.05465 Table II; Quantinuum Helios-1E emulator parameters (p_meas) |
readout_xA wrong readout, in the X basis | before m in measurements where basis(m) = "X": Z_ERROR(min(1 / 2, scale * (1 - primitive("measure", "fidelity")))) on ions(m) counted as measure The same flip, for the experiment's own readout of an X memory. | measure | |
msThe two-ion gate | after g in two_qubit_gates: DEPOLARIZE2(min(15 / 16, scale * ms_error(gate_heat(g), gate_length(g)))) on ions(g) counted as ms_base = ms_error(0, 2), ms_heating = ms_error(gate_heat(g), 2) - ms_error(0, 2), ms_chain = ms_error(gate_heat(g), gate_length(g)) - ms_error(gate_heat(g), 2) The device's gate error law at the heat the pair meets (the hotter ion, plus what ground-state cooling leaves behind) and at the length of the chain in its trap. | ms_base, ms_heating, ms_chain | arXiv:2511.05465 Table II; arXiv:0810.0670 Sec. 5.2 (the slope per quantum); arXiv:2004.04706 Eq. 1 (the chain factor); arXiv:2206.11888 Fig. 3 (the cooling floor) |
gate_1qA one-ion pulse | after g in single_qubit_gates where gate(g) != "VZ" and gate(g) != "I": DEPOLARIZE1(min(3 / 4, scale * (1 - primitive("1q_gate", "fidelity")))) on ions(g) Every pulse R, and every abstract one-qubit Clifford, fails with the device's one-qubit infidelity. The frame change VZ is a phase update, not a pulse: it costs time, never this. | gate_1q | arXiv:2511.05465 Table II |
resetA wrong reset | after r in resets: X_ERROR(min(1 / 2, scale * primitive("reset", "error"))) on ions(r) A reset leaves its ion in |1> instead of |0> with the device's reset error. | reset | Quantinuum Helios-1E emulator parameters (p_init) |
crosstalkReadout crosstalk in the trap | after k in steps where kind(k) = "measure": DEPOLARIZE1(min(3 / 4, scale * crosstalk_near)) on near(k) A measurement disturbs the other ions of its trap. | crosstalk | arXiv:2511.05465 Sec. III B5 p.10, Fig. 10 (local crosstalk 2.1(1)e-4) |
crosstalk_globalReadout crosstalk elsewhere | after k in steps where kind(k) = "measure": DEPOLARIZE1(min(3 / 4, scale * crosstalk_far)) on far(k) And, less, every ion in every other trap. | crosstalk_global | arXiv:2511.05465 Sec. III B5 p.10 (global crosstalk 4.8(1)e-5, the three adjacent ions taken out) |
crosstalk_resetReset crosstalk | after k in steps where kind(k) = "reset": DEPOLARIZE1(min(3 / 4, scale * crosstalk_reset)) on far(k) counted as crosstalk_global A reset disturbs the ions in the other traps far less. | crosstalk_global | Quantinuum Helios-1E emulator parameters (p_crosstalk_init) |
memoryMemory error while the clock runs | after k in steps where duration(k) > 0: Z_ERROR(min(1 / 2, scale * memory_rate * duration(k) * 1e-6)) on {i for i in ions where i not in operated(k)} For as long as a step takes, every ion it does not operate on -- idling, riding a rotation, being carried -- dephases linearly in time. Most of the measured linear term is leakage, which the vendor's stabilizer emulator charges as Z, as here. The experiment's appended readout is not a step of the programme, so it is not charged. | memory | arXiv:2511.05465 Table II and Sec. III B4 (linear memory term); Quantinuum Helios-1E emulator parameters (linear_dephasing_rate) |
The physics it is graded under: qccd-physics@2
A ¹³⁷Ba⁺ QCCD with ¹⁷¹Yb⁺ coolant. Its gate, readout and memory errors are Helios's (Quantinuum, arXiv:2511.05465), and its transport times are Quantinuum's published primitives, in the operating-point table quantinuum. One segment of a design is one zone pitch, 375 µm. A design entered on a board with this physics takes it unless it set its own.
| primitive | value | source | note |
|---|---|---|---|
ms_gate | error 0.00079 at n̄ = 0, +9.5e-4 per quantum, 70 µs | arXiv:2511.05465 Table II and p.5; arXiv:0810.0670 Sec. 5.2 | two-qubit RB infidelity 7.9(2)e-4 on Helios, gate time about 70 us. Error per quantum (derived): Bell-state fidelity 0.993(1) near the ground state and 0.974(1) at n-bar 20(2), the same MS gate (arXiv:0810.0670 Sec. 5.2), i.e. 9.5e-4 per quantum. max_quanta is R7's gate budget, a rule of the boards, not a measurement |
1q_gate | error 2.5e-05, 5 µs | arXiv:2511.05465 Table II; duration arXiv:2003.01293 Table III | Clifford-averaged infidelity 2.5(1)e-5 on Helios; a single-qubit pi/2 takes 5 us on H0 |
measure | error 1e-06, 120 µs | arXiv:2511.05465 Table II; Quantinuum Helios-1E emulator parameters (p_meas); duration arXiv:2003.01293 Table III | Helios's SPAM error, 4.8(6)e-4, is mostly preparation (arXiv:2511.05465 p.7); the vendor's emulator splits it as p_meas 1e-6 and p_init 5e-4, which this block follows (reset.error). 120 us is H0's high-fidelity measurement |
reset | error 0.0005, 10 µs | Quantinuum Helios-1E emulator parameters (p_init); arXiv:2511.05465 Table II; duration arXiv:2003.01293 Table III | preparation error p_init 5e-4 of the vendor's Helios emulator, the bulk of the measured SPAM 4.8(6)e-4; H0 initialises in 10 us |
cool | 300 µs | arXiv:2511.05465 p.5 | the 300 us of cooling Helios applies after a shift, before the next gates. It leaves the floor n-bar 0.05 that qccd-noise@2 adds (arXiv:2206.11888, Fig. 3's Ba-Yb experiment); the replay counts heating from 0 |
shuttle_segment | 94 µs, 0.0075 quanta | arXiv:2206.11888 Fig. 1 and Table II | one zone pitch, 375 um at 4 m/s (derived: 94 us), the speed at which a Ba-Yb crystal gains <= 0.03 quanta per round trip of four such legs (derived: 0.0075 per leg) |
split | 128 µs, 1 quanta | arXiv:2003.01293 Table II | split: 128 us, < 1 quantum per mode (the bound used as the value) |
merge | 128 µs, 1 quanta | arXiv:2003.01293 Table II | combine: 128 us, < 1 quantum per mode (the bound used as the value) |
ion_swap | 200 µs, 2 quanta | arXiv:2003.01293 Table II | physical swap of a two-ion crystal: 200 us, < 2 quanta per mode (the bound used as the value) |
junction_cross (degree 3) | 0 µs, 0 quanta | arXiv:2206.11888 Table II | no extra time or excitation beyond the two 375 um legs it joins: a Ba-Yb crystal crosses at the same 4 m/s, and a whole round trip through it (four legs) adds <= 0.03 quanta, charged on the legs. Measured on an X junction; no Y-junction figure for a Ba-Yb crystal is published |
junction_cross (degree 4) | 0 µs, 0 quanta | arXiv:2206.11888 Table II | no extra time or excitation beyond the two 375 um legs it joins: a Ba-Yb crystal crosses at the same 4 m/s, and a whole round trip through it (four legs) adds <= 0.03 quanta, charged on the legs |
heating | 0.029 quanta/ms | arXiv:2206.11888 Fig. 3 caption | R17: accrues whether or not the ion moves. 29(4) quanta/s, the axial centre-of-mass mode of a Ba-Yb crystal in Quantinuum's junction trap |
species | 137Ba+ qubit, 171Yb+ coolant | arXiv:2511.05465 Sec. II B | Helios pairs each 137Ba+ qubit with one 171Yb+ coolant. T_coh_s (derived) is 1/r for the Helios linear memory rate r = 7.9e-3/s, so the coarse idle estimate of qccd.cost.physical agrees with qccd-noise@2's memory channel |
qccd-noise@1
Gates, readout, reset and a T₂ dephasing on every ion, priced from the device's own physics block; the first preparation is noiseless, and no crosstalk is charged. Used by Repetition code memory, distance 5, Surface code memory, distance 3.
The clauses, as the text writes them (the whole text; digest sha256:e46c03f06242):
| channel | clause | booked under | from |
|---|---|---|---|
readout_zA wrong readout | before m in measurements where basis(m) = "Z": X_ERROR(min(1 / 2, scale * (1 - primitive("measure", "fidelity")))) on ions(m) counted as measure | measure | |
readout_xA wrong readout, in the X basis | before m in measurements where basis(m) = "X": Z_ERROR(min(1 / 2, scale * (1 - primitive("measure", "fidelity")))) on ions(m) counted as measure | measure | |
msThe two-ion gate | after g in two_qubit_gates: DEPOLARIZE2(min(15 / 16, scale * ms_error(gate_heat(g), gate_length(g)))) on ions(g) counted as ms_base = ms_error(0, 2), ms_heating = ms_error(gate_heat(g), 2) - ms_error(0, 2), ms_chain = ms_error(gate_heat(g), gate_length(g)) - ms_error(gate_heat(g), 2) The device's gate error law at the heat the pair meets and the chain in its trap. | ms_base, ms_heating, ms_chain | |
gate_1qA one-ion pulse | after g in single_qubit_gates where gate(g) != "VZ" and gate(g) != "I": DEPOLARIZE1(min(3 / 4, scale * (1 - primitive("1q_gate", "fidelity")))) on ions(g) | gate_1q | |
resetA wrong reset | after r in resets: X_ERROR(min(1 / 2, scale * primitive("reset", "error"))) on ions(r) | reset | |
idleDephasing while the clock runs | after k in steps + readout where idle and duration(k) > 0 and t2 != none: Z_ERROR(min(1 / 2, scale * ((1 - exp(-duration(k) * 1e-6 / t2)) / 2))) on ions Pure dephasing of every ion over every step's duration, against the species' coherence time; the appended readout takes one measurement's time. | idle |
What counts as running the experiment
Before any sampling, the noiseless circuit is checked. Every detector and observable must be deterministic, and must have the parity the source circuit gives it. The second half matters: a program that implements a gate with the opposite sign (an MS pulse of −π/2 for +π/2) keeps every detector deterministic but flips its value, and is caught only there.
The memory experiments
| experiment | code | basis | distance | rounds | qubits (data + ancilla) |
|---|---|---|---|---|---|
rep3_r3_z | repetition_d3 | Z | 3 | 3 | 3 + 2 |
rep5_r5_z | repetition_d5 | Z | 5 | 5 | 5 + 4 |
rep9_r9_z | repetition_d9 | Z | 9 | 9 | 9 + 8 |
surface3_r3_z | rotated_surface_d3 | Z | 3 | 3 | 9 + 8 |
surface5_r5_z | rotated_surface_d5 | Z | 5 | 5 | 25 + 24 |
surface3xz_r3 | rotated_surface_d3_x2 | XZ | 3 | 3 | 18 + 16 |
surface5xz_r5 | rotated_surface_d5_x2 | XZ | 5 | 5 | 50 + 48 |
surface7xz_r7 | rotated_surface_d7_x2 | XZ | 7 | 7 | 98 + 96 |
steanexz_r3 | steane_x2 | XZ | 3 | 3 | 14 + 18 |
shorxz_r3 | shor_x2 | XZ | 2 | 3 | 18 + 18 |
rep3xz_r3 | rep3_x2 | XZ | 1 | 3 | 6 + 4 |
rep5xz_r5 | rep5_x2 | XZ | 1 | 5 | 10 + 8 |
bb18xz_r4 | bb18_x2 | XZ | 4 | 4 | 36 + 54 |
bb72seq_r3 | bb72_seq | XZ | 6 | 3 | 72 + 72 |
bb90seq_r3 | bb90_seq | XZ | 10 | 3 | 90 + 90 |
steane_r3_z | steane | Z | 3 | 3 | 7 + 9 |
bb18_r4_z | bb18 | Z | 4 | 4 | 18 + 18 |
bb72_r1_z | bb72 | Z | 6 | 1 | 72 + 72 |
The data readout after the last round is added by the grader, where the ions are, with the device's measurement error; an XZ experiment reads each patch in its own basis. The reference compiler's rotation cannot measure an ion that rides the loop. This is an approximation: the readout's own transport is not charged.