Give every planet with a distance a star, from the archive where the catalogue has none
After matching, 4 237 planets still had no star: their hosts are too faint for either Gaia query (fainter than G 12 past 50 pc) or too far (past 250 pc), Kepler-186 at 177.6 pc among them. fetchExoplanets now adds one star per such host from the archive's own figures, 3 277 of them, whenever the archive gives a position and a distance: - position carried back from J2016, where the archive publishes it (741 of the 746 matched hosts moving over 100 mas/yr sit nearer their star carried back, a median 0.11" against 3.47" as published), and placed at sy_dist; - magnitude in V (2 999 hosts), else Gaia G (13), the band the catalogue's Gaia stars are already in; 265 have neither, 128 KMT, 95 OGLE and 32 MOA microlensing hosts at a median 6.2 kpc among them, and take the ETL's faint stand-in of 15; - colour as B-V from the archive's B and V, else from st_teff through a new temperatureToColorIndex (Ballesteros 2012, inverted; the Sun's 5 772 K gives 0.65), else left to st_spectype; - ids from 1 070 000 000, past Gaia's two ranges and under the 2^30 validateStars enforces; source "exoplanet-archive". Hosts past 250 pc are included: 399 of the 3 277 are within 250 pc, 1 962 between 250 pc and 1 kpc, 916 beyond. The drawn budget still chooses what is drawn (70 000 of 455 608). Planets with a star: 2 090 -> 6 327 of 6 354. The other 27 have no distance in either table (Luhman 16 A, mu2 Sco, PSR B1620-26 among them). Systems in the Solar Neighbourhood readout: 1 450 -> 4 736. validateExoplanets now refuses a catalogue where fewer than 99.5 % of planets have a host (measured 99.58 %); dropping the added stars fails it at 2 090, and dropping the composite fill at 6 227. No added star sits within an arcsecond of a catalogue star (validateMerge's twins stay at 23); 5 of the 399 within 250 pc have one within a minute of arc, VHS J125601.92-125723.9 (archive 12.7 pc) 5.8" from a Gaia entry at 21.2 pc the likeliest duplicate. In the app, searching TRAPPIST-1 or Kepler-186 and picking the star enters a system with its seven and five planets drawn. gzip -9: stars.bin 5 030 741 -> 5 067 864 B, stars-meta.bin 2 784 614 -> 2 804 064, stars-index.json 4 003 584 -> 4 015 882, exoplanets.json 342 467 -> 446 532 (host parameters, both commits). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { parseSpectralClass, SPECTRAL_CLASSES, spectralTypeToColorIndex } from './spectral';
|
||||
import { parseSpectralClass, SPECTRAL_CLASSES, spectralTypeToColorIndex, temperatureToColorIndex } from './spectral';
|
||||
|
||||
describe('parseSpectralClass', () => {
|
||||
it('reads a clean class and subclass', () => {
|
||||
@@ -83,3 +83,20 @@ describe('spectralTypeToColorIndex', () => {
|
||||
expect(spectralTypeToColorIndex('')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('temperatureToColorIndex', () => {
|
||||
it("puts the Sun's temperature at its own B-V and a cool dwarf redder", () => {
|
||||
expect(temperatureToColorIndex(5772)).toBeCloseTo(0.65, 2);
|
||||
expect(temperatureToColorIndex(3400)).toBeCloseTo(1.79, 2);
|
||||
});
|
||||
|
||||
it('stays inside the range the spectral classes span', () => {
|
||||
expect(temperatureToColorIndex(2566)).toBe(2);
|
||||
expect(temperatureToColorIndex(50000)).toBe(-0.33);
|
||||
});
|
||||
|
||||
it('has no answer for a temperature that is not one', () => {
|
||||
expect(temperatureToColorIndex(0)).toBeNull();
|
||||
expect(temperatureToColorIndex(Number.NaN)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -87,3 +87,23 @@ export function spectralTypeToColorIndex(spectralType: string | null | undefined
|
||||
|
||||
return from + (to - from) * (subclass / 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* B-V colour index for an effective temperature, for stars the Exoplanet Archive gives a
|
||||
* temperature but no B magnitude. Inverts Ballesteros (2012), T = 4600 K · (1 / (0.92 (B-V) +
|
||||
* 1.7) + 1 / (0.92 (B-V) + 0.62)), a blackbody fit good to a few per cent from A to early M: it
|
||||
* puts the Sun's 5 772 K at 0.65, which is the Sun's own. Clamped to the range the class anchors
|
||||
* above span, because the fit runs on past it — TRAPPIST-1's 2 566 K would come out at 2.7.
|
||||
*/
|
||||
export function temperatureToColorIndex(temperatureK: number): number | null {
|
||||
if (!Number.isFinite(temperatureK) || temperatureK <= 0) {
|
||||
return null;
|
||||
}
|
||||
// With x = 0.92 (B-V) and k = T / 4600 the fit is k x² + (2.32 k - 2) x + (1.054 k - 2.32) = 0,
|
||||
// whose larger root is the physical one.
|
||||
const k = temperatureK / 4600;
|
||||
const b = 2.32 * k - 2;
|
||||
const c = 1.054 * k - 2.32;
|
||||
const x = (-b + Math.sqrt(b * b - 4 * k * c)) / (2 * k);
|
||||
return Math.min(BEYOND_M, Math.max(COLOR_INDEX_ANCHORS.O, x / 0.92));
|
||||
}
|
||||
|
||||
@@ -7,7 +7,9 @@ import { OrbitalElements } from './body.model';
|
||||
export interface ExoplanetRecord {
|
||||
id: string;
|
||||
/**
|
||||
* The host's star-catalogue id, the HYG or Gaia star it was matched to; null when none is.
|
||||
* The host's star-catalogue id: a HYG or Gaia star it was matched to, or else a star the ETL
|
||||
* added from the archive's own figures. Null only when the archive gives no position and
|
||||
* distance to place one with.
|
||||
*/
|
||||
hostStarId: number | null;
|
||||
hostStarName: string;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user