# Model definitions and parameter counts

Frozen comparison definition, 2026-10-04. This document defines the tested families; it does not select a winner or amend the prospective confirmation protocol. Source authority is the immutable production `3609d467a7f17c9ed56a434d71f131ca5cf15528` archive, plus the explicitly recorded adapters. The local achromatic neighbour pilot is a different model and is not one of these full-CCD families.

## Reviewer summary

A3 is the reference. CCD19 adds two learned colour-displacement coefficients. A3w prescribes one width response and adds no learned nonlinear coefficient.

| Family | Spatial raw coefficients | WCS coefficients | Learned colour coefficients | Other prescribed values | Learned nonlinear scalar count |
|---|---:|---:|---:|---|---:|
| A3 |142,884|42|17| two CCD-shift values fixed at zero |142,943|
| CCD19 |142,884|42|19| same fixed geometry/colour gauges |142,945|
| A3w |142,884|42|17| width leaf 0.8 fixed; frozen row charges and charge reference; CCD shift zero |142,943|

Counts are **stored raw trainable coefficients**, not effective statistical degrees of freedom or a claim of joint identifiability. Normalization, centroid/phase gauges and penalties constrain them. `epsf_base` and decoded arrays are checkpoint caches, not additional fitted coefficients; mode arrays have zero length. Each scene additionally profiles one amplitude per source row (F1: 14,733; C4: 19,120), with nuisance regularization and possibly uninformative columns. Those amplitudes are excluded from the nonlinear counts and must not be equated to independent measured stars.


## Shared image model and gauges

$$D_p=\sum_{i:p\in\mathcal S_i} f_i\,\Psi_i(p;\boldsymbol\theta)+\epsilon_p.$$

Here $p$ is a native TESS pixel identified by its physical pixel UID; $D_p$ is the prepared `hp_d` observation in electrons per second; $i$ indexes immutable scene **rows**, not necessarily unique catalogue IDs; $\mathcal S_i$ is the row's fixed 15×15 response stencil, with the recorded validity/evaluation masks applied separately; $f_i$ is the profiled source amplitude in electrons per second; $\Psi_i$ is the dimensionless rendered response per native pixel; $\boldsymbol\theta$ contains the nonlinear model coefficients; and $\epsilon_p$ is the data-minus-model residual in electrons per second. Calling it a residual does not assume a complete noise model or independent Gaussian errors.

The spatial base is a 6×6 grid of 63×63 raw coefficient arrays. Decoding uses softplus, normalization, the oversampling-4 phase-flux rule and a core-weighted centroid gauge. The renderer blends node profiles and their generators, recentres the **complete deformed local profile**, and divides by its represented-grid renormalization scalar. The core gauge does not equate the WCS origin to the full-profile photocentre. Individual raw-gauge generators are not separately flux-neutral. A finite or masked 15×15 profile sum need not equal one; amplitudes and retained-footprint sums must not be silently interchanged.

The polynomial WCS has total Chebyshev degree 5, 21 basis terms per coordinate and 42 coefficients for the single frame. Its coefficients are in native pixels. There are no free per-star centroids, temporal ePSF modes or fitted background coefficients in these scene fits. Background preparation is upstream and is not included in this parameter count.

## A3: 17 colour coefficients

$$\delta_i=u_i-u_{\rm ref},\qquad
r_i=\frac{\lVert\mathbf a-\mathbf z_i\rVert}{1000\,{\rm px}},\qquad
\mathbf n_i=\frac{\mathbf a-\mathbf z_i}{\lVert\mathbf a-\mathbf z_i\rVert},\qquad
X_i=\frac{z_{ix}-1024\,{\rm px}}{1024\,{\rm px}},\quad
Y_i=\frac{z_{iy}-1024\,{\rm px}}{1024\,{\rm px}}.$$

Here $u_i$ is the frozen numerical colour coordinate from the per-field Gaia-XP colour file, with the recorded BP−RP fallback where needed. The producer forms an XP-synthetic PS1 band-mix wavelength using fixed label weights (r,i,z,y)=(0.238,0.344,0.283,0.135) and effective wavelengths (617,752,866,962) nm, then applies a fixed per-field affine conversion into BP−RP-like magnitude units. One colour unit below means one unit of that **stored affine coordinate**; raw nanometres or raw BP−RP must not be substituted. The label weights remain separate from the later D13 template-synthesis weights. Producer definition: `/astro/armin/koji/syndiff/dev_runs/chroma_v2_20260928/colour/COVERAGE.md`; the actual input CSV and its hash are authoritative. $u_{\rm ref}$ is its recorded training-population reference. $\mathbf z_i$ is the fixed linear-WCS source position in native science/crop pixels, $\mathbf a$ is the fixed projected camera optical-axis position from the recipe, $r_i,X_i,Y_i$ are dimensionless, and $\mathbf n_i$ points toward the optical axis. The code adds a numerical $10^{-6}$-pixel stabilizer to the radial denominator. Set $\phi_i=\operatorname{atan2}(n_{iy},n_{ix})$, the direction angle in radians. Colour fields use $\mathbf z_i$; profile node blending uses the fitted achromatic WCS position, so explicit colour shifts do not move a star between profile nodes.

