Skip to content

Releases: CASPEr-Night/spin-noise-network

v0.6.0

Choose a tag to compare

@jwbquantum jwbquantum released this 03 Sep 14:13

What's new

Carrier-follow spectral tiling (the sweep, upgraded). The receiver window now moves with every lock-shift step, so the field-stepped sweep is no longer limited by the ±3.45 kHz acquisition band: up to 15 steps spanning ±25 ppm of B₀, each still verified by measurement. Re-lock jumps are capped at a gamma-scaled safe hop (autolock capture is a field quantity — a "4 kHz" hop on a ¹³C axis would be a ~16 kHz field jump), with multi-hop instructions for ladder entry and return. The pulse-pair estimator's sign convention is now resolved deterministically at baseline by an automatic carrier-displacement 1D (expno 29, role sweep_signcal) instead of being inferred from the operator's first step.

Autostep (Tier 2, opt-in). xpy spin_noise_run sweep autostep lets the script actuate the lock-shift steps itself through the documented edlock-table + lopo/lock chain: it clones the session solvent's row, detects the table's shift column once per console (edlock GUI as oracle, cached with a layout fingerprint), and walks the ladder in safe hops with lock-off automation via documented AU macros — operator-verified once at setup. The facility's lock table is snapshotted and restored on every path, including a crash-handler cleanup and recovery from a previous run's leftovers. Every failure falls back to the v0.5 operator dialogs for that step; measured-not-target is unchanged. First live use per console family is gated by docs/autostep_bench_checklist.md — the actuation chain is documented Bruker behavior but not yet hardware-verified by us.

¹⁹F / X-nucleus sessions. The orchestrator inherits the observed nucleus and carrier from the operator's template, records observe_nucleus/observe_freq_mhz with h1_freq_mhz as the ¹H-equivalent field coordinate (one consistent IUPAC-ratio gamma table), and gamma-scales the field-unit arithmetic. docs/f19_pilot.md is the site checklist — a C₆F₆ tube on any F-capable probe adds proton-coupling mass points essentially for free.

Lock-channel metadata. LOCNUC/BF2/SFO2 recorded per session; per-step lock-shift ppm, carrier, local deviation, actuation basis, and lock state recorded in field_sweep.

Analysis riders (facility_report). A persistent-line catalog classifies every narrow feature across carrier shifts as spin line / window-fixed (receiver spur) / absolute-fixed (RFI, clock spur — or candidate) — the groundwork for the dark-photon line search and the spur catalog. A native-resolution sub-virial pass ships as infrastructure (it states its own no-chirp-templates caveat). Every report now carries the axion-mass coordinate and the axial-vector conversion factor. Carrier-follow bundles are fitted in the correct local frame, sign-unresolved substituted targets are labeled target_confirmed_unsigned with an honesty line, and v0.5-shape bundles analyze exactly as before.

Contract and schema

Schema stays 2.0 — all additions are optional keys, documented in place, including the one sanctioned exception to the measured-never-target rule (sign-unresolved steps within 30 Hz). Role enums gain sweep_signcal. Old bundles remain valid; the uploader selftest passes v0.5 and v0.6 shapes.

Reviewed and tested

Two adversarial review passes (feature review: 24 findings fixed before commit; release review: autostep hop discipline, crash-safe table handling, honest lock states, safe dialog defaults). Static checks gained a Jython-2.2 grammar guard (AST-level — a single stray conditional expression would brick TopSpin 2.x consoles) and an IUPAC gamma-ratio consistency check. Full battery green: harness ×3 (including an autostep mock-fallback variant), sweep-report tests for both bundle generations, upload integration, pack round-trip.

Status, stated plainly: desk-tested against synthetic and archival data; the carrier-follow sweep and autostep have not yet run a live acquisition — first on-instrument pilots are the next milestone, and autostep additionally requires the bench checklist per console family.

v0.5.2

Choose a tag to compare

@jwbquantum jwbquantum released this 31 Aug 21:03

The uploader gains --doctor, an install-time self-diagnosis (Python, config, schema, network path with DNS/firewall/TLS-trust classification, and a system-clock check against server time — no bundle needed), and the new docs/TROUBLESHOOTING.md indexes failure modes by symptom with exact error texts. The AI-agent runbook now verifies installs with the doctor. No schema or protocol changes.

