The one page for Gaia-spectra work. Part A checks whether Gaia XP spectra can stand in for PS1 photometry of the ePSF training stars (T < 13, saturated in PS1). Part B asks what the forward model should use as its colour input: one number or several, the XP band-mix colour u or BP−RP, and linear or quadratic in it.
dev_runs/colour_evidence_20260928 re-ran §9 without the outlier clip on the total shift. That clip removed 83–89% of the reddest stars (BP−RP > 2.2), which carry the signal. With them kept, a quadratic-in-colour shift is needed: an 8–10σ gain on all four fits, with cubic adding nothing. It agrees with the independent quadratic-colour retrain, which halved the red-end shift. u is a small extra (+0.2–0.3% over quadratic BP−RP), and most of the 10σ "u beats BP−RP" signal in §6–§8 was the missing colour curvature. Part A (XP = PS1) and "one colour number is enough" (§5) still stand. Colour-model v2 is now handled by the chroma v2 orchestrator session (plan dev/forward_epsf_wcs/docs/CHROMA_V2_IMPL_PLAN_20260928.md).
Part A · Does XP reproduce PS1?
| band | n | raw: median / robust sd | Std: median / robust sd |
|---|---|---|---|
| r | 101,926 | +0.002 / 0.010 | −0.001 / 0.009 |
| i | 97,408 | +0.003 / 0.008 | +0.001 / 0.007 |
| z | 95,105 | −0.008 / 0.009 | +0.000 / 0.008 |
| y | 93,162 | −0.001 / 0.019 | −0.008 / 0.015 |
u = Σb sb λb is the template-weighted mean band wavelength. sb is a star's share of light in PS1 band b within the combined template, using w = (0.238, 0.344, 0.283, 0.135); λ = 617, 752, 866, 962 nm. The training stars span u = 775–829 nm (1st–99th percentile).
XP synthetic photometry in the standardised system reproduces real PS1 in r, i and z to within 0.001 mag median and 0.007–0.009 mag scatter, with no colour trend. The y band is usable but noisier (−0.008 median, 0.015 scatter). Band shares for the saturated training stars can come from XP. Use the Std system, because raw z bends at the red end.
u from XP matches u from real PS1 to 0.47 nm rms. That is about 1% of the 54 nm colour range. The +0.18 nm offset is a constant that the colour gauge absorbs.
Beyond a smooth function of BP−RP, u carries only about 0.8 nm (≈0.03 mag) of real per-star information. For u, a calibrated nonlinear map of BP−RP already captures nearly everything. XP adds that map, plus exact band shares for stars that PS1 saturates. Part B tests whether that 0.8 nm matters to the PSF, and whether the four-band share vector needs more than one number.
Part B · What colour input should the forward model use?
Each per-band PS1 template convolved with its own PSF Pb gives every star the PSF Σb sb Pb, which is linear in its four band shares. The current colour model (#14) drives all its chromatic terms with one number, BP−RP. I asked what the existing fits leave behind. For each star, the residual of the fit is decomposed into an x-width (cxx), a y-width (cyy) and a radial shift toward the optical axis. If a better colour number or a second number carried PSF information, the residuals would line up with it.
Across the four fits, the band-share PCA gives PC1 97.1–97.3%, PC2 2.3–2.4% and PC3 0.5%. PC2 is the curvature of the same track, not a separate population. Residuals against a second number at fixed u are under 2σ everywhere except the F2 radial shift (3.6σ and 4.3σ). That F2 effect is about 1.5×10⁻³ px end to end, a third of the u effect, and does not appear on F1. The option of free per-band colour terms (27 parameters) is therefore unconstrained by these stars, and a single coordinate is the right form.
| fit | stars | shift vs u beyond BP−RP | slope [10⁻³ px/nm] | x-width vs u beyond BP−RP | shift vs 2nd number |
|---|---|---|---|---|---|
| F1 C5 | 7,994 | 10.9σ | −1.51 | 2.2σ | 0.9σ |
| F2 C5 | 7,858 | 10.0σ | −1.25 | 4.0σ | 3.6σ |
| F1 faint ePSF | 7,514 | 11.9σ | −1.38 | 0.5σ | 1.4σ |
| F2 faint ePSF | 7,265 | 11.9σ | −1.30 | 3.5σ | 4.3σ |
The shift slope is the same in every fit (−1.25 to −1.51 ×10⁻³ px per nm). With u beyond BP−RP scattering by about ±1.1 nm, a BP−RP model misplaces the lateral-colour shift by about 1.3×10⁻³ px rms and up to ±4×10⁻³ px for the most off-track stars. That is a tenth of the ~0.01 px effects under study, so the gain is real but modest. The width gain is at most 0.2×10⁻³ px², on F2 only.
Superseded 19:20. With outliers clipped on the total shift rather than the residual, the quadratic gain shrinks from ~5% to 0.3–1.9%. It is not significant on F1. §9 fits the total shift directly and finds no need for a quadratic.
| fit | shift: BP−RP lin / quad / cubic | shift: u lin / quad / cubic | shift: BP−RP + u | x-width: u lin / quad / cubic |
|---|---|---|---|---|
| F1 C5 | 0.9 / 4.7 / 4.6 | 1.5 / 4.8 / 4.8 | 6.9 | 5.4 / 5.6 / 5.6 |
| F2 C5 | −0.1 / 4.9 / 4.9 | 0.0 / 4.6 / 4.6 | 6.7 | 5.7 / 5.7 / 5.6 |
| F1 faint ePSF | 1.1 / 5.7 / 5.5 | 1.9 / 5.8 / 5.8 | 8.4 | 9.0 / 9.1 / 9.3 |
| F2 faint ePSF | 0.2 / 5.4 / 5.3 | 0.6 / 4.9 / 5.1 | 8.1 | 9.3 / 9.2 / 9.2 |
For the shift, a linear colour term recovers 0–2% of the residual and a quadratic one 4.6–5.8%; a cubic adds nothing. For the widths, linear, quadratic and cubic all tie. In the residual test, quadratic in u and quadratic in BP−RP score about the same on their own. The combination BP−RP + u scores best (6.7–8.4%) because the residual is the true shift minus the BP−RP model's shift: removing it needs both numbers. That is what we expect if the true shift follows u. Only a retrain on u can show the gain directly.
This is the direct check that u does better, without retraining. Each fit keeps its trained colour shift S(r) = c0 + c1r + c2r², and only the colour it is fed changes: BP−RP is replaced by u, mapped linearly onto BP−RP units so the colour gauge is unchanged. Each star's model moves by the resulting shift change (2.4–3.5×10⁻³ px rms), and its residual is updated to first order. Nothing is fitted to the residuals. Stamps are stacked in a frame rotated so +x points to the optical axis, in three equal groups by u beyond BP−RP. The standard colour × Tmag grid cannot show this: it bins by BP−RP, and the effect averages out within each BP−RP bin.
| fit | offset between thirds, stack [10⁻³ px] | per-star slope vs u beyond BP−RP [10⁻³ px/nm] | difference stamp rms: shift / rest / noise |
|---|---|---|---|
| F1 C5 | 5.44 → 4.36 (−20%) | −1.64 ± 0.14 → −0.78 ± 0.14 | 2.29 / 0.68 / 0.65 |
| F2 C5 | 3.52 → 2.65 (−25%) | −1.41 ± 0.13 → −0.59 ± 0.13 | 1.67 / 0.75 / 0.61 |
| F1 faint ePSF | 5.01 → 4.02 (−20%) | −1.45 ± 0.12 → −0.61 ± 0.12 | 2.10 / 0.66 / 0.61 |
| F2 faint ePSF | 3.54 → 2.64 (−25%) | −1.43 ± 0.11 → −0.66 ± 0.11 | 1.68 / 0.68 / 0.58 |
The swap helps on every fit, and in the same direction. The difference stamp is almost entirely a shift: once the shift is removed, what is left matches the stack noise, so there is no second shape effect hiding here. The swap does not remove everything, though. After it, a third to half of the offset remains, and the per-star slope is still 5σ from zero. Corrected 19:20: I first read this as the data wanting a larger coefficient on u. A direct refit shows otherwise. Refitted on u alone, the trend reverses sign, so u overshoots as much as BP−RP undershoots, and the best colour is a mix of the two (§9).
Here the fit targets each star's total colour-dependent radial displacement: the shift the model applied, plus the residual left over. Each candidate form is refitted to it out-of-fold, with the colour-independent part (distance-only terms, which the WCS absorbs), CCD region and brightness as nuisance terms.
| shift per unit colour [10⁻³ px] at distance | 500 px | 1000 | 1500 | 2000 | 2500 |
|---|---|---|---|---|---|
| F1 trained | −38.6 | −71.4 | −88.4 | −89.8 | −75.4 |
| F1 refitted | −34.2 ± 2.0 | −71.2 ± 1.0 | −89.4 ± 1.1 | −89.0 ± 1.0 | −70.0 ± 3.3 |
| F2 trained | −34.1 | −56.2 | −68.9 | −72.3 | −66.3 |
| F2 refitted | −28.1 ± 1.8 | −53.1 ± 0.8 | −66.5 ± 0.8 | −68.3 ± 0.8 | −58.4 ± 2.5 |
The form is fine. Out-of-fold, the current form explains 61–66% of the total-shift variance. Changing it (quadratic or cubic colour, cubic distance, a brightness interaction) moves that by ≤0.7 points, within about 2σ. The trained profile matches the refit on F1 and is 4–10% too large on F2.
This is the reason feeding u to the trained model removed only about half the effect (§8). The shift is not a function of u alone. Physically, lateral colour comes from optical dispersion, which does not have to weight wavelength the same way u does. The effect is small: 1.2–1.4% of the per-star residual variance, about 1–1.5×10⁻³ px rms, against a chromatic shift that spans ~80×10⁻³ px and that the current model already captures.
One colour number is enough, and the current shift form is right. Linear in colour × quadratic in distance from the axis fits the ~80×10⁻³ px lateral-colour shift. Its trained coefficients agree with a direct refit to 0–10%, and no richer form earns its place (§9).
The colour it is fed is slightly wrong. BP−RP and u both miss the shift by about 1–1.5×10⁻³ px rms, in opposite directions. The best single colour is about 45% BP−RP + 55% u on all four fits. Per-band templates can reach it if each band's shift label is learned rather than fixed at its wavelength (§9). In the stacks, feeding u to the trained model already shrinks the colour dipole by 20–25% (§8), and the mix should do better.
Widths: no colour input does better than BP−RP (§6). The width residuals are linear in colour, so the linear width terms are the right form.
Next step (needs your go-ahead): this is a ~10⁻³ px refinement. If it is worth doing, retrain #14 with learned per-band shift labels, or the mixed colour, on F1 and F2, on a fixed evaluation star set. Then compare §8's stacks, the residual grid and held-out χ² against C5. It is not the cause of the larger residuals under study.