Source code for pyobs.robotic.scheduler.constraints.moonseparationconstraint

from __future__ import annotations
from typing import TYPE_CHECKING
import astroplan
import astropy.units as u
import astropy.coordinates
from pydantic import Field

from .constraint import Constraint

if TYPE_CHECKING:
    from astropy.time import Time
    from ..dataprovider import DataProvider
    from pyobs.robotic import Task


[docs] class MoonSeparationConstraint(Constraint): """Moon separation constraint.""" cost: float = 3.0 target_dependent: bool = True min_distance: float = Field(ge=0.0, le=180.0, default=30.0) def to_astroplan(self) -> astroplan.MoonSeparationConstraint: return astroplan.MoonSeparationConstraint(min=self.min_distance * u.deg) async def __call__(self, time: Time, task: Task, data: DataProvider) -> bool: if task.target is None: return True coord = task.target.coordinates(time) moon_separation = astropy.coordinates.get_body("moon", time).separation(coord, origin_mismatch="ignore") return float(moon_separation.degree) >= self.min_distance
__all__ = ["MoonSeparationConstraint"]