skyscapes.background.zodi
=========================

.. py:module:: skyscapes.background.zodi

.. autoapi-nested-parse::

   Zodiacal-light background sources.

   Three concrete variants:

   - :class:`AYOZodi` -- fixed V-band surface brightness with the
     Leinert wavelength-dependent color correction. Matches the AYO/EXOSIMS
     ETC Calibration Task Group convention (135 deg solar longitude).
   - :class:`LeinertZodi` -- full Leinert et al. (1998) tables for
     position- and wavelength-dependence.
   - :class:`PrecomputedZodi` -- pre-computed photon flux supplied
     externally (e.g. extracted from an EXOSIMS/pyEDITH run).

   All three return ph/s/m^2/nm per arcsec^2. Each is its own ``eqx.Module``;
   there is intentionally no shared abstract base yet (see the package
   docstring).



Classes
-------

.. autoapisummary::

   skyscapes.background.zodi.AYOZodi
   skyscapes.background.zodi.LeinertZodi
   skyscapes.background.zodi.PrecomputedZodi


Module Contents
---------------

.. py:class:: AYOZodi(wavelengths_nm, surface_brightness_mag = 22.0, reference_wavelength_nm = 550.0)

   Bases: :py:obj:`equinox.Module`


   Zodiacal light using AYO-compatible default settings.

   Uses a fixed surface brightness at V-band with a Leinert
   wavelength-dependent color correction. Position-independent at query
   time -- the AYO convention bakes in solar longitude 135 deg.

   Example:
       >>> import jax.numpy as jnp
       >>> wavelengths = jnp.linspace(400, 1000, 50)
       >>> zodi = AYOZodi(wavelengths, surface_brightness_mag=22.0)


   .. py:attribute:: _wavelengths_nm
      :type:  jax.numpy.ndarray


   .. py:attribute:: _flux_density_phot
      :type:  jax.numpy.ndarray


   .. py:attribute:: _flux_interp
      :type:  interpax.Interpolator1D


   .. py:attribute:: _reference_wavelength_nm
      :type:  float


   .. py:attribute:: _reference_mag_arcsec2
      :type:  float


   .. py:property:: reference_wavelength_nm
      :type: float


      Reference wavelength for the zodi model in nm.



   .. py:property:: reference_mag_arcsec2
      :type: float


      Surface brightness at the reference wavelength in mag/arcsec^2.



   .. py:method:: spec_flux_density(wavelength_nm, time_jd, ecliptic_lat_deg = 0.0, solar_lon_deg = 135.0)

      Return surface brightness in ph/s/m^2/nm per arcsec^2.

      ``time_jd`` and the ecliptic/solar arguments are accepted for
      interface compatibility but ignored: the AYO convention is a
      fixed-angle assumption.



   .. py:method:: __repr__()

      One-line summary of the AYO zodi reference + wavelength grid.



.. py:class:: LeinertZodi(reference_mag_arcsec2 = 22.0, reference_wavelength_nm = 550.0)

   Bases: :py:obj:`equinox.Module`


   Zodiacal light using the full Leinert (1998) position-dependent model.

   Computes the surface brightness dynamically from the Leinert et al.
   (1998) tables for both position (ecliptic latitude, solar longitude)
   and wavelength dependence.

   Example:
       >>> zodi = LeinertZodi(reference_mag_arcsec2=22.0)
       >>> flux1 = zodi.spec_flux_density(550.0, 0.0, ecliptic_lat_deg=30.0)
       >>> flux2 = zodi.spec_flux_density(550.0, 0.0, ecliptic_lat_deg=45.0)


   .. py:attribute:: _reference_wavelength_nm
      :type:  float


   .. py:attribute:: _reference_mag_arcsec2
      :type:  float


   .. py:property:: reference_wavelength_nm
      :type: float


      Reference wavelength for the zodi model in nm.



   .. py:property:: reference_mag_arcsec2
      :type: float


      Surface brightness at the reference wavelength in mag/arcsec^2.



   .. py:method:: spec_flux_density(wavelength_nm, time_jd, ecliptic_lat_deg = 0.0, solar_lon_deg = 135.0)

      Return surface brightness in ph/s/m^2/nm per arcsec^2.

      Args:
          wavelength_nm: Scalar wavelength in nm.
          time_jd: Scalar time in Julian days (ignored).
          ecliptic_lat_deg: Ecliptic latitude in degrees.
          solar_lon_deg: Solar longitude in degrees.



   .. py:method:: __repr__()

      One-line summary of the Leinert zodi reference.



.. py:class:: PrecomputedZodi(wavelengths_nm, flux_phot_per_arcsec2, reference_mag_arcsec2 = 22.0)

   Bases: :py:obj:`equinox.Module`


   Zodiacal light from pre-computed photon flux values.

   Wraps an externally computed array of photon fluxes (e.g. extracted
   from an EXOSIMS or pyEDITH run) so the same values flow through the
   coronagraph image simulator without recomputation. Position and time
   arguments are accepted for interface compatibility but ignored.

   Example:
       >>> exosims_flux = ...  # ph/s/m^2/nm/arcsec^2 from EXOSIMS
       >>> zodi = PrecomputedZodi(wavelengths, exosims_flux)


   .. py:attribute:: _wavelengths_nm
      :type:  jax.numpy.ndarray


   .. py:attribute:: _flux_density_phot
      :type:  jax.numpy.ndarray


   .. py:attribute:: _flux_interp
      :type:  interpax.Interpolator1D


   .. py:attribute:: _reference_wavelength_nm
      :type:  float


   .. py:attribute:: _reference_mag_arcsec2
      :type:  float


   .. py:property:: reference_wavelength_nm
      :type: float


      Reference wavelength for the zodi model in nm.



   .. py:property:: reference_mag_arcsec2
      :type: float


      Surface brightness at the reference wavelength in mag/arcsec^2.



   .. py:method:: spec_flux_density(wavelength_nm, time_jd, ecliptic_lat_deg = 0.0, solar_lon_deg = 135.0)

      Return surface brightness in ph/s/m^2/nm per arcsec^2.

      All arguments other than ``wavelength_nm`` are accepted for
      interface compatibility but ignored.



   .. py:method:: __repr__()

      One-line summary of pre-tabulated zodi photon-flux source.



