# Sector 20: a focal-plane view of WCS motion

2026-10-02 — completed methods update. Code commit `43c7c14cac6b5b2271ea0fd86a6b91445dfc6995` on `codex/wcs-focal-plane-20261002`.

Headline: the live atlas now documents every component and its measurement source with rendered LaTeX, units, reference conventions, and fit/prediction limitations. The original scientific payload is byte-for-byte unchanged.

2026-10-02. Updated presentation: each CCD quadrant now contains **x versus time above y versus time**, replacing the previous 2D trajectories. The selected-position detail also uses vertically stacked x/y time series. This reuses the existing calibrated WCS analysis; no new model or causal thermal attribution is claimed.

[Open the interactive canvas](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/index.html).
The canvas source is [focal_plane_template.html](/home/kshukawa/syndiff_pipeline/dev/.claude/worktrees/wcs-focal-plane/paper/paper2_temporal_photometry/wcs/focal_plane_template.html),
and the generator is [focal_plane.py](/home/kshukawa/syndiff_pipeline/dev/.claude/worktrees/wcs-focal-plane/paper/paper2_temporal_photometry/wcs/focal_plane.py).
The stable checkout entry point is [doc/wcs_focal_plane_canvas/index.html](/home/kshukawa/syndiff_pipeline/doc/wcs_focal_plane_canvas/index.html).

## Webpage methods and equations — 2026-10-02

The live canvas now includes a **WCS & component equations** button and a **?** link for each legend component. Expandable sections document the FFI-header measurement source, pixel origins and Jacobian, TAN-SIP mapping, independent C3/CCD3 centroid check, full VA transform, measured common rotation, selected temperature features and ridge fit, separate baseline, residual definition, and both viewing-mode sums. Every introduced symbol is defined with units and provenance. The text explicitly distinguishes measured pointing from a pointing forecast.

The maintained source is `focal_plane_methods.html`, compiled by `render_focal_plane_methods.mjs` with KaTeX 0.16.22. CSS and fonts are bundled under the run's `assets/katex/`, so the served page needs no external CDN. The download bundle includes those assets. Source files are on `codex/wcs-focal-plane-20261002`.

To rebuild only the page, preserving every plotted value and figure:

```bash
eval "$(mamba shell hook --shell bash)"
mamba activate syndiff
export MPLCONFIGDIR=/tmp/paper2_mpl OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 OMP_NUM_THREADS=1
python /home/kshukawa/syndiff_pipeline/dev/.claude/worktrees/wcs-focal-plane/paper/paper2_temporal_photometry/wcs/focal_plane.py --page-only
```

The isolated renderer dependency is installed with `npm install --prefix /astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/browser_check --no-audit --no-fund katex@0.16.22`. The methods screenshots were visually inspected for equation rendering and layout. Browser checks cover component-help navigation, checkbox-state preservation, typeset equations, local font loading, and the existing atlas controls. `methods_math_validation.json` records compilation, and `browser_validation.json` records the live HTTP checks.

## Reading the diagram

The diagram has **two CCD columns and eight rows**, with camera 1 at the top and camera 4 at the bottom. Each CCD is divided into four quadrants. Each pair of time series follows an actual stored WCS probe near that quadrant's center; it is not a quadrant average or an individually identified star. Click a quadrant to see its full-FFI coordinates and enlarged stacked time series.

The reference WCS determines the CCD placement and orientation. In this view, cameras 1 and 2 have CCDs 4/3 above 1/2; cameras 3 and 4 have CCDs 2/1 above 3/4. Gaps are schematic. The four selected native detector positions are (605.75, 561.75), (1529.25, 561.75), (605.75, 1485.25), and (1529.25, 1485.25) pixels. Their displayed quadrants rotate with their CCD.

| Color | What the track shows |
|---|---|
| Black | Measured WCS-map change at a fixed detector position |
| Blue | Velocity-aberration contribution, using the full spacecraft velocity |
| Orange | Only the temperature-dependent part of the calibrated regression |
| Gray | The separate fitted time/orbit terms |
| Magenta | Change remaining after VA and the complete empirical regression |
| Teal, in total-motion mode | Measured common apparent rotation |

