# Logbook — 2026-04-13 — S1 plots, with one new physics observation

**Context.** Plots for the S1 + R1 dataset of `2026-04-13-S1-and-R1.md`,
generated by [../numerics/plot_S1.py](../numerics/plot_S1.py). One new
observation surfaces from looking at the maps that was not visible from
the carrier-only analysis: **the φ_α = 0 slice is Doppler-blind for the
contrast magnitude**, with consequences for S2 priority.

-----

## 1. Plot inventory

All written to [../plots/](../plots/), 140 dpi PNG.

### 1.1 [S1_carrier_summary.png](../plots/S1_carrier_summary.png) — headline

Three-panel summary at δ₀ = 0:

- **Left:** |C| vs |α| for full (η = 0.397) and R1 (η = 0.04). Both
  flat lines. Full at 0.917, R1 at 0.999. Visually demonstrates
  α-independence; the gap between the two is the η-driven spin–motion
  entanglement deficit (≈ 0.083), constant in α.
- **Centre:** arg C vs |α|. Full engine wraps multiple times;
  R1 follows the linear guide +90° + 4.6° · α (overlay). The position-
  phase channel (dossier §1.3) is visible and is in the linear regime
  for R1, in the η-dressed nonlinear regime for the full engine.
- **Right:** σ_z vs |α|. Flat at +0.128 for both engines. Confirms
  α-independence is not an artefact of how |C| is computed.

This is the figure to put in front of a reader who has 30 seconds.

### 1.2 [S1_contrast_maps.png](../plots/S1_contrast_maps.png) — Doppler signature… or its absence

Six-panel contrast figure:

- Top row: heatmaps of |C|_full, |C|_R1, and Δ_η = full − R1 over
  (δ₀, |α|).
- Bottom row: |C|(δ₀) line cuts at each α, plus a carrier zoom showing
  the −0.20 MHz/(2π) finite-δt bias.

**What is striking.** The full and R1 heatmaps each show a *vertical
band structure* — every horizontal slice (i.e. every |α|) is identical.
The line cuts confirm: the four α curves are pixel-overlapping. The
Δ_η heatmap is also α-independent, alternating sign as a function of
δ₀ but flat in α.

This is the new observation. See §2.

### 1.3 [S1_phase_maps.png](../plots/S1_phase_maps.png) — position channel

Four-panel phase figure with phase masking at |C| < 0.1:

- Top row: arg C heatmaps for full and R1, HSV cyclic colormap.
  Full shows rapid horizontal striping (fast wrapping of the position
  phase across δ₀ at every α) plus a slow vertical drift (the α
  dependence at fixed δ). R1 shows the same horizontal structure but
  without the vertical wrapping — the linear phase channel is intact.
- Bottom row: scatter line cuts across the carrier zoom (|δ₀| < 2 MHz),
  masked. Full shows the four α traces fanning out into separate phase
  branches; R1 shows them all on the same near-linear ramp.

The phase masking is essential — without it, the Doppler tails dominate
the visualisation with phase noise.

### 1.4 [S1_eta_residuals.png](../plots/S1_eta_residuals.png) — Δ_η = full − R1

Four-panel residual figure:

- Top row: Δ_η|C| heatmap (alternating-sign vertical bands, α-independent)
  and Δ_η arg C heatmap (masked; shows triangular wedge pattern: |α|
  amplifies the phase residual roughly linearly for moderate |δ₀|).
- Bottom-left: Δ_η|C|(δ₀) line cuts at each α — four traces overlap.
- Bottom-right: carrier slice (δ₀ = 0). Δ_η|C| line is essentially flat
  at −0.083 (the carrier deficit); axis labelling is awkward
  (`1e-14 − 8.26…e-2` units) because the residual is constant to ten
  decimals and matplotlib auto-zooms. Δ_η arg C(δ₀ = 0) climbs roughly
  linearly with α from 0° to ~150° before wrapping.

### 1.5 [R1_convergence.png](../plots/R1_convergence.png) — Guardian flag 1

Two-panel convergence cross-check:

- **Left:** |C|(δ₀) at η = 0.04 (solid) and η = 0.02 (dashed), for α = 0
  and α = 3. Curves overlay completely.
- **Right:** Difference |C|(η = 0.04) − |C|(η = 0.02) vs δ₀. Sub-10⁻³
  oscillation, matches the predicted (η_a² − η_b²)/2 = 6 × 10⁻⁴
  (dotted line). R1 is converged.

-----

## 2. New observation — φ_α = 0 is the Doppler-blind slice

The S1 contrast maps show |C|(δ₀) is **identical to four decimals across
α ∈ {0, 1, 3, 5}**. This is much stronger than "α-independent at δ₀ = 0";
the entire detuning lineshape is α-independent.

**Mechanism.** At φ_α = 0, the coherent state is prepared on the +X̂
axis: ⟨X̂⟩ = 2|α|, ⟨P̂⟩ = 0 (per the §2.2 convention of v0.3). The
Doppler shift seen by the analysis pulse scales with ⟨P̂⟩ via δ_D =
k_eff · v ∝ ⟨P̂⟩, which is **identically zero** at this preparation
phase regardless of |α|. The classical motion has zero velocity at
the turning point, and the stroboscopic pulses sample at exactly the
turning point each cycle.

