Why C4 keeps a blue/red colour residual
The paper1_final reference fit on C4 (tess2020087042920) leaves a colour residual that the other four Paper 1 fields do not show. This page covers Phase A and Phase B: what the residual is, what causes it, and how large it is in photometry. Phase B repeated the same measurements on the final e2e run3 C4 products and found no change.
Conclusion
The residual is a property of camera 4 CCD 2's PSF. Crowding, blended Gaia colours and the template are ruled out as causes. At 2–4 px from a red star (BP−RP 1.5–2.2) the data hold about 5–7 ppt of the star's flux less than the A3 model predicts, relative to mid-colour stars. Blue stars show the mirror excess. The other four fields show about 1 ppt. The raw FFI of the same CCD in a different sector shows the same deficit (−7.4 ± 1.0 ppt, against about −1.7 on raw FFIs of other CCDs).
Photometry: on the exact 15×15 fit stamps this is a redistribution of light (2–4 px: −5.1 ± 0.5 ppt; 4–7 px: +5.0 ppt). It adds no net flux bias beyond what every field already has. Separately, all five fields under-model red stars' far wing (4–7 px, +2 to +6 ppt), so red stars' fitted flux is 0.4–0.8% low relative to mid stars. That generic term belongs to the red-core work (W5).
Confidence: high that it is the camera-4 CCD-2 PSF and not crowding, colour or template. The raw-FFI replication is about 4.4σ against the other CCDs, and the C4 products alone are more than 10σ from the other fields. The physical mechanism inside the camera is not established. Next: Phase B (automatic) checks the final per-band products. Phase C, which would add a model term able to express the halo (for example the existing chroma_halo leaf), runs only on request.
The residual
Method
Each star's residual stamp $R(\mathbf{u})$ is the data minus the model, divided by the star's fitted flux. It is sampled on a 33×33 raster with 0.25 px cells out to ±4 px. Every star is fitted with the same basis, built from the field's median model image $P$:
- $\mathbf{u}$: position relative to the star centre [TESS px].
- $P$: median model/flux image of T10–13 stars in the field, the same for every star.
- $a$: flux error, as a fraction of the star's flux.
- $(d_x,d_y) = -(b_x,b_y)$: centroid displacement of the data relative to the model [px], rotated into $d_{ax}$ (toward the optical axis) and $d_{tan}$ (perpendicular to it).
- $w_x, w_y$: width terms [px²]; negative means the data are sharper than the model.
- $c$: flat pedestal [fraction of flux per px²].
- $I_{\rm ring}$: residual light in a ring (r<1, 1–2, 2–3.6 px), as a fraction of the star's flux.
- $A_{\rm ring}$: ring area [px²].
- $\langle R\rangle_{\rm ring}$: mean of the filled raster cells in the ring. The rasters fill only about 25% of cells per star; see Bugs below.
Red − mid is the median over red stars (BP−RP 1.5–2.2) minus the median over mid stars (BP−RP 0.85–1.15). Errors are 1σ bootstrap over stars. Stars are binned by Gaia BP−RP throughout; the fit itself uses the Gaia-XP colour $u$, which on C4 is typically 0.02 mag from BP−RP. The exact-pixel ring test skips the raster: for each star it divides Σ residual over the valid pixels of the 15×15 fit stamp in a ring by the star's fitted flux. Sign and scale were checked on synthetic shifts (0.02 and −0.03 px recovered to 3%) and on a sparse 1% flux error.
Tests
| Cause tested | Test | Result | Verdict |
|---|---|---|---|
| H1 blended Gaia colours pull the colour terms toward zero | A2 colour coefficients; A3 BP/RP contamination within 4″, u − BP−RP | C4 terms match the other fields and are stable across folds; 390 of 409 red stars have no contaminant; deficit flat across flags | ruled out |
| H2 environment: neighbour or background light that correlates with colour | A1b scaling with Tmag; A3 neighbour light <2 px, 2–4 px, density | Deficit is a fixed fraction of the star's flux (e⁻/s falls about 20×); flat in every environment flag | ruled out |
| H3 camera-4 optics or detector | A4 the same metric on 11 chroma_v2 A3 lanes, including raw FFIs | Every camera-4 CCD-2 fit shows it (raw S20 −7.4, old C4 lane −5.2, C4 product −5.45); 13 other fits −0.6 to −2.7 | supported |
| H4 template colour mismatch | A4 raw FFI (no template); Phase B per-band final image | Present without any template; unchanged with the new per-band templates | ruled out (Phase B) |
Ring average or one-sided? (follow-up)
To check whether this is a halo, each star's residual is split per 0.25 px ring in the axis frame, with $\theta = 0$ pointing from the star to the optical axis:
- $m_0$: ring average.
- $c_1$: one-sided part along the axis; positive means more light toward the axis.
- $s_1$: one-sided part across the axis.
- $c_2$: radial-minus-tangential elongation.
- $I_0 = 2\pi r\,\Delta r\,m_0$: ring light [fraction of flux].
- $D_1 = \pi r^2\,\Delta r\,c_1$: the ring's contribution to the residual light's centroid along the axis [px].
| red − mid | other paper fields | raw cam2 / cam3 | C4 | raw cam4 CCD2 | old C4 lane |
|---|---|---|---|---|---|
| $I_0$, 2–3.75 px [ppt] | −1.1…−1.3 | −1.0, −1.9 | −6.5 ± 0.2 | −8.1 ± 0.5 | −5.8 ± 0.4 |
| $D_1$, 2–3.75 px [mpx] | −2.3…+1.7 | −5.0, −5.0 | −10.4 ± 0.3 | −9.3 ± 0.8 | −5.6 ± 0.5 |
| $D_1$, 1–2 px [mpx] | −1.8…−2.9 | −1.1, −3.4 | −4.8 | −5.8 | −3.7 |
Reading: this is not a halo. On every CCD, the shoulder and inner wing (1–3.5 px) change with colour more than the A3 terms allow, both symmetrically and as coma. Camera 4 CCD 2 shows the same pattern 2–5× stronger. The A3 shift, blur, dilation and kurtosis are fitted per CCD but constrained mostly by the bright core, so the wing cannot follow colour on its own. One model change for all CCDs (a colour × wing-profile term and a colour × coma term) would let each CCD's fit set its own amplitude. This is untested (Phase C, on request).
Key numbers
| Fit | red − mid, 2–3.6 px [ppt] | 2–4 px, exact pixels [ppt] | whole stamp [ppt] | halo slope [ppt per mag BP−RP] |
|---|---|---|---|---|
| F1 (S24 cam2 CCD2) | −1.36 ± 0.36 | −0.71 ± 0.28 | +4.38 ± 1.03 | −2.40 ± 0.24 |
| F2 (S20 cam3 CCD3) | −1.00 ± 0.32 | −0.79 ± 0.36 | +6.40 ± 0.76 | −2.87 ± 0.25 |
| S22 (S22 cam3 CCD3) | −1.08 ± 0.29 | −0.17 ± 0.35 | +6.16 ± 0.77 | −2.73 ± 0.25 |
| C1 (S24 cam1 CCD2) | −1.17 ± 0.26 | −0.36 ± 0.41 | +8.26 ± 1.06 | −2.80 ± 0.24 |
| C4 (S23 cam4 CCD2) | −5.45 ± 0.32 | −5.08 ± 0.46 | +2.24 ± 1.33 | −9.03 ± 0.27 |
| Raw FFI S20 cam4 CCD2 (chroma_v2 A3) | −7.41 ± 0.95 | – | – | – |
Column 2: product rasters, in-sample, T10–13. Columns 3–4: exact-pixel ring test, product fits, T10–13. Column 5: held-out stars, T10–13, OLS slope over BP−RP 0.5–2.2.
Bugs found and fixed
Both were in this investigation's own analysis code and were fixed before any number was reported.
- Sparse-raster integrals 4× too small. Each star's raster fills only about 25% of its cells, so the first
nansum × H²ring integrals undercounted by 4×. They are now computed as area × mean of filled cells; a test is incode/test_sign.py. The fitted coefficients and all field-to-field ratios were unaffected. - Wrong normalisation in the first ring test. It divided by Σ model in the ring, but the stamp model includes neighbours' light. It now divides by the star's fitted flux.
Phase B: the final run3 C4 products
A read-only watcher reran these measurements once run3 C4 finished (10-08 19:56), using the run's own code pin. Run3 uses the verified ledger neighbours, new per-band templates and a refit on the final image. The residual is unchanged.
| red − mid, C4, T10–13 | reference | run3 boot | run3 final |
|---|---|---|---|
| held-out halo 2–3.6 px [ppt] | −6.34 ± 0.37 | −6.16 ± 0.31 | −5.81 ± 0.42 |
| exact stamp ring 2–4 px [ppt] | −5.08 ± 0.46 | −5.13 ± 0.43 | −4.91 ± 0.37 |
| exact stamp ring 4–7 px [ppt] | +5.01 ± 0.62 | +4.88 ± 0.67 | +4.50 ± 0.54 |
| whole 15×15 stamp [ppt] | +2.2 ± 1.3 | +2.2 ± 1.3 | +1.9 ± 1.0 |
| radial colour shift dax [mpx] | +1.2 ± 0.5 | +1.4 ± 0.4 | +1.3 ± 0.4 |
All 17 A3 colour terms in run3's fit and refit lie within about one fold-to-fold σ of the reference, so they are not pulled toward zero. This rules out the template and the neighbour list as causes and confirms the camera-4 PSF explanation. The run3 per-band kernels are distilled from this ePSF, which fits C4's larger red-core residual and its failed red-star G4 criterion (see the C4 G4 canvas). A model term that can express it (Phase C) runs only on request.
Records
- Run record: /astro/armin/koji/syndiff/dev_runs/c4_colour_dipole_20261008/README.md (code in code/, figures in figs/, numbers in out/)
- Inputs: dev_runs/paper1_final_fits_20261007/eval/ and dev_runs/chroma_v2_20260928/eval/*_A3_u_quad_elong/
- Shared with other sessions: A2 table to the W3 lead; blending flags out/a3_blending_flags_{C4,F1}.csv and the generic red-wing finding to the red-core session
- Canvas source: /home/kshukawa/syndiff_pipeline/doc/c4_colour_dipole_canvas/