Every quadrant has an upper x(t) panel and a lower y(t) panel. Horizontal axes show days from the selected window start; all displacement axes share the same symmetric pixel range. These x/y coordinates follow the displayed focal-plane axes, as in the preceding trajectory view. The dashed cursor in the canvas marks the selected exposure. The static first/last-day comparison also uses one common displacement scale across its four panels; the residual-only view has its own labeled scale.

The default interactive view is the first day of orbit 47. Select the orbit and time window, drag the slider or press Play, and toggle components. Clicking a quadrant displays its enlarged x and y time series in vertical order, measured lens-barrel temperature, and a numerical vector breakdown. Total-motion mode includes the large common VA/pointing terms; cancellation can make small terms difficult to see on that common scale. Turning off large components allows the remaining terms to be magnified without changing their relative scale across CCDs.

## The measured tracks and separate components

![First and last days at four positions per CCD](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_atlas_edges.png)

The black x/y curves are the measured displacements themselves, rather than a scalar summary of them. The first-day panels show departures from the blue VA predictions at several detector locations as explicit functions of time. The separate-component figure below shows how much of that shape the temperature term supplies. Camera 1 is hatched at orbit-48 startup because its measurements are flagged; the other cameras remain visible.

![Measured, VA, temperature, time, and residual tracks separately](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_components_first47.png)

All five panels have the same scale and show the first day of orbit 47. This prevents a tiny term from looking large solely because its plot was independently magnified. The orange temperature term is visibly different from the gray time term. This separation is necessary because the previous regression used both, and calling the entire regression “thermal” would overstate the attribution.

![Unexplained changes on a magnified common scale](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_unexplained_edges.png)

The magenta x/y curves reveal the smaller remaining motion and when it occurs. This plot has its own common scale across CCDs and intervals. It is a plot of **change in the calibrated model residual relative to the window's initial exposure**, not absolute forecast accuracy.

## The underlying spatial measurements

![All 81 WCS probes per CCD: residual endpoint vectors](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_residual_dense.png)

This view restores all 81 measured WCS probes per CCD. Each square represents one probe without spatial interpolation; its color is the magnitude of the unexplained endpoint change. Arrows show the direction. Colors and arrow magnification are shared across the four panels. This checks whether the four representative positions conceal spatial structure. These are WCS residual fields, not image-pixel residual stamps; the input measurement is the FFI header WCS.

For the complete sector evolution, see the [full-orbit plot](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_atlas_orbit47.png), or use the full-orbit window in the canvas. A [single first-day 2×8 atlas](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_atlas_first47.png) and vector PDFs are also saved beside the run data.

## Definitions and model accounting

At each detector probe, first express the WCS changes in native detector pixels:

$$
\mathbf m_i(t)=J_i^+\,[\mathbf n_i(t)-\mathbf n_i(t_{\rm ref})],\qquad
\mathbf o_i(t)=J_i^+\,[A(\mathbf n_i(t),\boldsymbol\beta_t)-A(\mathbf n_i(t_{\rm ref}),\boldsymbol\beta_{\rm ref})].
$$

Here $i$ indexes a fixed detector probe; $t$ is spacecraft time in TDB BTJD; $t_{\rm ref}$ is the saved common sector reference exposure; $\mathbf n_i(t)$ is the dimensionless unit sky direction read from that exposure's WCS; $J_i$ is the reference WCS Jacobian in unit-direction change per native pixel; and $+$ denotes its Moore–Penrose pseudoinverse. The vectors $\mathbf m_i$ and $\mathbf o_i$ have two native-pixel components. The function $A$ is the exact relativistic aberration transform implemented by the prior analysis, and $\boldsymbol\beta_t=\mathbf v_t/c$ is the dimensionless full barycentric spacecraft velocity from the saved definitive ephemeris, with $c$ the speed of light. The VA amplitude is fixed, not fitted. Its contribution is evaluated on the measured sky directions.

To remove a common rotation consistently, use

$$
Q=I-D(SD)^+S.
$$

Here $Q$ is a dimensionless linear projection; $I$ is the identity on the concatenated two-component probe fields; $D$ is the reference small-rotation design matrix in pixels per radian; and $S$ selects only the CCDs in cameras 2–4. This avoids using contaminated camera-1 positions to determine the common rotation. The same operator acts on every plotted component.

The full vector decomposition is