The position-phase channel (arg C) sees ⟨X̂⟩ ∝ |α|, which is why arg C
*does* depend on α. So at φ_α = 0:

- Position channel (`arg C`): bright. Full engine non-monotonic from
  η-dressing; R1 linear at +4.6° per unit α as predicted by k_eff x_0
  per unit α at η_R1.
- Velocity channel (`|C|(δ₀)` Doppler broadening): dark. The Doppler
  shift is zero by construction.

**Consequence for the WP.** The plan to "characterise the (δ₀, |α|)
surface" implicitly assumed both channels would be active. They are
not: at φ_α = 0 only the position channel is alive. To observe the
Doppler-broadening signature predicted by dossier §1.4, S2
((δ₀, φ_α) at fixed |α|) is *required*, not optional. Specifically:

- At φ_α = π/2, ⟨P̂⟩ = 2|α| (maximum), and we expect maximum Doppler
  broadening of |C|(δ₀) scaling with α.
- At intermediate φ_α, the broadening should scale as |α| · |sin φ_α|.

This recovers a check on dossier §1.4 that S1 alone *cannot* provide.
S2 is therefore the load-bearing slice for the velocity-channel
motivation, not just an extra dimension. Promote S2 priority.

**Self-criticism.** This was foreseeable from §2.2 of v0.3 (the
convention defining φ_α = 0 → +X̂ axis), but I did not anticipate it
when planning the slice ordering. The S1-first sequence still has
value — it cleanly isolates the position channel without Doppler
contamination, which is itself a useful slice — but the implicit
expectation that S1 alone would address the velocity-channel
motivation was wrong. Recorded honestly so the v0.4 README amendment
can fold this in.

-----

## 3. Δ_η phase residual structure (heatmap reading)

The Δ_η arg C heatmap (figure 1.4, top right) is the most physically
informative single panel in the set. Reading it:

- At δ₀ = 0, Δ_η arg C grows roughly linearly with α (~+50° per unit α)
  before wrapping. This is the η-driven nonlinear extension of the linear
  position-phase signal.
- At |δ₀| ≳ 2 MHz/(2π), the residual flattens — both full and R1 are in
  the Doppler tails where |C| is small and arg C is poorly defined.
- The wedge shape (broader at large α, narrow at small α) directly
  visualises the regime where η-nonlinearity dominates. A practical use
  case: this map will be the WP-E target for the WP-D perturbative
  linear regime — wherever |Δ_η arg C| < 5° (say), the η = 0.397 engine
  is approximately linear and BAE-compatible analysis is a candidate.

-----

## 4. Plot conventions to carry forward

Codifying for S2 / S3 plots:

- |C| heatmap: viridis 0–1; arg C heatmap: HSV cyclic, masked at
  |C| < 0.1 (`PHASE_MASK_THRESHOLD` in plot_S1.py).
- Δ residuals: RdBu_r diverging colormap, centred at 0 via TwoSlopeNorm.
- Detuning axis: MHz/(2π) (absolute units) on plots, det_rel internally.
- Phase: principal branch (−180°, +180°], `wrap_deg()` helper.
- α tick labels: integer-formatted, equispaced (heatmap rows are not
  on a uniform |α| grid, so y-extent is `[-0.5, n_alpha - 0.5]` with
  custom yticklabels; the visualisation is correct but spacing is
  symbolic, not metric — caveat for any quantitative read-off of slope
  along the |α| axis).

The α-axis caveat will matter when S2/S3 are plotted: their |α| grid is
similarly sparse and non-uniform.

-----

## 5. Outstanding actions (updated)

Reordered by priority after this entry:

- [ ] **S2 driver + execution: (δ₀, φ_α) at |α| ∈ {1, 3, 5}.** Promoted
      to high priority — only S2 can show Doppler broadening (§2 above).
      Single cheap S2 sheet at |α| = 3 first to validate the
      φ_α-dependent broadening hypothesis before running all three.
- [ ] R2 (instantaneous-pulse reference) implementation at driver level.
- [ ] R12 follows from R1 + R2.
- [ ] Plot conventions extended to S2/S3 once data lands.
- [ ] v0.4 README amendments (preflight + S1 findings + Doppler-blind
      observation) — *after* S2.

-----

## 6. Files added in this entry

- [../numerics/plot_S1.py](../numerics/plot_S1.py) — plotting driver.
- [../plots/S1_carrier_summary.png](../plots/S1_carrier_summary.png).
- [../plots/S1_contrast_maps.png](../plots/S1_contrast_maps.png).
- [../plots/S1_phase_maps.png](../plots/S1_phase_maps.png).
- [../plots/S1_eta_residuals.png](../plots/S1_eta_residuals.png).
- [../plots/R1_convergence.png](../plots/R1_convergence.png).

No edits to README.md. No engine modifications. Dossier untouched.

*Next entry: S2 driver + first sheet (|α| = 3), to test the
Doppler-broadening hypothesis from §2 of this entry.*
