Stop calling WASP-108 b imaged, and stop saying no map exists of an imaged exoplanet
48fd6fdtook the archive's ima_flag as it stood, so WASP-108 b's card said it had been imaged as a point of light beside its star. It is a transiting hot Jupiter (period 2.676 d, 0.04 AU out, 0.15 mas at 258.8 pc). Its flag comes from Bohn et al. 2020 (A&A 635, A73), a VLT/SPHERE survey of transiting planets' host stars, which imaged a 0.35 solar-mass companion 0.124" from WASP-108, not the planet. The imaged query now also asks for tran_flag=0. The archive flags exactly one transiting planet as imaged (queried today: WASP-108 b); with it left out the list has 101 names, the old 102 less that one, and still above the validator's floor of 95. The new URL is cached under its own name, and exoplanets.json, regenerated by the full ETL, changes by that one record's field and nothing else (checked record by record against HEAD). build.ts now fails if WASP-108 b is marked imaged. The count cannot see a false positive, and its record carries neither a period nor an axis, so no separation check could. Control: the full ETL on the old query (its cache still present) fails with "WASP-108 b is marked as imaged; it transits, and only a companion star beside it was imaged (Bohn et al. 2020)." The imaged sentence ended "and no map of it exists". Luhman 16 b, one of the 101 and a brown dwarf, was mapped by Doppler imaging (Crossfield et al. 2014, Nature 505, 654). It now reads "and no map of it is used here", which holds for all of them; the doc comment names Luhman 16 b. Control: the old sentence fails "says a directly imaged exoplanet was seen as a point of light" only (1 failed, 843 passed of 844). Live on :4301: WASP-108 b and Kepler-22 b read "no image of this world exists"; Luhman 16 b and HR 8799 b read the new sentence.48fd6fdmissed a third copy of the claim it corrected: the body page's comment still said every exoplanet gets a derived surface "since none has ever been imaged". It now says none has had its surface imaged, as planet-appearance.ts and the README do. A correction to 48fd6fd's message: HR 8799 b, c and d are Marois et al. 2008 (Science 322, 1348), and e is Marois et al. 2010 (Nature 468, 1080), not "b to e (Marois et al. 2008)". Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -175,8 +175,8 @@ export class BodyDetailSceneComponent implements AfterViewInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Real photography wherever it exists, and a surface derived from the body's own measured
|
// Real photography wherever it exists, and a surface derived from the body's own measured
|
||||||
// properties wherever it does not — which is every exoplanet, since none has ever been
|
// properties wherever it does not — which is every exoplanet, since none has had its
|
||||||
// imaged, and the handful of moons no probe returned a usable map of.
|
// surface imaged, and the handful of moons no probe returned a usable map of.
|
||||||
const realTexturePath = bodyTexturePath(viewModel.id);
|
const realTexturePath = bodyTexturePath(viewModel.id);
|
||||||
this.planetMaterial.map = realTexturePath ? loadCachedTexture(realTexturePath) : planetTexture(viewModel.appearance);
|
this.planetMaterial.map = realTexturePath ? loadCachedTexture(realTexturePath) : planetTexture(viewModel.appearance);
|
||||||
// The texture supplies its own colour, so the base stays white rather than tinting it twice.
|
// The texture supplies its own colour, so the base stays white rather than tinting it twice.
|
||||||
|
|||||||
@@ -79,7 +79,9 @@ export function bodyReadouts(body: BodyDetailViewModel): BodyReadouts {
|
|||||||
* large moons, Proteus and Nereid, Cassini Hyperion, and Hubble sees Eris, Haumea and Makemake as
|
* large moons, Proteus and Nereid, Cassini Hyperion, and Hubble sees Eris, Haumea and Makemake as
|
||||||
* points — but has no global map this app can use. So have the hundred or so exoplanets the
|
* points — but has no global map this app can use. So have the hundred or so exoplanets the
|
||||||
* archive flags as imaged, HR 8799's four among them, though only as points of light beside their
|
* archive flags as imaged, HR 8799's four among them, though only as points of light beside their
|
||||||
* star. Only the other exoplanets, known from what they do to starlight, have no image at all.
|
* star — and one of them has a map, not used here: Luhman 16 b, a brown dwarf, mapped by Doppler
|
||||||
|
* imaging (Crossfield et al. 2014, Nature 505, 654). Only the other exoplanets, known from what they
|
||||||
|
* do to starlight, have no image at all.
|
||||||
*/
|
*/
|
||||||
function provenanceFor(body: BodyDetailViewModel): string {
|
function provenanceFor(body: BodyDetailViewModel): string {
|
||||||
if (body.hasPhotography) {
|
if (body.hasPhotography) {
|
||||||
@@ -89,7 +91,7 @@ function provenanceFor(body: BodyDetailViewModel): string {
|
|||||||
body.kind !== 'exoplanet'
|
body.kind !== 'exoplanet'
|
||||||
? 'no global map of this world is used here'
|
? 'no global map of this world is used here'
|
||||||
: body.imaged
|
: body.imaged
|
||||||
? 'it has been imaged only as a point of light beside its star, and no map of it exists'
|
? 'it has been imaged only as a point of light beside its star, and no map of it is used here'
|
||||||
: 'no image of this world exists';
|
: 'no image of this world exists';
|
||||||
return body.appearance.equilibriumTemperatureK === null
|
return body.appearance.equilibriumTemperatureK === null
|
||||||
? `Surface illustrated from this body’s measured size and mass. Its host star is not in the catalogue, so no temperature could be derived. Not an observation — ${why}.`
|
? `Surface illustrated from this body’s measured size and mass. Its host star is not in the catalogue, so no temperature could be derived. Not an observation — ${why}.`
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ describe('buildBodyViewModel', () => {
|
|||||||
// HR 8799 b: photographed beside its star at Gemini and Keck (Marois et al. 2008).
|
// HR 8799 b: photographed beside its star at Gemini and Keck (Marois et al. 2008).
|
||||||
const exoplanet: ExoplanetRecord = { id: 'HR 8799 b', hostStarId: SUN_STAR_ID, hostStarName: 'HR 8799', name: 'HR 8799 b', imaged: true, orbit: { semiMajorAxisAu: 68 } };
|
const exoplanet: ExoplanetRecord = { id: 'HR 8799 b', hostStarId: SUN_STAR_ID, hostStarName: 'HR 8799', name: 'HR 8799 b', imaged: true, orbit: { semiMajorAxisAu: 68 } };
|
||||||
const provenance = bodyReadouts(buildBodyViewModel('HR 8799 b', { bodies: [], exoplanets: [exoplanet], stars: [sun] })!).provenance;
|
const provenance = bodyReadouts(buildBodyViewModel('HR 8799 b', { bodies: [], exoplanets: [exoplanet], stars: [sun] })!).provenance;
|
||||||
expect(provenance).toContain('Not an observation — it has been imaged only as a point of light beside its star, and no map of it exists.');
|
expect(provenance).toContain('Not an observation — it has been imaged only as a point of light beside its star, and no map of it is used here.');
|
||||||
expect(provenance).not.toContain('no image of this world exists');
|
expect(provenance).not.toContain('no image of this world exists');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+9
-2
@@ -438,10 +438,17 @@ function validateExoplanets(exoplanets: ExoplanetRecord[], starIds: Set<number>)
|
|||||||
console.log(` ${withPeriod}/${exoplanets.length} have a measured period, ${withHostMass} a host star mass.`);
|
console.log(` ${withPeriod}/${exoplanets.length} have a measured period, ${withHostMass} a host star mass.`);
|
||||||
|
|
||||||
// The planets photographed by direct imaging, whose card must not say no image of them exists.
|
// The planets photographed by direct imaging, whose card must not say no image of them exists.
|
||||||
// Measured: 102 of 102 flagged in the archive are in the catalogue. What this catches is the
|
// Measured: 101 of 101 flagged in the archive, and not transiting, are in the catalogue. What this
|
||||||
// join by name failing, which would put every one of them back under "no image".
|
// catches is the join by name failing, which would put every one of them back under "no image".
|
||||||
const imaged = exoplanets.filter((exoplanet) => exoplanet.imaged).length;
|
const imaged = exoplanets.filter((exoplanet) => exoplanet.imaged).length;
|
||||||
assertCondition(imaged >= MIN_IMAGED_EXOPLANETS, `Only ${imaged} exoplanets are marked as imaged (at least ${MIN_IMAGED_EXOPLANETS} expected).`);
|
assertCondition(imaged >= MIN_IMAGED_EXOPLANETS, `Only ${imaged} exoplanets are marked as imaged (at least ${MIN_IMAGED_EXOPLANETS} expected).`);
|
||||||
|
// And the one the flag is wrong on, which the count cannot see: a 2.68-day transiting hot Jupiter
|
||||||
|
// 0.15 mas from its star, flagged for the companion star a survey imaged beside it. Its record
|
||||||
|
// carries neither a period nor an axis, so no separation check could catch it either.
|
||||||
|
assertCondition(
|
||||||
|
!exoplanets.some((exoplanet) => exoplanet.id === 'WASP-108 b' && exoplanet.imaged),
|
||||||
|
'WASP-108 b is marked as imaged; it transits, and only a companion star beside it was imaged (Bohn et al. 2020).'
|
||||||
|
);
|
||||||
console.log(` ${imaged} were imaged directly.`);
|
console.log(` ${imaged} were imaged directly.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,11 +41,14 @@ const TAP_URL = `${TAP_BASE_URL}?query=${TAP_QUERY}`;
|
|||||||
// silently wrong rather than visibly broken.
|
// silently wrong rather than visibly broken.
|
||||||
const CACHE_FILE = `exoplanet-archive-ps-${createHash('sha1').update(TAP_URL).digest('hex').slice(0, 8)}.csv`;
|
const CACHE_FILE = `exoplanet-archive-ps-${createHash('sha1').update(TAP_URL).digest('hex').slice(0, 8)}.csv`;
|
||||||
|
|
||||||
// The planets the archive flags as detected by imaging (`ima_flag`): 102 of them in September 2026,
|
// The planets the archive flags as detected by imaging (`ima_flag`): 101 of them in September 2026,
|
||||||
// HR 8799's four and 51 Eri b among them, and bet Pic c and eps Ind A b, found by radial velocity
|
// HR 8799's four and 51 Eri b among them, and bet Pic c and eps Ind A b, found by radial velocity
|
||||||
// and imaged since. Asked for on its own, so adding it did not refetch the table above and move
|
// and imaged since. Asked for on its own, so adding it did not refetch the table above and move
|
||||||
// every other planet to a newer snapshot.
|
// every other planet to a newer snapshot. A transiting planet is left out: the one flagged,
|
||||||
const IMAGED_URL = `${TAP_BASE_URL}?query=select+pl_name+from+ps+where+default_flag=1+and+ima_flag=1+order+by+pl_name&format=csv`;
|
// WASP-108 b, takes its flag from Bohn et al. 2020, a VLT/SPHERE survey of transiting planets' host
|
||||||
|
// stars that imaged a 0.35 solar-mass companion 0.124" from its star. The planet goes round in 2.68
|
||||||
|
// days, 0.04 AU out, 0.15 mas at its 259 pc, and no imager has resolved it.
|
||||||
|
const IMAGED_URL = `${TAP_BASE_URL}?query=select+pl_name+from+ps+where+default_flag=1+and+ima_flag=1+and+tran_flag=0+order+by+pl_name&format=csv`;
|
||||||
const IMAGED_CACHE_FILE = `exoplanet-archive-imaged-${createHash('sha1').update(IMAGED_URL).digest('hex').slice(0, 8)}.csv`;
|
const IMAGED_CACHE_FILE = `exoplanet-archive-imaged-${createHash('sha1').update(IMAGED_URL).digest('hex').slice(0, 8)}.csv`;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user