$$
\mathbf m=\mathbf v+\mathbf p+\mathbf h+\mathbf b+\mathbf r,
\qquad \mathbf v=\mathbf m-\mathbf o,\qquad
\mathbf p=(I-Q)\mathbf o.
$$

All bold quantities here concatenate native-pixel vectors over detector probes. The vector $\mathbf v$ is the VA contribution; $\mathbf p$ is the measured common apparent rotation; $\mathbf h$ is the projected temperature-dependent model contribution; $\mathbf b$ is the projected time/orbit contribution; and $\mathbf r$ is the projected residual. Specifically, the calibrated regression's first four design columns supply its intercept, orbit, and two time terms; its remaining columns supply its temperature term. Both parts are projected with $Q$. The residual is the difference between $Q\mathbf o$ and their sum. Constants in a temperature regression depend on its centering convention; differencing within a window removes those constant offsets.

The default diagram displays

$$
\Delta(Q\mathbf m)=\Delta(Q\mathbf v)+\Delta\mathbf h+\Delta\mathbf b+\Delta\mathbf r.
$$

Here $\Delta$ means the value at the current exposure minus the value at the first usable exposure of that CCD in the selected window. All terms remain in native pixels. A fixed orthogonal transformation per CCD rotates these vectors into the displayed focal-plane orientation while preserving their lengths. This is **WCS map drift**; fixed-star centroid motion has approximately the opposite sign at first order.

These are vector sums: component magnitudes or percentages do not add because contributions can cancel. The temperature/time split is a property of the calibrated regression, not a unique causal separation.

## Validation and scope

- Browser validation passes for orbit/window controls, flags, playback, quadrant selection, magnification, PNG export, and serialized vector closure; no JavaScript exceptions occurred. The record is [browser_validation.json](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/browser_validation.json).
- The component sum reproduces the measured vector field to floating-point precision in both total-motion and distortion modes.
- Every CCD occupies a unique cell; every displayed representative is an actual stored probe. The per-CCD orientation transforms preserve vector norms.
- Reconstructed full-data predictions agree with the saved calibrated prediction archive. These are fitted curves, not the buffered holdout predictions from the endpoint report.
- Flagged exposures are excluded from each CCD's measured tracks. Camera 1 has no usable first-day orbit-48 track. If its first usable exposure is later in a full-orbit window, its detail panel reports that different zero epoch.
- The measured all-CCD inputs are header WCS maps. Independent centroid-derived validation remains limited to C3/CCD3, as described in the [endpoint investigation](/home/kshukawa/syndiff_pipeline/dev/paper/paper2_temporal_photometry/wcs/EDGE_RESULTS.md).
- The interactive data retain every common measured cadence. Playback skips missing cadences; it does not invent intermediate measurements. Dense spatial panels retain all 81 probes per CCD.

The numerical amplitude table is [motion_amplitudes.csv](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/motion_amplitudes.csv). Its RMS values measure window-relative changes at the four selected probes; they are not forecast errors and should not be substituted for the earlier 81-probe validation scores.

## Reproduction and records

Code branch: `codex/wcs-focal-plane-20261002` in the nested dev repository. Source checksums and layout are in [visualization_manifest.json](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/visualization_manifest.json). The run record is [README.md](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/README.md).

```bash
eval "$(mamba shell hook --shell bash)"
mamba activate syndiff
export MPLCONFIGDIR=/tmp/paper2_mpl OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 OMP_NUM_THREADS=1
python /home/kshukawa/syndiff_pipeline/dev/.claude/worktrees/wcs-focal-plane/paper/paper2_temporal_photometry/wcs/focal_plane.py
```

Run data, PNGs, PDFs, the HTML canvas with bundled local math assets, and numerical vectors live under `/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/`. Existing baseline results and SPICE kernels were copied there and hash-verified before replacing the checkout copies with symlinks. The original result links continue to work; the migration record is [migration.json](/astro/armin/koji/syndiff/dev_runs/wcs_focal_plane_20261002/migration.json). No production science inputs were modified.

**Conclusion:** the focal-plane view shows the measured motion, the spatial VA pattern, temperature-associated departures, and remaining changes at matching CCD locations and scales. It supports inspecting which component follows each time series, while preserving the distinction between a calibrated fit and a predictive physical model. Remaining startup motion and the limited independent centroid coverage still prevent calling the WCS model perfect.
