All parameters live on NoiseModelParameters and are named after the symbols in the paper’s noise-model appendix. See docs/channel_reference.md for the notation-to-identifier convention and for what each channel means.
Per-encoding parameters are stored flat with a trailing encoding tag:
| Tag | Encoding |
|---|---|
_c |
174Yb optical clock qubit (isotope="174", qubit_type="gm") |
_g |
171Yb ground-manifold nuclear-spin qubit ("171", "g") |
_m |
171Yb metastable-manifold nuclear-spin qubit ("171", "m") |
Use for_qubit() to read them grouped, with the tag dropped:
params = NoiseModelParameters()
v = params.for_qubit("171", "m")
v.p_1 # == params.p_1_m
v.gate_time # == params.gate_time_m
The view is built on demand, so it always reflects the current values. A field that reads 0.0 means the channel does not fire for that encoding — either it is physically absent (p_flip_m on the 174Yb clock qubit) or it has been calibrated away — so the usual if p > 0: guard works unchanged.
Rates that are properties of the atom rather than of the encoding are stored once, as shared constants.
| Constructor | Meaning |
|---|---|
NoiseModelParameters() |
the paper’s tabulated values |
NoiseModelParameters.paper_defaults() |
identical to the above, explicit |
NoiseModelParameters.legacy_defaults() |
the legacy parameter set that predates this library |
legacy_defaults() exists so that numbers produced before this library existed can be reproduced. It restores parameters only; formula-level corrections stay in place, in particular the factor of two in t_move = 2 sqrt(l / a).
| Parameter | Paper | Default | Meaning |
|---|---|---|---|
gamma_Ryd |
Γ_Ryd |
2.0e4 s⁻¹ |
total Rydberg decay rate, 1/50 µs |
ryd_branching |
— | {LOSS_r: 0.51, DECAY_rg: 0.42, DECAY_rm: 0.07} |
branching of Γ_Ryd |
gamma_gL |
Γ_gL |
1/30 s⁻¹ |
ground-manifold trap loss |
gamma_mL |
Γ_mL |
1/30 s⁻¹ |
metastable-manifold trap loss |
gamma_Z_gm |
1/T_2^(gm) |
1/5 s⁻¹ |
171Yb clock-transition coherence. Currently inert — see below |
Γ_mg is not shared: it is per encoding, because the effective metastable lifetime depends on the trap depth the encoding operates in. See the coherent-control table below.
gamma_Z_gm is set to its tabulated value but no circuit path reads it, so ZERR_gm never reaches a Stim circuit. The channel exists in the Kraus layer (Kraus1Q_171m.ZERR_gm and friends) and can be used directly from there. What is unsettled is when it should fire in a circuit: an idling 171Yb qubit sits wholly in one manifold, so there is no ground–metastable superposition to dephase, and the windows where such a superposition does exist are the clock pulses, which already carry DEP1_gm.
| Parameter | Paper | Default | Meaning |
|---|---|---|---|
l_site |
l_site |
3e-6 m |
site spacing |
l_zone |
l_zone |
100e-6 m |
computation-to-readout zone separation |
t_hand |
t_hand |
200e-6 s |
handover time |
a |
a |
5500 m s⁻² |
transport acceleration |
Transport time is t_move(l) = 2 sqrt(l / a), and the one-way readout distance is l = d · l_site + l_zone for code distance d.
— marks a parameter the encoding does not define. Where the legacy column is blank the two presets agree.
| Parameter | Paper | _c |
_g |
_m |
legacy |
|---|---|---|---|---|---|
p_1_* |
p_1^(c/g/m) |
1e-4 |
1e-4 |
1e-4 |
2e-3 / 1e-3 / 1e-3 |
p_2_* |
p_2^(c/m) |
1e-3 |
1e-3 |
1e-3 |
2e-3 (all) |
p_2_dual |
p_2^(dual) |
1e-3 (cross-encoding) |
2e-3 |
||
p_1_gm |
p_1^(gm) |
— | 1e-4 (shared with _m) |
1e-4 |
2e-3 |
p_m_g_gate |
p_(m→g)^(gate) |
— | 1e-3 (shared) |
1e-3 |
|
gamma_mg_* |
Γ_mg |
1/20 |
1 |
1 |
_c was 1 |
p_1_gm and p_m_g_gate are 171Yb clock-transition channels stored once and exposed on both 171Yb encodings, because the g qubit reaches the Rydberg state through the same clock pulse. DEP1_gm reaches a g qubit only while that pulse is driving it into the metastable manifold, so it is emitted with the metastable rates for both encodings.
gamma_mg_* is per encoding because the effective metastable lifetime depends on the trap depth. The clock qubit idles in a shallow trap and so uses the natural 3P0 lifetime of 20 s; the 171Yb channels are reached only through the clock pulse and the readout shelving step, both of which run in the deep imaging trap, and keep the scattering-dominated 1 s⁻¹. The clock qubit’s value must also satisfy T_2 ≤ 2 T_1, since amplitude damping at T_1 alone already decoheres at 2 T_1; this is the one parameter legacy_defaults() does not restore, because the legacy 1 s⁻¹ against T_2^(c) = 5 s does not.
| Parameter | Paper | _c |
_g |
_m |
legacy |
|---|---|---|---|---|---|
p_meas_* |
p_meas |
1e-4 |
1e-4 |
1e-4 |
1e-3 / 1e-3 / 1/300 |
q_BB_* |
q_BB |
0.5 |
0.5 |
0.5 |
|
p_g_L_meas_* |
p_(g→L)^(meas) |
1e-3 |
1e-3 |
1e-3 |
|
p_flip_g_* |
p_flip^(g) |
— | 1e-3 |
1e-3 |
|
p_depol_meas_idling_* |
— | — | 0.0 |
0.0 |
q_BB_* is the probability of assigning the ambiguous bright–bright readout record to |0>. The twirled p_Z of the MERR channel scales as (2 q_BB − 1)², so it vanishes at the default even split.
p_depol_meas_idling_* is not part of the paper’s channel set. It depolarises an idle 171Yb qubit while 174Yb is measured in place, and is held at zero.
| Parameter | Paper | _c |
_g |
_m |
legacy |
|---|---|---|---|---|---|
p_g_L_reset_* |
p_(g→L)^(reset) |
1e-3 |
1e-3 |
— | _g was 0.0 |
p_m_L_reset_m |
p_(m→L)^(reset) |
— | — | 6e-3 |
1e-3 |
p_flip_m_m |
p_flip^(m) |
— | — | 1e-3 |
| Parameter | Paper | _c |
_g |
_m |
legacy |
|---|---|---|---|---|---|
gamma_Z_* |
1/T_2^(c/g/m) |
1/5 |
1/10 |
1/10 |
|
gamma_X_* |
1/T_1^(g/m) |
— | 1/200 |
1/200 |
0.0 |
Note the dephasing convention for the 171Yb encodings. ZERR_g and ZERR_m are emitted as Z_ERROR(1 − exp(−t/T_2)), following the paper’s channel definition K_1 = √(p_Z) Z. A Pauli-Z channel of probability p maps the transverse Bloch component by 1 − 2p, so the effective coherence time is about T_2/2 rather than T_2: at T_2^(m) = 10 s and t = 1 ms the emitted channel implies T_2,eff = 5.0 s. Set gamma_Z_g / gamma_Z_m accordingly if you want the nominal value to be the effective one.
ZERR_c is not affected. It acts on the same two levels as DECAY_mg, so the two are twirled together into a single PAULI_CHANNEL_1 whose p_Z = p_2(t)/2 − p_1(t)/4 already carries the factor of a half, reproducing exp(−t/T_2^(c)) exactly.
| Parameter | Paper | _c |
_g |
_m |
|---|---|---|---|---|
p_hand_* |
p_(g→L)^(hand), p_(m→L)^(hand) |
1e-3 |
1e-3 |
1e-3 |
The paper splits handover loss by manifold; this library splits it by encoding, which is the finer granularity.
Seconds. Keys of the gate_time_c / gate_time_g / gate_time_m dicts.
| Key | Paper | _c |
_g |
_m |
legacy |
|---|---|---|---|---|---|
t_1Q |
t_1Q^(c/g/m) |
100e-6 |
1e-6 |
1e-6 |
100e-6 for _g / _m |
t_1Q_gm |
t_1Q^(gm) |
— | 10e-6 |
— | 100e-6 |
t_2Q |
t_2Q |
300e-9 |
300e-9 |
300e-9 |
|
t_reset |
t_reset |
2e-3 |
2e-3 |
2e-3 |
|
t_read |
t_read |
1e-3 |
1e-3 |
1e-3 |
save_noise_params_to_file / load_noise_params_from_file use a flat name: value text format, with slash notation for the nested dicts:
# 174Yb clock qubit
p_1_c: 0.0001
gate_time_c/t_1Q: 0.0001
set_parameters accepts the same slash notation and rejects unknown names:
params.set_parameters(p_1_c=3e-4, gamma_mg=1.5)
params.set_parameters(**{"gate_time_c/t_1Q": 200e-6})
rescale_error_params(scale) multiplies every parameter whose name starts with p_ or gamma_, leaving ratios (q_BB_*), geometry (l_site, l_zone, a) and times (t_hand, gate_time_*) untouched.
| Legacy | Here |
|---|---|
p_gm_174 |
p_1_c |
p_g_171 |
p_1_g |
p_m_171 |
p_1_m |
p_gm_171 |
p_1_gm |
p_2_dep |
p_2_c, p_2_g, p_2_m, p_2_dual |
p_MG_gate_171m |
p_m_g_gate |
p_MERR_174 |
p_meas_c |
p_MERR |
p_meas_g |
p_MERR_171m |
p_meas_m |
q_MERR_174, q_MERR_171m |
q_BB_c, q_BB_m |
p_GLOSSR_174/171g/171m |
p_g_L_meas_c/_g/_m |
p_GLOSSP_174/171g |
p_g_L_reset_c/_g |
p_MLOSSP_171 |
p_m_L_reset_m |
p_X_g_171 |
p_flip_g_g |
p_X_meas_171m |
p_flip_g_m |
p_X_motional_171 |
p_flip_m_m |
p_handover_loss_174/171g/171m |
p_hand_c/_g/_m |
gamma_Zidl_174/171g/171m |
gamma_Z_c/_g/_m |
gamma_MG_174 |
gamma_mg_c |
gamma_MG_idl_171m |
gamma_mg_g, gamma_mg_m |
gamma_RL |
gamma_Ryd |
RL_ratio |
ryd_branching |
site_separation, zone_separation |
l_site, l_zone |
handover_time, acceleration |
t_hand, a |
gate_time_174/171g/171m |
gate_time_c/_g/_m |
gate_1q, gate_1q_clock, gate_2q, reset, measure |
t_1Q, t_1Q_gm, t_2Q, t_reset, t_read |
p_X_mr_174, p_X_mr_171 |
removed with the XERR_mr channel |
alpha |
removed; MERR p_Z uses ((2 q_BB − 1)²/16) p_meas² |
T_2_174 |
removed; nothing read it |