Source code for astroplan.moon

# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""
This version of the `moon` module calculates lunar phase angle for a geocentric
"""

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

# Third-party
import numpy as np
from astropy.coordinates import get_sun, get_body

__all__ = ["moon_phase_angle", "moon_illumination"]


[docs] def moon_phase_angle(time, ephemeris=None): """ Calculate lunar orbital phase in radians. Parameters ---------- time : `~astropy.time.Time` Time of observation ephemeris : str, optional Ephemeris to use. If not given, use the one set with `~astropy.coordinates.solar_system_ephemeris` (which is set to 'builtin' by default). Returns ------- i : `~astropy.units.Quantity` Phase angle of the moon [radians] """ # TODO: cache these sun/moon SkyCoord objects sun = get_sun(time) moon = get_body("moon", time, ephemeris=ephemeris) elongation = sun.separation(moon) return np.arctan2(sun.distance*np.sin(elongation), moon.distance - sun.distance*np.cos(elongation))
[docs] def moon_illumination(time, ephemeris=None): """ Calculate fraction of the moon illuminated. Parameters ---------- time : `~astropy.time.Time` Time of observation ephemeris : str, optional Ephemeris to use. If not given, use the one set with `~astropy.coordinates.solar_system_ephemeris` (which is set to 'builtin' by default). Returns ------- k : float Fraction of moon illuminated """ i = moon_phase_angle(time, ephemeris=ephemeris) k = (1 + np.cos(i))/2.0 return k.value