GSS — Generalised Sky Survey

Introduction

GSS scans photometric survey catalogues on a per-tile basis, computes derived features from the raw measurements, and applies an Isolation Forest to identify objects with atypical feature values relative to the observed population. Identified candidates are cross-matched against SIMBAD, NED, Gaia, and WISE, assigned a set of derived diagnostic scores, and compiled for manual review.

The pipeline ingests three catalogues: SDSS (photometric imaging), Gaia DR3 (astrometry and photometry), and AllWISE (infrared photometry). Each is stored under a distinct source label, with independent tile-scan tracking per source. SDSS and Gaia are scored for anomalies; AllWISE is ingested the same way but serves only as a local crossmatch reference (see Section 5).

SDSS and Gaia report different quantities (SDSS: ugriz photometry and morphological parameters; Gaia: G/BP/RP photometry, parallax, proper motion). The anomaly-detection model is therefore restricted to two features computable identically from either source's photometry: the magnitude difference between the bluest and reddest available band, and the largest single adjacent-band colour difference. The Isolation Forest is fit once, across all SDSS/Gaia objects, using only these two features. Source-specific measurements (SDSS morphology, Gaia astrometry) are retained for diagnostic scoring but do not enter the anomaly model.

Methodology

1. Sky tiling

The sky is divided into 64,800 fixed 1°×1° tiles (360 steps in RA, 180 in Dec). Tile geometry (sky_tiles) is source-independent; scan progress (tile_scans) is recorded per (tile, source) pair, so a given tile's status is tracked separately for each catalogue. Tiles are scanned in order of increasing distance from the celestial equator (ORDER BY ABS(dec_min) ASC), reflecting the coverage geometry of ground-based optical surveys. Each (tile, source) pair takes one of five states: pending, running, complete (data found), no_coverage (no data at this position for this source; not retried), or failed (a query or processing error; retried).

2. Per-source ingestion and quality cuts

SDSS data are queried from PhotoObj via the DR17 SkyServer (Abdurro'uf et al. 2022), restricted to clean=1 AND type=3 (galaxies), with u/g/r/i/z magnitudes in approximately 10–25 (r: 10–22) and positive Petrosian radii. Rows are excluded if:

Gaia data are queried from gaiadr3.gaia_source via the Gaia archive TAP service (Gaia Collaboration, Vallenari et al. 2023), restricted to the tile's RA/Dec bounds with non-null phot_g_mean_mag, phot_bp_mean_mag, and phot_rp_mean_mag. Rows are excluded if phot_g_mean_mag ≤ 0 or parallax_error ≤ 0.

AllWISE data (Cutri et al. 2013) are queried from allwise_p3as_psd via IRSA's TAP service, restricted to the tile's RA/Dec bounds with non-null W1/W2 profile-fit magnitudes. Rows are excluded if either band's magnitude uncertainty ≥ 0.5 mag or either band's contamination/confusion flag is non-zero. W3/W4 are recorded when present but not required, since AllWISE detects them far less often than W1/W2.

3. Anomaly detection

Before fitting, each source's values for the two shared features are normalised independently per source. For a feature value x with per-source median m and median absolute deviation MAD, the normalised value is (xm) / MAD, falling back to the sample standard deviation when MAD is degenerate (≈0 — typically too few rows scanned yet for that source). Normalising against the pooled population instead of per source would let whichever source has the larger scale or denser sampling dominate the fit (Gaia currently contributes several times more rows than SDSS), so an object's anomaly score would partly reflect which catalogue it came from rather than genuine rarity within that catalogue.

A single scikit-learn IsolationForest (Liu, Ting & Zhou 2008; n_estimators=500, max_samples=256 — the subsample size the original paper found sufficient for isolation to emerge independent of dataset size, random_state=42) is fit against the normalised values of all SDSS/Gaia objects scanned to date, using only the two shared features described above (global_colour_span, global_colour_jump), and is not fit separately per source. anomaly_score is the output of score_samples(); more negative values indicate greater isolation from the combined population. contamination is not used, as GSS calls only score_samples() and never predict() or decision_function().

The model is refit from scratch at every tile scan, against whatever population has accumulated so far — it is not cached or persisted between scans. anomaly_score is therefore a function of survey state at scan time, not a fixed per-object quantity: the same object would generally receive a different score if it were rescored later in the survey's history, as the reference population it's compared against grows. Candidate selection (the top_n most isolated objects per tile) is likewise a per-tile operation against this evolving population, not a globally maintained ranking. Section 6 covers how the review pack accounts for this when surfacing what's newly worth attention.

Source-specific measurements — SDSS morphology (concentration, surface brightness, PSF-minus-model magnitude) and Gaia astrometry (parallax, proper motion, RUWE) — are not included in this model. They are used in the diagnostic scoring described in Section 4. AllWISE photometry is never part of this model at all, for any source: see Section 5.

4. Evidence synthesis

Each candidate is assigned a set of derived diagnostics, flags, and a composite review_score (definitions version 0.3, last modified 2026-07-13). Scores are computed once and stored with the definition version that produced them, so a subsequent change to the scoring formula does not alter the record of what a candidate showed at the time of review. Diagnostics that depend on SDSS-specific morphology are omitted, rather than substituted with a default value, for sources that do not report morphology. A candidate with a WISE crossmatch (Section 5) is additionally checked against the W1-W2 > 0.8 mag colour cut (Stern et al. 2012; Assef et al. 2013) — a discriminator for AGN, dust, and cool (L/T) dwarfs rather than any one of those alone — via the wise_red_excess flag; no WISE match means the flag simply does not evaluate. Metric-level definitions are given on each candidate's review page.

5. Crossmatch

Each candidate is queried against SIMBAD and NED (30 arcsec search radius) and Gaia (10 arcsec search radius). WISE is matched differently: rather than a live query, each candidate is matched locally (6 arcsec, AllWISE's own angular resolution) against WISE photometry already ingested by the same per-tile scanning described in Section 2 — so a candidate only picks up a WISE match once that patch of sky has itself been WISE-scanned. A match does not exclude a candidate from review; it applies a fixed +0.25 penalty to the artefact_risk component of the review score.

6. Rank tracking

Because the Isolation Forest is refit at every tile scan against a growing population (Section 3), a candidate's review_score and rank are not stable per-object quantities — rank can move purely from population growth, independent of anything about the object itself. After every scoring run that scored at least one candidate, rank_tracking.py appends a snapshot of the current top 50 candidates by review_score to an append-only rank_history table, keyed to that run's own runs.run_id rather than a separate cycle counter. Comparing consecutive snapshots identifies candidates newly entering the top 50 — the useful signal, as opposed to ordinary re-ranking within an already-stable set — and further distinguishes a genuinely new candidate (no earlier appearance in rank_history at all) from one that existed in an earlier snapshot outside the top 50 and has since climbed in. Both are flagged on the review page.

Implementation notes

Design principles

References