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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user