Skip to content

Model the annual aberration of light in the astrometric kernels - #990

Open
Cybis320 wants to merge 1 commit into
fix-nutation-framefrom
aberration-correction
Open

Model the annual aberration of light in the astrometric kernels#990
Cybis320 wants to merge 1 commit into
fix-nutation-framefrom
aberration-correction

Conversation

@Cybis320

@Cybis320 Cybis320 commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Stacked on #989 (base branch fix-nutation-frame); only the aberration change shows in the diff. Rebased from the study branch aberration-correction and simplified: the correction is always on, there is no .config option.

Summary

The star catalog gives barycentric directions; the camera sees them displaced by the annual aberration of light, up to 20.5″ towards the apex of the Earth's motion. Across a night's hour-angle range the alt/az projection of that displacement changes by up to ~0.6′. Without a model, the star fit absorbs it into RA_d, dec_d and pos_angle_ref: the fitted pointing of a fixed camera wanders through the night (the residual "chase" left in the calibration variation plots after the precession fix), and the platepar's reference pointing is not the true pointing.

  • cyraDecToXY displaces catalog directions by the aberration before projecting; cyXYToRADec removes it. The platepar then describes the true pointing and stars still come out at their catalog positions.
  • Earth's velocity from the Keplerian orbit (Meeus ch. 25, mean longitudes referred to the J2000 equinox): 0.02″ from erfa's epv00 + ab.

Stars and meteors are different frames

Light from a meteor is not aberrated: source and observer move together (the 0.3 ms light-time displacement and the aberration cancel exactly to first order). So:

conversion stars (measurement=False, default) image measurements (measurement=True)
xyToRaDecPP aberration removed → catalog direction left in → geometric direction in the Earth's frame, which is what a trajectory solver uses
raDecToXYPP catalog direction aberrated, then projected projected as is (new keyword)

The fit, star matching, photometry and the sky residuals all go through the star path. Every caller that converts meteor centroids or picks already passes measurement=True (applyPlateparToCentroids, applyAstrometryFTPdetectinfo, the ECSV writer, EventMonitor, SkyFit2 and Astra picks), so FTPdetectinfo gets Earth-frame directions with no further change. Callers that project Earth-frame objects through the star path (satellite positions, FOV footprints, EventMonitor's trajectory projection) are off by the 20″, i.e. 0.1 to 0.3 px at GMN scales, and were left alone.

Without this distinction (the study branch removed the aberration for everything), meteor directions would have stayed where they are today: biased by the aberration, because the uncorrected fit absorbs it and the removal then takes it out again.

Verification

Tests/test_aberration.py: shift magnitude and inverse, velocity against erfa (0.1″), forward/reverse round trips for both paths, that a measurement at a star's pixel comes out at the star's apparent (aberrated) direction to 0.01″, and the star fit as in real life on the distortion-free synthetic camera of #989's test: with the platepar holding the true pointing, stars project to their catalog directions (erfa velocity aberration inverted) within 0.5″ over the whole 82×46° frame through the night, with no roll (0.3″) or scale (0.1″) error. Today's kernel on the same test drifts 33″ at the centre over a night and leaves 7 to 15″ at the corners that no pointing or rotation refit can absorb.

44 nights from 17 GMN stations, recalibrated with the correction off and on (study branch): the fits move by the predicted amount (slope 1.01 in altitude, 0.99 in azimuth, expected 1.00, for every lens, pointing and season including two southern stations), and the settled-night altitude drift of the quiet cameras drops by about 40%. The residual after the correction has no aberration signature (slope 0.01 on the prediction) and does not repeat by sidereal time; it is thermal and mechanical. The nutation error fixed in #989 contributes only a constant offset within a night (its diurnal wander is 0.02 to 0.09′ p2p for the study dates), so those conclusions carry over.

USV001 2026-09-05 (217 FFs, 693 meteor centroids), this branch against the study's runs:

off study on this branch
star-match residual 0.1587 px 0.1594 px 0.1586 px
settled pointing scatter alt / az 0.156′ / 0.076′ 0.057′ / 0.068′ 0.057′ / 0.061′
meteor centroid shift vs off, mean / max 6.4″ / 16.5″ 16.9″ / 29.3″

The aberration at those centroids' directions and times is 16.8″ mean (20.2″ max); the measured shift divided by it has a median of 0.98. The maximum includes the constant 7 to 9″ from the nutation fix. The study run moved the meteors only by the part of the aberration that a rigid pointing shift cannot absorb across this 82° field.

What changes for users

  • Meteor RA/Dec and alt/az in FTPdetectinfo move by the aberration at the meteor's direction, up to 20.5″ (direction-dependent, so not a common-mode shift between stations): ~10 m at 100 km range and ≲0.01° in radiants, systematic with respect to the apex. WMPL treats the observations as geometric Earth-frame directions, so this removes a bias rather than adding a correction to be undone downstream.
  • Existing platepars absorbed the aberration of their fit date; applied without a refit they are off by the difference to today's aberration (up to ~0.6′ seasonally). The nightly recalibration refits them. In the calibration variation plots the corrected fits sit at a constant offset from an uncorrected reference platepar until the reference is refitted.
  • The kernel keyword aberration (default True) remains on cyraDecToXY / cyXYToRADec for tests and for reproducing the old behaviour.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CzZHCZoftFjV712njkWB5v

The star catalog gives barycentric directions; the camera sees them
displaced by the annual aberration, up to 20.5 arcsec towards the apex
of the Earth's motion, and the displacement changes by up to ~0.6
arcmin across a night's hour-angle range and through the year. Without
a model the star fit absorbs it into RA_d, dec_d and pos_angle_ref, so
the fitted pointing of a fixed camera wanders in alt/az over the night
(the residual "chase" in the calibration variation plots) and the
platepar's reference pointing is not the true pointing.

cyraDecToXY now displaces catalog directions by the aberration before
projecting them, and cyXYToRADec removes it, so the platepar describes
the true pointing and stars still come out at their catalog positions.
The Earth's velocity is from the Keplerian orbit (Meeus ch. 25, mean
longitudes referred to J2000), 0.02 arcsec from erfa's epv00 + ab.

