NV-Centre 20 T Magnetometry¶
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).
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.nv_magnetometry_20T import NVCenter, odmr_resonances_hz
nv = NVCenter()
lo, hi = odmr_resonances_hz(nv, field_tesla=20.0) # (557.6 GHz, 563.4 GHz)
The two ODMR transitions behave as:
| regime | lower resonance | upper resonance |
|---|---|---|
| zero field | D |
D |
| axial, below GSLAC | D - gamma_e B |
D + gamma_e B |
| above GSLAC / high field | gamma_e B - D |
D + 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 size | NumPy | Rust | speed-up |
|---|---|---|---|
| 1 024 | 12.1 µs | 2.70 µs | 4.5× |
| 8 192 | 35.5 µs | 18.1 µs | 2.0× |
| 65 536 | 247.7 µs | 261.7 µs | 0.95× |
| 262 144 | 5 160 µs | 730 µs | 7.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.