$$\mathbf d_i^{\rm A3}=\left[\delta_i(s_0+s_1r_i+s_2r_i^2)
 +(\delta_i^2-\mu_2)(s_{q0}+s_{q1}r_i)\right]\mathbf n_i.$$

Here $\mathbf d_i^{\rm A3}$ is the explicit colour displacement in native pixels; $s_0,s_1,s_2$ are fitted coefficients in pixels per colour-coordinate unit; $s_{q0},s_{q1}$ are fitted coefficients in pixels per squared colour-coordinate unit; and $\mu_2$ is the recorded mean squared colour offset of the training gauge population. The quadratic term is population-centred. Therefore the **entire A3 displacement need not vanish at** $u_i=u_{\rm ref}$, even though the added CCD translation below does.

The remaining profile-generator coefficients are:

| Component | Per-row coefficient | Count | Coefficient units |
|---|---|---:|---|
| Radial linear-colour displacement | $\delta_i(s_0+s_1r_i+s_2r_i^2)$ |3| native px / colour unit |
| Radial quadratic-colour displacement | $(\delta_i^2-\mu_2)(s_{q0}+s_{q1}r_i)$ |2| native px / colour unit² |
| Blur/Laplacian | $\delta_i b_c$ |1| native px² / colour unit |
| Dilation | $\delta_i(d_0+d_1r_i)$ |2| dimensionless / colour unit |
| Core/wing redistribution | $\delta_i(k_0+k_1r_i)$ |2| native px⁻² / colour unit |
| Axis-oriented trefoil pair | $\delta_i t\cos(3\phi_i)$ and $\delta_i t\sin(3\phi_i)$ |1| native px⁻¹ / colour unit |
| Detector anisotropy plane | $\delta_i(a_0+a_xX_i+a_yY_i)$ |3| dimensionless / colour unit |
| Detector shear plane | $\delta_i(h_0+h_xX_i+h_yY_i)$ |3| dimensionless / colour unit |

All $b_c,d_j,k_j,t,a_j,h_j$ in the table are fitted, field-specific coefficients. The trefoil pair shares **one** fitted coefficient. This is 17 coefficients in total, stored as `chroma_g8[0:17]` with extras `dil_r,sq0,sq1,q1_0,q1_x,q1_y,q2_0,q2_x,q2_y`.

For exact units and signs, let $P(\xi,\eta)$ denote a decoded node profile and let $\xi,\eta$ be offsets in native pixels. Before projection off the raw base, the implemented generators are: Laplacian $\partial_\xi^2P+\partial_\eta^2P$; dilation $2P+\xi\partial_\xi P+\eta\partial_\eta P$ (positive coefficient narrows the profile to first order); redistribution $P(\rho^2-\langle\rho^2\rangle_P)$; anisotropy $\xi\partial_\xi P-\eta\partial_\eta P$; shear $\eta\partial_\xi P+\xi\partial_\eta P$; and displacement generators $-\mathbf v\cdot\nabla P$ with $\mathbf v=(\xi^2-\eta^2,-2\xi\eta)$ or $(2\xi\eta,\xi^2-\eta^2)$ for the two trefoil partners. Here $\rho^2=\xi^2+\eta^2$ and $\langle\rho^2\rangle_P$ is the profile-weighted grid mean. These definitions explain the nontrivial inverse-pixel units of redistribution and trefoil; neither coefficient is a directly fitted fourth moment.

## CCD19: A3 plus two colour translations

$$\mathbf d_i^{\rm CCD19}=\mathbf d_i^{\rm A3}+\delta_i(t_x,t_y).$$

Here $t_x,t_y$ are two fitted, field-specific CCD-coordinate displacement coefficients in native pixels per recorded colour unit. Their addition is exactly zero at the training reference colour. They do not deform the local node profile or change the node-blending position. The baseline stores the same two-element `chroma_ccd_shift` leaf at exactly zero and freezes it, giving a shared comparison graph. Candidate checkpoint loading/scoring **must install the CCD adapter before loading parameters**.

## A3w: one prescribed brightness-width sensitivity

$$q_i=\min\!\left(2\,{\rm s}\;\max(aF_i,0) p_i,\;2\times10^5\,{\rm e^-}\right),\qquad
\Delta\Sigma_i=b_0\frac{q_i-q_{\rm ref}}{10^4\,{\rm e^-}},\qquad
w_i^{\rm width}=\frac12\Delta\Sigma_i.$$

