NV-Centre 20 T Magnetometry

July 13, 2026 · View on GitHub

SPDX-License-Identifier: AGPL-3.0-or-later

scpn_quantum_control.sensing.nv_magnetometry_20T is a simulation-only nitrogen-vacancy (NV) magnetometry response model valid into the 20 T regime. The ground-state spin-1 Hamiltonian is diagonalised exactly, so the optically-detected magnetic-resonance (ODMR) frequencies, the shot-noise DC sensitivity, and a noisy-spectrum field-calibration loop remain valid past the ground-state level anti-crossing (GSLAC, ~102 mT axial) and into the high-field regime where the electron Zeeman term dominates the zero-field splitting. Hardware calibration against a NIST-traceable reference is a separate, hardware-gated workstream (MIF_NV_HARDWARE_CI=1).

Scope: this is the package's single implemented sensing modality. The complementary QFI-criticality readiness surface (docs/quantum_sensing.md) estimates coupling-parameter sensitivity of the synchronisation ground state; no further sensing modalities are implemented or claimed.

Spin Hamiltonian

H = D (Sz² - 2/3) + E (Sx² - Sy²) + gamma_e B·S, with D = 2.870 GHz, gamma_e = 28.024951 GHz/T (Doherty et al., Physics Reports 528, 1, 2013).

from scpn_quantum_control.sensing import (
    NVCenter,
    nv_ground_state_hamiltonian,
    odmr_resonances_hz,
)

nv = NVCenter()
hamiltonian = nv_ground_state_hamiltonian(nv, field_tesla=20.0)
lo, hi = odmr_resonances_hz(nv, field_tesla=20.0)   # (557.6 GHz, 563.4 GHz)

The two ODMR transitions behave as:

regimelower resonanceupper resonance
zero fieldDD
axial, below GSLACD - gamma_e BD + gamma_e B
above GSLAC / high fieldgamma_e B - DD + gamma_e B

The upper resonance is D + gamma_e B for every field magnitude, which is what makes the field recovery unambiguous.

Sensitivity

cw_odmr_dc_sensitivity_t_per_sqrt_hz returns the shot-noise-limited CW-ODMR DC sensitivity eta = P_F · delta_nu / (gamma_e · C · sqrt(R)) (Barry et al., Reviews of Modern Physics 92, 015004, 2020), with the Lorentzian prefactor P_F = 4 / (3 sqrt(3)).

Field calibration

simulate_odmr_measurement produces a noisy spectrum; calibrate_field_from_odmr recovers the field from the deepest dip in a resolved scan window (the upper resonance, B = (f_upper - D) / gamma_e). The scan must resolve the linewidth (a few samples per FWHM), as a real field-tracking loop does. Measured recovery across 0.07–20 T is ~2 µT (benchmark results/nv_magnetometry_benchmark.json).

Acceleration

The ODMR Lorentzian-dip spectrum dispatches to a Rust kernel that is bit-true with the NumPy reference (verified over random inputs).

Measured per-call wall-time (release build, median of 7, scripts/bench_nv_magnetometry.py, functional_non_isolated):

grid sizeNumPyRustspeed-up
1 02412.1 µs2.70 µs4.5×
8 19235.5 µs18.1 µs2.0×
65 536247.7 µs261.7 µs0.95×
262 1445 160 µs730 µs7.1×

The Rust kernel is faster on small and large grids; NumPy's vectorisation is competitive at the mid range. Both paths are kept and measured honestly.

Consumers

SCPN-MIF-CORE may consume the model for B-dot probe cross-validation in the FRC compression environment; this is not on the critical path before MIF 0.5.0.