# HD 209458 b full-sector and single-transit cross-check

Status: real public-data comparison record for human verification. Neither fit is a detection, a discovery, a new epoch, or a timing result for publication.

- Task: `jdp-m3-hd-crosscheck`
- Target: HD 209458 b (TIC 420814525), sector 56
- Full-sector record: `research/tess-timing/data/sector56-full-run/run.json`
- Single-transit control: `research/tess-timing/data/sector56-control-run/analysis.json`
- Machine-readable comparison: `research/tess-timing/data/sector56-full-run/comparison.json`

## Why this pair

The earlier cross-check was blocked because no full-sector `run_target` record existed for HD 209458 b. The record was produced once, offline, from the committed products and the committed HD ephemeris, with the existing command and no second fit. It is a new local-input measurement made for this comparison, not a re-analysis selected after seeing a result.

The exact command was:

```
python research/tess-timing/scripts/run_target.py --tpf research/tess-timing/data/real-run/tpf.fits --lightcurve research/tess-timing/data/real-run/lightcurve.fits --ephemeris research/tess-timing/data/sector56-control-run/ephemeris.json --out research/tess-timing/data/sector56-full-run/run.json
```

## Inputs

| Input | Path | Bytes | SHA-256 |
| --- | --- | ---: | --- |
| target pixel file | `research/tess-timing/data/real-run/tpf.fits` | 58,026,240 | `2b5bd6ee4747cfe0c5405c869b871064fd74e4b5f0521c4e6be9fdc2b5c96030` |
| light curve | `research/tess-timing/data/real-run/lightcurve.fits` | 2,039,040 | `1b76b4a4b73e24954fa6e29a7e28a174685113ecdbad1bf10ef0e7b766ce99e9` |
| ephemeris | `research/tess-timing/data/sector56-control-run/ephemeris.json` | 997 | `2af9da76c572f5239b2a2435e6d0faaedef0f92ce1a0b11f37994d07c8c2fb9e` |

Both records name the same three inputs. The full-sector record's recorded SHA-256 values match the committed files above, and the control record names the same digests.

## Path settings

| Setting | Full-sector `run_target` | Single-transit control |
| --- | --- | --- |
| Aperture | 14 pixels, threshold 0.05, annulus 2.0 to 3.5 pixels | 14 pixels, threshold 0.05, annulus 2.0 to 3.5 pixels |
| Detrending window | 101 cadences | 1001 cadences |
| In-transit mask during detrending | applied, 737 cadences | not applied, 0 cadences |
| Fit window | full sector, 17,705 cadences | plus or minus 0.5 d, 720 cadences |
| In-transit cadences in the fit | 503 | 86 |

The aperture is the one setting that is the same. The same threshold and annulus configuration selects the same 14-pixel mask on the same target pixel file, so the aperture does not explain any difference in the depths. The detrending window, in-transit mask, and fit window all differ.

## Mid-transit comparison

| Quantity | Value |
| --- | ---: |
| Full-sector t0 | 2840.879730123 BTJD |
| Full-sector t0 sigma | 1.947203272e-04 d (16.824 s) |
| Single-transit t0 | 2840.878747032 BTJD |
| Single-transit t0 sigma | 2.677319705e-05 d (2.313 s) |
| Difference (full-sector minus single-transit) | +84.939 s |
| Quadrature sigma | 16.982 s |
| Difference / quadrature sigma | +5.002 |

The mid-transit times differ by 84.939 s, which is 5.002 times the quadrature sum of the two formal sigmas. That is a disagreement at the reported precision, not a confirmation.

## Model depth comparison

The compared depth is derived from the fitted radius ratio, `radius_ratio ** 2 / (1 + dilution)`, on both paths. The model depths are not like-for-like: the full-sector path detrends with a 101-cadence running median and masks 737 in-transit cadences, while the single-transit path uses a 1001-cadence running median with no in-transit mask. The full-sector fit uses 17,705 cadences across the sector; the single-transit fit uses 720 cadences in a plus or minus 0.5 d window. A trend fitted over a whole sector and a trend fitted over one transit window do not estimate the same baseline.

| Quantity | Value |
| --- | ---: |
| Full-sector model depth | 2,336.925 ppm |
| Full-sector propagated sigma | 50.217 ppm |
| Single-transit model depth | 15,174.536 ppm |
| Single-transit propagated sigma | 72.495 ppm |
| Difference (full-sector minus single-transit) | -12,837.612 ppm |
| Quadrature sigma | 88.189 ppm |
| Difference / quadrature sigma | -145.570 |

The full-sector model depth is 12,837.612 ppm smaller than the single-transit model depth. The propagated formal sigma is 88.189 ppm in quadrature, so the difference is 145.570 times that sigma. The depths disagree and the disagreement is large. These records cannot establish which path is closer to the true depth, and they cannot apportion the difference among the detrending window, the in-transit mask, and the fit window. The difference is reported without attributing it to a cause.

## Residual RMS

| Quantity | Value |
| --- | ---: |
| Full-sector residual RMS | 1,054.253 ppm |
| Single-transit residual RMS | 586.027 ppm |
| Difference (full-sector minus single-transit) | +468.227 ppm |

The full-sector residual RMS is the scatter around one transit model fitted across the whole sector; the single-transit RMS is the scatter around one model in a plus or minus 0.5 d window. They are diagnostics of different fits, not two estimates of one noise level.

## Honest limits

- This comparison uses two existing local fits. It is not a detection, a discovery, a new epoch, or a novelty claim.
- Neither fit measures the period. Both fix the published period and the same fixed limb darkening, impact parameter, and dilution settings.
- The radius-ratio-derived model depths are not like-for-like because the two paths use different detrending, fit windows, and in-transit masks.
- The propagated depth sigma treats dilution as fixed and uses the marginal radius-ratio sigma. It does not include correlated noise or a full error budget.
- The comparison does not establish which path is closer to the true transit depth or why the depths differ.
- The inputs are a MAST snapshot. Product bytes and availability can change in a later release.

## Reproduction

```
python research/tess-timing/scripts/crosscheck_full_sector.py --check
python -m pytest research/tess-timing/tests/test_crosscheck.py -q
```

The comparison command reads only committed files and makes no network request. The full-sector fit command above is recorded for provenance; this task ran it once and did not run it again.
