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):

channelclausebooked underfrom
prepare
The 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.
resetQuantinuum Helios-1E emulator parameters (p_init); arXiv:2511.05465 Table II
memory_coherent
Coherent 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_coherentarXiv: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_z
A 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.
measurearXiv:2511.05465 Table II; Quantinuum Helios-1E emulator parameters (p_meas)
readout_x
A 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
ms
The 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_chainarXiv: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_1q
A 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_1qarXiv:2511.05465 Table II
reset
A 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.
resetQuantinuum Helios-1E emulator parameters (p_init)
crosstalk
Readout 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.
crosstalkarXiv:2511.05465 Sec. III B5 p.10, Fig. 10 (local crosstalk 2.1(1)e-4)
crosstalk_global
Readout 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_globalarXiv:2511.05465 Sec. III B5 p.10 (global crosstalk 4.8(1)e-5, the three adjacent ions taken out)
crosstalk_reset
Reset 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_globalQuantinuum Helios-1E emulator parameters (p_crosstalk_init)
memory
Memory 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.
memoryarXiv: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.

primitivevaluesourcenote
ms_gateerror 0.00079 at n̄ = 0, +9.5e-4 per quantum, 70 µsarXiv:2511.05465 Table II and p.5; arXiv:0810.0670 Sec. 5.2two-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_gateerror 2.5e-05, 5 µsarXiv:2511.05465 Table II; duration arXiv:2003.01293 Table IIIClifford-averaged infidelity 2.5(1)e-5 on Helios; a single-qubit pi/2 takes 5 us on H0
measureerror 1e-06, 120 µsarXiv:2511.05465 Table II; Quantinuum Helios-1E emulator parameters (p_meas); duration arXiv:2003.01293 Table IIIHelios'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
reseterror 0.0005, 10 µsQuantinuum Helios-1E emulator parameters (p_init); arXiv:2511.05465 Table II; duration arXiv:2003.01293 Table IIIpreparation 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
cool300 µsarXiv:2511.05465 p.5the 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_segment94 µs, 0.0075 quantaarXiv:2206.11888 Fig. 1 and Table IIone 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)
split128 µs, 1 quantaarXiv:2003.01293 Table IIsplit: 128 us, < 1 quantum per mode (the bound used as the value)
merge128 µs, 1 quantaarXiv:2003.01293 Table IIcombine: 128 us, < 1 quantum per mode (the bound used as the value)
ion_swap200 µs, 2 quantaarXiv:2003.01293 Table IIphysical 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 quantaarXiv:2206.11888 Table IIno 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 quantaarXiv:2206.11888 Table IIno 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
heating0.029 quanta/msarXiv:2206.11888 Fig. 3 captionR17: 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
species137Ba+ qubit, 171Yb+ coolantarXiv:2511.05465 Sec. II BHelios 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):

channelclausebooked underfrom
readout_z
A 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_x
A 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
ms
The 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_1q
A 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
reset
A wrong reset
after r in resets:
  X_ERROR(min(1 / 2, scale * primitive("reset", "error"))) on ions(r)
reset
idle
Dephasing 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

experimentcodebasisdistanceroundsqubits (data + ancilla)
rep3_r3_zrepetition_d3Z333 + 2
rep5_r5_zrepetition_d5Z555 + 4
rep9_r9_zrepetition_d9Z999 + 8
surface3_r3_zrotated_surface_d3Z339 + 8
surface5_r5_zrotated_surface_d5Z5525 + 24
surface3xz_r3rotated_surface_d3_x2XZ3318 + 16
surface5xz_r5rotated_surface_d5_x2XZ5550 + 48
surface7xz_r7rotated_surface_d7_x2XZ7798 + 96
steanexz_r3steane_x2XZ3314 + 18
shorxz_r3shor_x2XZ2318 + 18
rep3xz_r3rep3_x2XZ136 + 4
rep5xz_r5rep5_x2XZ1510 + 8
bb18xz_r4bb18_x2XZ4436 + 54
bb72seq_r3bb72_seqXZ6372 + 72
bb90seq_r3bb90_seqXZ10390 + 90
steane_r3_zsteaneZ337 + 9
bb18_r4_zbb18Z4418 + 18
bb72_r1_zbb72Z6172 + 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.