skyscapes.io.exovista#

ExoVista FITS loader – builds a skyscapes.scene.System directly.

Mirrors the legacy skyscapes._legacy.loaders.from_exovista semantics for Star and Disk, but rebuilds each planet as a 1-planet KeplerianOrbit + GridAtmosphere pair stored in the System.planets tuple. No ghost padding – variadic tuples make that unnecessary.

Functions#

_load_star(hdul[, fits_ext])

Load the FITS star extension into a Star.

_load_single_planet(hdul, idx, star, wavelengths_nm, ...)

Load one planet and return (Planet, t0_d).

_load_disk(hdul, fits_ext)

Load the ExoVista disk extension into an ExovistaDisk.

_earth_like_planet_indices_from_hdul(hdul)

Earth-filter logic operating on an already-open HDUList.

get_earth_like_planet_indices(fits_file)

Identify Earth-like planets in an ExoVista FITS file.

from_exovista(fits_file[, planet_indices, ...])

Load an ExoVista FITS file into a scene.System.

Module Contents#

skyscapes.io.exovista._load_star(hdul, fits_ext=4)[source]#

Load the FITS star extension into a Star.

Parameters:
  • hdul (astropy.io.fits.HDUList)

  • fits_ext (int)

Return type:

skyscapes.scene.Star

skyscapes.io.exovista._load_single_planet(hdul, idx, star, wavelengths_nm, trig_solver)[source]#

Load one planet and return (Planet, t0_d).

ExoVista stores the planet (r, v) state vectors already in the on-sky (“bary-sky”) frame – the same frame the disk cube is rendered in – so they are converted to Keplerian elements directly, with NO additional sky rotation. Rotating them again (as an earlier version did) double-applies the system inclination and PA and tilts every planetary system off its disk.

The contrast grid is indexed by phase angle beta = arccos(r_z / |r|), computed at load time with the same trig_solver the runtime System uses; this stays self-consistent with rendering because the grid is keyed by the same orbit.propagate beta used at render time.

Parameters:
Return type:

tuple[skyscapes.scene.Planet, float]

skyscapes.io.exovista._load_disk(hdul, fits_ext)[source]#

Load the ExoVista disk extension into an ExovistaDisk.

The contrast cube is already rendered in the on-sky frame by ExoVista; the system midplane angles (I, PA) live on System.midplane_inc_deg / System.midplane_pa_deg (populated by from_exovista from the same FITS star header), not on the disk itself.

Parameters:
  • hdul (astropy.io.fits.HDUList)

  • fits_ext (int)

Return type:

skyscapes.disk.ExovistaDisk

skyscapes.io.exovista._earth_like_planet_indices_from_hdul(hdul)[source]#

Earth-filter logic operating on an already-open HDUList.

Parameters:

hdul (astropy.io.fits.HDUList)

Return type:

list[int]

skyscapes.io.exovista.get_earth_like_planet_indices(fits_file)[source]#

Identify Earth-like planets in an ExoVista FITS file.

Classification criteria:
  • Scaled semi-major axis: 0.95 <= a / sqrt(L_star) < 1.67 AU

  • Planet radius: 0.8 / sqrt(a_scaled) <= R < 1.4 R_earth

Parameters:

fits_file (str)

Return type:

list[int]

skyscapes.io.exovista.from_exovista(fits_file, planet_indices=None, only_earths=False, load_disk=True)[source]#

Load an ExoVista FITS file into a scene.System.

The system’s midplane inclination and position angle (FITS star header keys I and PA) are applied at load time as a frame rotation of each planet’s state vector before its Keplerian elements are computed. The same angles are stored as System.midplane_inc_deg and System.midplane_pa_deg for downstream diagnostic use.

Args:

fits_file: Path to ExoVista FITS file. planet_indices: Planet indices to load (0-based). None = all. only_earths: If True and planet_indices is None, auto-filter Earths. load_disk: If False, skip the disk extension entirely and set

System.disk to None. Useful when the downstream pipeline cannot render a disk (e.g. a coronagraph without a PSF datacube).

Returns:

scene.System with star, planets (tuple), disk, and midplane metadata.

Parameters:
Return type:

skyscapes.scene.System