Bright-star supplement (wcc_sim.brightcat)

Bright-star supplement: the stars Gaia DR3 does not have.

Gaia’s brightest source is G = 1.73 and it holds only 150 sources brighter than G = 3, so the naked-eye stars whose scattered-light halo drives WCC stray-light requirements are missing from it entirely – alpha Cen A and B, for instance, have no DR3 entry at all. This module fills that end from XHIP (VizieR V/137D, Hipparcos plus radial velocities), normalizes the rows into the Gaia-shaped table the rest of the pipeline expects, and merges them by positional cross-match.

wcc_sim.brightcat.XHIP_CATALOG = 'V/137D/XHIP'

the Extended Hipparcos Compilation (Anderson & Francis 2012).

Type:

VizieR table

wcc_sim.brightcat.XHIP_EPOCH = 1991.25

Epoch of the XHIP positions. The columns are named RAJ2000/DEJ2000, but J2000 there is the equinox, not the epoch: the values are byte-identical to I/239/hip_main’s RAICRS/DEICRS, which are documented as J1991.25. Reading them as epoch J2000 puts alpha Cen 32 arcsec off.

wcc_sim.brightcat.query_bright(ra_deg, dec_deg, radius_arcsec, cache_dir=None)[source]

XHIP rows within radius_arcsec of (ra, dec), cached like query_gaia.

A failure of the service is not fatal: it warns and returns an empty table so the caller can carry on with Gaia alone.

A response missing any of XHIP_COLUMNS is treated the same way: the broad except covers only the network call, and a KeyError out of to_gaia_like later would defeat it.

An empty result is ambiguous on its own – the WCC field is 162” x 108”, so most pointings hold no XHIP row and an empty table is the normal outcome – so the distinction is recorded on the returned table’s meta[“bright_query_ok”]: True whenever the service or the cache was actually consulted, False when the query failed. merge reads it, and reports “consulted, nothing to add” rather than “not filled”.

wcc_sim.brightcat.to_gaia_like(bright)[source]

XHIP rows as a Gaia-shaped catalog, positions still at XHIP_EPOCH.

The magnitude path is the point of this function. Hipparcos gives Johnson V and B-V; the rate model is normalized in Gaia G. So: pick the Pickles template whose synthetic B-V is nearest the star’s for the SED, and set G = V + (G-V) interpolated at the star’s own B-V. The interpolation matters: the nearest template’s own G-V would make G a step function of colour, 0.55 mag across the M2V/M4V boundary for a 0.015 mag change in B-V. BP and RP are set from the chosen template’s synthetic BP-RP, so spt_from_bp_rp recovers the type and the colour interpolation in rates_for_catalog lands on that template’s own rate. No empirical colour relation is involved.

The template set is dwarfs-only, so a giant is assigned a dwarf’s G-V: Aldebaran (K5III) comes out roughly 0.5-1 mag too bright. See the spec’s “Out of scope”.

Rows without a usable V magnitude or a finite position are dropped with a warning, one per reason.

wcc_sim.brightcat.merge(gaia, bright, epoch=None, replace_mag=6.0, match_radius_arcsec=2.0, gaia_epoch=2016.0)[source]

Gaia plus the bright rows it is missing, all at one epoch.

Returns (merged, info). Both catalogs are propagated to a common epoch before matching: Gaia is at J2016.0 and Hipparcos at J1991.25, and a 3.7 arcsec/yr star is 92 arcsec from itself across that gap, so an un-propagated match would add it twice.

Policy, per matched pair: brighter than replace_mag in G the bright row replaces the Gaia one, which is where DR3’s saturation systematics live; fainter, Gaia wins and the duplicate is dropped. Unmatched bright rows are added – the gap-filling case.

Row order is deliberately asymmetric. A merged table is sorted brightest-first in G, so row 0 – the row the PSF report decomposes – is the brightest star in the field whichever catalog it came from. An un-supplemented table (no bright rows) is returned in its input order, untouched, so every existing simulation is unchanged.

epoch=None means the Gaia epoch, so Gaia positions do not move and an empty bright table gives back the input catalog untouched.

bright_catalog in the returned info separates “consulted” from “not consulted”, never “empty” from “non-empty”: a successful query over a cone with no bright star reports “hipparcos” with n_bright_added = 0, and only a failed query reports None. The distinction rides on bright.meta[“bright_query_ok”], set by query_bright; a hand-built table without the key counts as a successful supply.