Here $q_i$ is the frozen predicted peak electron charge per two-second read; $F_i$ is external scene-catalogue `tess_flux` in its catalogue units; $a$ is the strict-fold training-only catalogue-to-image normalization, so $aF_i$ is in electrons per second; and $p_i$ is the dimensionless peak of the native template rendered from the training-only initialization, without clipped-stamp renormalization. $q_{\rm ref}$ is the frozen squared-S/N-weighted mean over training contributors, in electrons per read. $b_0=0.8\times10^{-3}\,{\rm px}^2$ is prescribed **per normalized charge increment of** $10^4$ electrons per read; equivalently the dimensional slope is $8\times10^{-8}\,{\rm px}^2/{\rm e^-}$. $\Delta\Sigma_i$ is the first-order extra covariance per detector axis in native pixels squared, and $w_i^{\rm width}$ is the added raw-gauged Laplacian coefficient, also in native pixels squared. The renderer adds this to the colour-blur coefficient; it is a first-order response, not an exact per-star Gaussian convolution. The colour coefficient $b_c$ is directly a Laplacian weight per colour unit; the width coefficient $b_0$ describes covariance per normalized charge and therefore enters that same generator with the factor one-half.

The native charge-reference weights are $\omega_i=(aF_i)^2/\max(v_i,10^{-12})$ for positive $v_i$, otherwise zero, where $v_i$ is the median squared scene noise over the fixed `scene.core` columns in (electrons/second)², and the numerical floor has those same variance units. The reference is the weighted mean of $q_i$ over finite, positive-weight **training contributor** rows only. This is the native squared-S/N proxy in `scene_fit.bright_width_q_ref`, not a fitted-star-count or equal-star mean.

The CLI value is `--bright-width-init 0.8e-3`; the stored `bright_width[0]` is 0.8 because its leaf unit is $10^{-3}\,{\rm px}^2$ per normalized charge unit. `--no-bright-width-train` keeps it fixed. The current arm uses a catalogue/initial-profile charge proxy with a training-only normalization, **not the historical implementation's unrestricted warm-start image-flux estimate**. This difference is explicit, prevents held-pixel calibration leakage and limits any physical interpretation. The fixed two-second read time is not the total FFI integration time. Frozen charges are restored by row ordinal, source ID, bundle index and ordered geometry; duplicate numeric catalogue IDs cannot be dictionary-collapsed.

## Count and validation ledger


All families retain the native role rules: contributors learn base/WCS/colour; anchors suppress direct base/mode gradients while retaining WCS/colour gradients; nuisance templates suppress direct profile/WCS/colour gradients while their forward values can change. This is an intentional native estimating-direction policy, not a guarantee that every update is the total derivative of one scalar objective. The adopted lp7s penalty, no fitted background and no adaptive rejection remain unchanged.

Validated construction scope: shared-graph zero parity for CCD19; training-only rank 61 after adding all 42 WCS directions to the 19 colour directions, conditional on fixed base/modes; exact all-role zero-width and saved-charge scoring parity for A3w; fixed-row held-cohort identity and exact ON replay for the colour-off ablation. None proves complete nonlinear joint identifiability, physical brighter-fatter behaviour, noise-level closure or unbiased photometry. Full K5 scores, independent-start/schedule stability, the reserved-exposure protocol and source-light/noise limitations govern scientific acceptance. The prospective amendment at **2026-10-04 19:47:34 UTC** explicitly admits **A3, CCD19 and A3w** as the three confirmation families, conditional on fresh construction gates before test inspection. It supersedes the earlier two-family count. The two baseline contrasts use the frozen multiplicity-controlled interval rule; no CCD19-plus-width combination or retuned width coefficient is admitted. See [the authoritative confirmation reservation](../review/CONFIRMATION_RESERVATION.md). Fresh confirmation charges must be constructed from that exposure’s external catalogue/strict training initialization and training-only normalization; historical charges are not transferred.

Sources: `pin/syndiff_pipeline/forward_model/{scene_fit.py,loss.py,epsf_model.py,bright_width.py,cheb_wcs.py}`; CCD adapter SHA `49ad6a444f2470f203ec3526921c4f6cc861d11caabdb95214b95f16d0a267cb`; fixed-width adapter SHA `ea46a5b518dbc3d0867fcc3e1477b9349b3f31a07153896e0c89ca7cc2bdbe35`. Evidence and inspected figures: [candidate construction](candidate_preflight/index.html), [native estimator controls](preflight/index.html), [fixed-width contract](fixed_width_preflight/README.md), [conditional colour-off control](colour_off/index.html).

Conclusion: the comparison has two extra learned coefficients only in CCD19; the historical-width arm adds one prescribed response with no extra learned nonlinear coefficient. These exact definitions and their conditional validation limits are fixed before interpreting the final three-arm results.
