orbix.observatory.solar_system#

Solar system body positions using Vallado (2013) static ephemerides.

All positions are heliocentric ecliptic, in AU. Time inputs are MJD.

This module is a pure-JAX port of the keplerplanet method in EXOSIMS.Prototypes.Observatory, using orbix’s own Kepler solver.

Reference:

Vallado, D. A. (2013). Fundamentals of Astrodynamics and Applications. Appendix D.4 – Planetary ephemerides.

Attributes#

Functions#

_mjd_to_julian_centuries(mjd)

Convert MJD to Julian centuries since J2000.

obliquity_deg(mjd)

Obliquity of the ecliptic in degrees (Vallado polynomial).

_rot1(theta)

Rotation matrix about axis 1 (x).

_rot3(theta)

Rotation matrix about axis 3 (z).

equat2eclip(r_equat, mjd)

Rotate heliocentric equatorial -> ecliptic.

eclip2equat(r_eclip, mjd)

Rotate heliocentric ecliptic -> equatorial.

_pad(coeffs[, n])

Pad coefficient list to length n with zeros.

_pack_planet(raw)

Pack planet ephemeris dict into a (6, NCOEFF) array.

_eval_elements(coeffs, TDB)

Evaluate all 6 orbital element polynomials at once.

planet_position_ecliptic(body, mjd)

Heliocentric ecliptic position of a solar system body.

planet_position_equatorial(body, mjd)

Heliocentric equatorial position of a solar system body.

earth_position_ecliptic(mjd)

Heliocentric ecliptic position of Earth (AU).

earth_position_equatorial(mjd)

Heliocentric equatorial position of Earth (AU).

radec_to_ecliptic(ra_rad, dec_rad, mjd)

Convert equatorial RA/Dec to ecliptic longitude/latitude.

sun_target_angle(obs_position_eclip, ra_rad, dec_rad, mjd)

Angular separation between the Sun and a target as seen from the observatory.

solar_elongation_ecliptic(obs_position_eclip, ...)

Solar elongation (angle between Sun and target as seen from observer).

Module Contents#

orbix.observatory.solar_system._J2000_JD = 2451545.0#
orbix.observatory.solar_system._J2000_MJD = 51544.5#
orbix.observatory.solar_system._JULIAN_CENTURY = 36525.0#
orbix.observatory.solar_system._mjd_to_julian_centuries(mjd)[source]#

Convert MJD to Julian centuries since J2000.

Parameters:

mjd (float)

Return type:

float

orbix.observatory.solar_system.obliquity_deg(mjd)[source]#

Obliquity of the ecliptic in degrees (Vallado polynomial).

Parameters:

mjd (float) – Modified Julian Date.

Returns:

Obliquity in degrees.

Return type:

float

orbix.observatory.solar_system._rot1(theta)[source]#

Rotation matrix about axis 1 (x).

Parameters:

theta (float)

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system._rot3(theta)[source]#

Rotation matrix about axis 3 (z).

Parameters:

theta (float)

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.equat2eclip(r_equat, mjd)[source]#

Rotate heliocentric equatorial -> ecliptic.

Parameters:
  • r_equat (jax.numpy.ndarray) – Position vector(s) in equatorial frame, shape (3,) or (n, 3).

  • mjd (float) – MJD (scalar) for obliquity calculation.

Returns:

Position vector(s) in ecliptic frame, same shape as input.

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.eclip2equat(r_eclip, mjd)[source]#

Rotate heliocentric ecliptic -> equatorial.

Parameters:
  • r_eclip (jax.numpy.ndarray) – Position vector(s) in ecliptic frame, shape (3,) or (n, 3).

  • mjd (float) – MJD (scalar) for obliquity calculation.

Returns:

Position vector(s) in equatorial frame, same shape as input.

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system._NCOEFF = 4#
orbix.observatory.solar_system._EPHEM_RAW#
orbix.observatory.solar_system._pad(coeffs, n=_NCOEFF)[source]#

Pad coefficient list to length n with zeros.

Parameters:
Return type:

list

orbix.observatory.solar_system._pack_planet(raw)[source]#

Pack planet ephemeris dict into a (6, NCOEFF) array.

Row order: a, e, I, O, w, lM.

Parameters:

raw (dict)

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system._EPHEM: dict[str, jax.numpy.ndarray]#
orbix.observatory.solar_system._eval_elements(coeffs, TDB)[source]#

Evaluate all 6 orbital element polynomials at once.

Parameters:
  • coeffs (jax.numpy.ndarray) – Shape (6, NCOEFF) – rows are [a, e, I, O, w, lM].

  • TDB (float) – Julian centuries since J2000.

Returns:

Shape (6,) – [a, e, I_deg, O_deg, w_deg, lM_deg].

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.planet_position_ecliptic(body, mjd)[source]#

Heliocentric ecliptic position of a solar system body.

Uses Vallado (2013) Algorithms 2 and 10 – Keplerian elements propagated with polynomial time corrections. All 6 orbital elements are evaluated in a single vectorized matmul.

Parameters:
  • body (str) – Planet name (e.g. "Earth", "Jupiter").

  • mjd (float) – Modified Julian Date (scalar).

Returns:

Position vector in heliocentric ecliptic frame (AU), shape (3,).

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.planet_position_equatorial(body, mjd)[source]#

Heliocentric equatorial position of a solar system body.

Parameters:
  • body (str) – Planet name (e.g. "Earth").

  • mjd (float) – Modified Julian Date (scalar).

Returns:

Position vector in heliocentric equatorial frame (AU), shape (3,).

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.earth_position_ecliptic(mjd)[source]#

Heliocentric ecliptic position of Earth (AU).

Parameters:

mjd (float)

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.earth_position_equatorial(mjd)[source]#

Heliocentric equatorial position of Earth (AU).

Parameters:

mjd (float)

Return type:

jax.numpy.ndarray

orbix.observatory.solar_system.radec_to_ecliptic(ra_rad, dec_rad, mjd)[source]#

Convert equatorial RA/Dec to ecliptic longitude/latitude.

Parameters:
  • ra_rad (float) – Right ascension in radians.

  • dec_rad (float) – Declination in radians.

  • mjd (float) – MJD for obliquity calculation.

Returns:

(ecliptic_lon_rad, ecliptic_lat_rad) tuple.

Return type:

tuple

orbix.observatory.solar_system.sun_target_angle(obs_position_eclip, ra_rad, dec_rad, mjd)[source]#

Angular separation between the Sun and a target as seen from the observatory.

Parameters:
  • obs_position_eclip (jax.numpy.ndarray) – Observatory position in heliocentric ecliptic (AU), shape (3,).

  • ra_rad (float) – Target right ascension in radians.

  • dec_rad (float) – Target declination in radians.

  • mjd (float) – MJD for coordinate conversion.

Returns:

Angular separation in radians.

Return type:

float

orbix.observatory.solar_system.solar_elongation_ecliptic(obs_position_eclip, ecliptic_lon_rad, ecliptic_lat_rad)[source]#

Solar elongation (angle between Sun and target as seen from observer).

Parameters:
  • obs_position_eclip (jax.numpy.ndarray) – Observatory heliocentric ecliptic position (AU).

  • ecliptic_lon_rad (float) – Target ecliptic longitude (rad).

  • ecliptic_lat_rad (float) – Target ecliptic latitude (rad).

Returns:

Solar elongation in radians.

Return type:

float