v0.5.1

Choose a tag to compare

@jwbquantum jwbquantum released this 31 Aug 20:18

Install-hardening point release: fixes the most likely first-contact failure modes found in a systematic failure sweep — overnight bundling on large datasets, unattended-session auto-start, honored hardware-command failures, same-day rerun protection, a safer field-sweep confirmation, an uploader that refuses rehearsal bundles and diagnoses TLS/clock problems, and louder, more actionable packer errors on every vendor path. No schema or protocol changes; v0.5.0 bundles remain fully valid.

v0.5.0

Choose a tag to compare

@jwbquantum jwbquantum released this 31 Aug 17:17

Frequency metrology, two new acquisition modes, and an install runbook for AI coding agents. New in this release:

  • Pulse-program-derived clock audit: the facility report now re-derives every clock-audit block's expected duration from the pulse-program text stored in the bundle plus the acqus parameters — every programmed delay, pulse, and the per-scan pre-acquisition delay DE are accounted for, with a deliberately conservative parser that falls back (flagged, per block) on anything it cannot model with certainty, and a recorded-model comparison fit alongside. Also fixes acqus parsing on real console files (DBL_MAX sentinels, JCAMP array headers).
  • rdopt mode (optional, off by default): an automated probe-tuning scan for maximum radiation damping — atma at a ladder of offsets, small-flip FID decay-rate measurement at each, session continues at the winner, P90 recalibrated at the chosen tuning. Needs an ATM probe.
  • sweep mode (optional, off by default): field-stepped noise blocks — every step is a distinct axion mass point, so one overnight session locally scans several adjacent masses. Steps are set through the ²H lock reference (1 ppm = BF1 Hz at ¹H, exact), verified by measurement (the measured offsets are the record), and analyzed per-step by the facility report.
  • docs/CLAUDE_INSTALL.md: an install runbook written for AI coding agents (Claude Code and similar) — facilities whose students work with an agent can hand it the repo and this file; it installs, configures, validates, packs, and uploads, with verification gates at every step and hard rules (agents never run acquisition commands and never expose the upload token).
  • Version 0.5.0 across the acquisition script, packer, uploader, and registry tools. Schema stays 2.0: role-enum extensions and two newly documented OPTIONAL metadata objects only — bundles from earlier releases remain valid, and v0.4.0 acquisition bundles gain the improved clock analysis retroactively (the pulse-program text was already in every bundle).

The new modes are Bruker-first and dialog-driven; both compose (xpy spin_noise_run rdopt sweep), and neither changes the standard run when the flags are absent. Design notes and sources: docs/design_rdopt_locksweep.md.

v0.4.0

Choose a tag to compare

@jwbquantum jwbquantum released this 28 Aug 15:00

Five-vendor support matrix. New in this release:

  • Agilent/VnmrJ path (converter-first): vendors/agilent/ — packer ingest of VnmrJ fid/procpar output plus an acquisition recipe using the documented cryo_noisetest-style receive-only idiom (pw=0, minimum power). Validated against synthetic fixtures and the published fid/procpar binary layout; we are looking for a facility with a working VnmrJ system to do the first real-data validation — if that is you, please get in touch.
  • Nanalysis benchtop path (converter-first): vendors/nanalysis/ — JCAMP-DX export ingest for 60/100 MHz benchtops.
  • Facility-registry automation (sign-up form → registry endpoint) and a registry world-map generator for the project page.
  • TopSpin 5.0 status note in README/INSTALL/install guide.
  • Version 0.4.0 across the acquisition script, packer, uploader, and registry tools (schema unchanged at 2.0; bundles from v0.3.0 remain valid).

Acquisition on Bruker/TopSpin remains the automated path; JEOL, Magritek, Agilent, and Nanalysis are converter-first — the packer ingests each vendor's native output while the per-vendor acquisition automation matures.

v0.3.0

Choose a tag to compare

@jwbquantum jwbquantum released this 26 Aug 21:44

Facility installation guide; clock audit; vendor-neutral packer with JEOL and Magritek paths; resumable uploads

v0.1.0

Choose a tag to compare

@jwbquantum jwbquantum released this 25 Aug 18:29

First public release: TopSpin acquisition orchestrator, tagged bundles, uploader, ingest server, desk-test harness