Source code for m4opt.constraints._body_separation

from typing import override

from astropy import units as u
from astropy.coordinates import get_body

from ._core import Constraint


class BodySeparationConstraint(Constraint):
    def __init__(self, min: u.Quantity[u.physical.angle], body: str):
        self._body = body
        self.min = min

    @override
    def __call__(self, observer_location, target_coord, obstime):
        return (
            get_body(self._body, time=obstime, location=observer_location).separation(
                target_coord, origin_mismatch="ignore"
            )
            >= self.min
        )


[docs] class MoonSeparationConstraint(BodySeparationConstraint): def __init__(self, min: u.Quantity[u.physical.angle]): """ Constrain the minimum separation from the Moon. Parameters ---------- min Minimum angular separation from the Moon. Examples -------- >>> from astropy.coordinates import EarthLocation, SkyCoord >>> from astropy.time import Time >>> from astropy import units as u >>> from m4opt.constraints import MoonSeparationConstraint >>> time = Time("2017-08-17T12:41:04Z") >>> target = SkyCoord.from_name("NGC 4993") >>> location = EarthLocation.of_site("Las Campanas Observatory") >>> constraint = MoonSeparationConstraint(20 * u.deg) >>> constraint(location, target, time) np.True_ """ super().__init__(min, "moon")
[docs] class SunSeparationConstraint(BodySeparationConstraint): def __init__(self, min: u.Quantity[u.physical.angle]): """ Constrain the minimum separation from the Sun. Parameters ---------- min Minimum angular separation from the Sun. Examples -------- >>> from astropy.coordinates import EarthLocation, SkyCoord >>> from astropy.time import Time >>> from astropy import units as u >>> from m4opt.constraints import SunSeparationConstraint >>> time = Time("2017-08-17T12:41:04Z") >>> target = SkyCoord.from_name("NGC 4993") >>> location = EarthLocation.of_site("Las Campanas Observatory") >>> constraint = SunSeparationConstraint(20 * u.deg) >>> constraint(location, target, time) np.True_ """ super().__init__(min, "sun")