Source code for furst.sources._sources

import dataclasses
import numpy as np
import astropy.units as u
import sunpy.sun.constants
import named_arrays as na
import optika
import furst

__all__ = [
    "AbstractSource",
    "SolarDisk",
]


[docs] @dataclasses.dataclass(eq=False, repr=False) class AbstractSource( optika.mixins.Translatable, furst.abc.AbstractComponent, ): """ An interface describing an arbitrary light source observed by FURST. """
[docs] @dataclasses.dataclass(eq=False, repr=False) class SolarDisk( AbstractSource, ): """ The nominal scene observed by FURST, the entire solar disk. """ radius: None | u.Quantity | na.AbstractScalar = None """ The radius of the solar disk observed by FURST. If :obj:`None` (the default), :obj:`sunpy.sun.constants.average_angular_size` is used. """ translation: u.Quantity | na.AbstractCartesian3dVectorArray = 0 * u.mm """Offset of the solar disk on the celestial sphere.""" def __post_init__(self): if self.radius is None: self.radius = sunpy.sun.constants.average_angular_size @property def surface(self) -> optika.surfaces.Surface: return optika.surfaces.Surface( name="solar disk", aperture=optika.apertures.CircularAperture( radius=np.cos(self.radius), ), is_field_stop=True, transformation=self.transformation, )