Source code for lod_unit.lod_unit

"""Defines a unit for λ/D, :py:data:`lod`, that can be imported and an equivalency, :py:func:`lod_eq`, to convert to angular units."""

import functools

from astropy.units import Equivalency, Quantity
import astropy.units as u

lod = u.def_unit("λ/D", doc="A unit for λ/D")  # type: ignore
"""
An astropy unit representing the ratio of wavelength to diameter (λ/D).
"""


[docs] @functools.cache def lod_eq(lam: Quantity, D: Quantity) -> Equivalency: """Convert between λ/D and angular units. Function to allow conversion between λ/D and angular units natively with the astropy units package. Args: lam (Astropy Quantity): Wavelength D (Astropy Quantity): Diameter Returns: An astropy Equivalency object to allow conversion between λ/D and angular units. Usage: >>> diam = 10*u.m >>> lam = 500*u.nm >>> angseparation = 3 * lod >>> angseparation.to(u.arcsec, lod_eq(lam, diam)) <Quantity 0.03093972 arcsec> """ _lam = lam.to_value(u.m) _D = D.to_value(u.m) def lod_to_rad(lod_val: float) -> float: return lod_val * (_lam / _D) def rad_to_lod(r): return r * (_D / _lam) base_equivalence = [(lod, u.rad, lod_to_rad, rad_to_lod)] compound_equivalence = [(lod / u.pix, u.rad / u.pix, lod_to_rad, rad_to_lod)] return Equivalency(base_equivalence + compound_equivalence)