Source code for EXOSIMS.ZodiacalLight.Mennesson

# -*- coding: utf-8 -*-
from EXOSIMS.ZodiacalLight.Stark import Stark
import numpy as np
import os
import astropy.units as u
from astropy.io import fits


[docs] class Mennesson(Stark): """Mennesson Zodiacal Light class""" def __init__(self, EZ_distribution="nominal_maxL_distribution.fits", **specs): Stark.__init__(self, **specs) if os.path.exists(os.path.normpath(os.path.expandvars(EZ_distribution))): self.EZ_distribution = os.path.normpath(os.path.expandvars(EZ_distribution)) elif os.path.exists( os.path.join(os.path.dirname(os.path.abspath(__file__)), EZ_distribution) ): self.EZ_distribution = os.path.join( os.path.dirname(os.path.abspath(__file__)), EZ_distribution ) else: raise ValueError(f"Could not locate EZ_distribution file {EZ_distribution}") self.fitsdata = fits.open(self.EZ_distribution)[0].data self._outspec["EZ_distribution"] = EZ_distribution
[docs] def gen_systemnEZ(self, nStars): """Ranomly generates the number of Exo-Zodi Args: nStars (int): number of exo-zodi to generate Returns: nEZ (numpy array): numpy array of exo-zodi randomly selected from fitsdata """ nEZ_seed = np.random.randint(len(self.fitsdata) - nStars) nEZ = 2 * self.fitsdata[nEZ_seed : (nEZ_seed + nStars)] return nEZ
[docs] def zodi_latitudinal_correction_factor(self, theta, model=None, interp_at=135): """ Compute zodiacal light latitudinal correction factor. This is a multiplicative factor to apply to zodiacal light intensity to account for the orientation of the dust disk with respect to the observer. Args: theta (astropy.units.Quantity): Angle of disk. For local zodi, this is equivalent to the absolute value of the ecliptic latitude of the look vector. For exozodi, this is 90 degrees minus the inclination of the orbital plane. model (str, optional): Model to use. Options are Lindler2006, Stark2014, or interp (case insensitive). See :ref:`exozodi` for details. Defaults to None interp_at (float): If ``model`` is 'interp', interpolate Leinert Table 17 at this longitude. Defaults to 135. Returns: float or numpy.ndarray: Correction factor of zodiacal light at requested angles. Has same dimension as input. .. note:: Unlike the color correction factor, this quantity is wavelength independent and thus does not change if using power or photon units. .. note:: The systems in the data file are all at 60 degrees inclination, so we scale by the 90-60=30 degree value of the correction factor. """ fbeta = super().zodi_latitudinal_correction_factor( theta, model=model, interp_at=interp_at ) fbeta30 = super().zodi_latitudinal_correction_factor( 30 * u.deg, model=model, interp_at=interp_at ) return fbeta / fbeta30