The pipeline distinguishes stars from image measurements: light from a
meteor in the atmosphere is not aberrated (source and observer move
together), so for measurement=True xyToRaDecPP leaves the aberration
in and returns the geometric direction in the Earth's frame, which is
what a trajectory solver uses. Every caller that converts meteor
centroids or picks already passes measurement=True. raDecToXYPP gets
the same keyword for projecting Earth-frame directions. The correction
is always on; there is no configuration option. The kernel keyword
`aberration` (default True) remains for tests and for callers that
need the old behaviour.

Verified against erfa (0.1 arcsec), by round trips, on a distortion-free
synthetic camera followed through the night at off-centre pixels (the
star fit stays on the catalog directions to 0.5" over the whole frame,
with no roll or scale error), and by
recalibrating 44 nights from 17 GMN stations with the correction off
and on: the fits move by the predicted amount (slope 1.01 / 0.99 in
alt/az, expected 1.00) and the settled-night altitude drift of quiet
cameras drops by roughly 40%. Star-fit residuals are unchanged. Meteor
astrometry changes by the aberration at the meteor's direction, up to
20.5 arcsec; existing platepars absorb the change on their next refit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzZHCZoftFjV712njkWB5v
@Cybis320
Cybis320 force-pushed the aberration-correction branch from fc531e0 to e7b200f Compare September 6, 2026 18:53
Cybis320 added a commit that referenced this pull request Sep 6, 2026
…d geodetic kernels

Follows the cherry-picks of the nutation fix (#989), the aberration
correction (#990) and the refraction model (#991) onto this branch. The
RA/Dec kernels took the scale with #991; this branch's own kernels and
their iterative inverses (cyXYToAltAz, cyAltAzToXY, cyRaDecToXY_iter,
cyXYHttoENU_wgs84, cyXYToGeo_wgs84, cyENUToXY_iter, cyENHtToXY_iter,
cyGeoToXY_wgs84_iter) now take a refraction_scale argument as well, and
every wrapper and Platepar method passes refractionScale(elev), so the
alt/az and ENU paths refract consistently with the RA/Dec path. The
finite-target-height fraction is provided but not yet applied in the
height-aware kernels.

Tests adapted to the merged kernels: the refraction fit test builds its
star truth as the catalog direction (aberration removed) when the
kernels model the aberration; the pointing test converts the platepar's
epoch-of-date pointing to J2000 with the kernels' own transform, which
now includes the nutation; the ENU -> XY round-trip tolerance reflects
the solver's 0.01 px step criterion, which leaves up to ~0.1 px at low
altitude with refraction.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzZHCZoftFjV712njkWB5v
Cybis320 added a commit that referenced this pull request Sep 6, 2026
… the aberration

When the kernels model the annual aberration (#990), a star's catalog
direction is its Earth-frame direction with the aberration removed; the
test's synthetic star truth now does the same when removeAberration is
available, and the fitted platepar is evaluated through the star path,
so the test passes before and after #990.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzZHCZoftFjV712njkWB5v
Cybis320 added a commit that referenced this pull request Sep 6, 2026
…c kernels (includes PR #989 nutation fix)

# Conflicts:
#	RMS/Astrometry/ApplyAstrometry.py
Cybis320 added a commit that referenced this pull request Sep 6, 2026
…he finite-target-height fraction

Resolutions against the already-merged PRs #987 and #990:
- Kernel signatures carry both the aberration flag (#990) and
  refraction_scale (#991); the calibrated wrappers pass both.
- Platepar keeps the epoch-of-date pointing converters from #987 and
  scales their scalar refraction helpers with refractionScale(elev).
- alpha2's iterative inverter cyRaDecToXY_iter / raDecToXYPP_iter gets
  the same aberration shift and refraction scale as the forward kernel,
  so the display projection stays an exact round trip.
- The #987 pointing test now checks at the station's refraction scale.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant