Epoch propagation and cross-matching (wcc_sim.astrometry)

Space-motion propagation and cross-matching, for merging sky catalogs.

Catalogs disagree on epoch – Gaia DR3 is at J2016.0, Hipparcos at J1991.25 – and on column names, so both are parameters here. Nothing in this module knows which catalog it is looking at.

wcc_sim.astrometry.as_time(epoch)[source]

A Julian year as a number (2016.0), or a Time, -> Time.

Not “anything Time accepts”: a non-Time goes through Time(f”J{…}”), so it has to be numeric – an ISO date string raises ValueError.

wcc_sim.astrometry.propagate(cat, from_epoch, to_epoch, ra='ra', dec='dec', pmra='pmra', pmdec='pmdec', parallax=None, rv=None)[source]

Copy of cat with positions moved from one epoch to another.

pmra is dRA/dt * cos(dec) in mas/yr, as Gaia and Hipparcos both tabulate it. Rows without proper motion stay where they are. When parallax and rv name columns, they add perspective acceleration – 75 mas, 4.5 px, for alpha Cen over 35 years – and are ignored where the parallax is not positive.

wcc_sim.astrometry.crossmatch(a, b, radius_arcsec, ra='ra', dec='dec')[source]

One-to-one nearest matches between two catalogs.

Returns (idx_a, idx_b) such that row idx_a[k] of a and row idx_b[k] of b are the same star. Where several rows of a fall on one row of b, the closest keeps it and the rest come back unmatched – a merge then adds them instead of silently dropping them.

Rows without a usable position are held out and come back unmatched: a position is read through _column, so a masked RA is not matched at the value under its mask, and match_to_catalog_sky raises on a NaN rather than skipping it.