Noise Routines

Routines for simulating coronagraph model noise terms are listed below. These functions are used within the coronagraph.CoronagraphNoise and coronagraph.count_rates() functions, but are provided here for independent use.

The most important functions are the individual photon count rate terms due to different photon sources. This including photons from the planet cplan(), from zodiacal light czodi() and exo-zodiacal light cezodi(), from coronagraph speckles cspeck(), from dark current cdark() and read noise cread(), from thermal emission from the telescope mirror ctherm(), and from clock-induced charge ccic().

Optional ground-based telescope noise modeling includes extra terms for the emission from Earth’s atmosphere incident on the telescope, ctherm_earth() (also see get_sky_flux()), and an additional throughput term due to atmospheric extinction set_atmos_throughput().

Finally, there are some extra convenience functions: Calculate the fraction of Airy power contained in square or circular aperture using f_airy(); Construct a wavelength grid by specifying either a spectral resolving power or a fixed wavelength bandwidth using construct_lam(); Calculate the Lambertian Phase Function of a planet from the phase angle using lambertPhaseFunction(); Calculate the Planck blackbody radiance given temperature and wavelength using planck().

coronagraph.noise_routines.Fstar(lam, Teff, Rs, d, AU=False)

Stellar flux function

Parameters:
  • lam (float or array-like) – Wavelength [um]
  • Teff (float) – Stellar effective temperature [K]
  • Rs – Stellar radius [solar radii]
  • d – Distance to star [pc]
  • AU (bool, optional) – Flag that indicates d is in AU
Returns:

Fstar – Stellar flux [W/m**2/um]

Return type:

float or array-like

coronagraph.noise_routines.Fplan(A, Phi, Fstar, Rp, d, AU=False)

Planetary flux function

Parameters:
  • A (float or array-like) – Planetary geometric albedo
  • Phi (float) – Planetary phase function
  • Fstar (float or array-like) – Stellar flux [W/m**2/um]
  • Rp (float) – Planetary radius [Earth radii]
  • d (float) – Distance to star [pc]
  • AU (bool, optional) – Flag that indicates d is in AU
Returns:

Fplan – Planetary flux [W/m**2/um]

Return type:

float or array-like

coronagraph.noise_routines.FpFs(A, Phi, Rp, r)

Planet-star flux ratio (Equation 11 from Robinson et al. 2016).

\(\frac{{F}_{p,\lambda }}{{F}_{{\rm{s}},\lambda }}=A{\rm{\Phi }}(\alpha ){\left(\displaystyle \frac{{R}_{{\rm{p}}}}{r}\right)}^{2}\)

Parameters:
  • A (float or array-like) – Planetary geometric albedo
  • Phi (float) – Planetary phase function
  • Rp (float) – Planetary radius [Earth radii]
  • r (float) – Planetary orbital semi-major axis [AU]
Returns:

FpFs – Planet-star flux ratio

Return type:

float or array-like

coronagraph.noise_routines.cstar(q, fpa, T, lam, dlam, Fstar, D)

Stellar photon count rate (not used with coronagraph)

Parameters:
  • q (float or array-like) – Quantum efficiency
  • fpa (float) – Fraction of planetary light that falls within photometric aperture
  • T (float) – Telescope and system throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • Fplan (float or array-like) – Planetary flux [W/m**2/um]
  • D (float) – Telescope diameter [m]
Returns:

cs – Stellar photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.cplan(q, fpa, T, lam, dlam, Fplan, D)

Exoplanetary photon count rate (Equation 12 from Robinson et al. 2016)

\({c}_{{\rm{p}}}=\pi {{qf}}_{\mathrm{pa}}{ \mathcal T }\displaystyle \frac{\lambda }{{hc}}{F}_{{\rm{p}},\lambda }(d)\Delta \lambda {\left(\displaystyle \frac{D}{2}\right)}^{2}\)

Parameters:
  • q (float or array-like) – Quantum efficiency
  • fpa (float) – Fraction of planetary light that falls within photometric aperture
  • T (float) – Telescope and system throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • Fplan (float or array-like) – Planetary flux [W/m**2/um]
  • D (float) – Telescope diameter [m]
Returns:

cplan – Exoplanetary photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.czodi(q, X, T, lam, dlam, D, Mzv, SUN=False, CIRC=False)

Zodiacal light count rate (Equation 15 from Robinson et al. 2016)

\({c}_{{\rm{z}}}=\pi q{ \mathcal T }{\rm{\Omega }}\Delta \lambda \displaystyle \frac{\lambda }{{hc}}{\left(\displaystyle \frac{D}{2}\right)}^{2}\displaystyle \frac{{F}_{\odot ,\lambda }(1\;{\rm{AU}})}{{F}_{\odot ,V}(1\;{\rm{AU}})}\;{F}_{0,V}{10}^{-{M}_{{\rm{z}},V}/2.5}\)

Parameters:
  • q (float or array-like) – Quantum efficiency
  • X (float) – Size of photometric aperture (lambda/D)
  • T (float) – Telescope and system throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • D (float) – Telescope diameter [m]
  • MzV (float) – Zodiacal light surface brightness [mag/arcsec**2]
  • SUN (bool, optional) – Set to use solar spectrum (Not Implemented)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

czodi – Zodiacal light photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.cezodi(q, X, T, lam, dlam, D, r, Fstar, Nez, Mezv, SUN=False, CIRC=False)

Exozodiacal light count rate (Equation 18 from Robinson et al. 2016)

\({c}_{\mathrm{ez}} = \pi q{ \mathcal T }{X}^{2}\displaystyle \frac{{\lambda }^{4}}{4{hc}{ \mathcal R }}{\left(\displaystyle \frac{1{\rm{AU}}}{r}\right)}^{2}\displaystyle \frac{{F}_{{\rm{s}},\lambda }(1\;{\rm{AU}})}{{F}_{{\rm{s}},V}(1\;{\rm{AU}})}\\ \times \displaystyle \frac{{F}_{{\rm{s}},V}(1\;{\rm{AU}})}{{F}_{\odot ,V}(1\;{\rm{AU}})}{N}_{\mathrm{ez}}{F}_{0,V}{10}^{-{M}_{\mathrm{ez},V}/2.5}\)

Parameters:
  • q (float or array-like) – Quantum efficiency
  • X (float) – Size of photometric aperture (lambda/D)
  • T (float) – System throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • D (float) – Telescope diameter [m]
  • r (float) – Planetary orbital semi-major axis [AU]
  • Fstar (array-like) – Host star spectrum at 1 au (W/m**2/um)
  • Nez (float) – Number of exozodis in exoplanetary disk
  • MezV (float) – Exozodiacal light surface brightness [mag/arcsec**2]
  • SUN (bool, optional) – Set to use solar spectrum (Not Implemented)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

cezodi – Exozodiacal light photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.cspeck(q, T, C, lam, dlam, Fstar, D)

Speckle count rate (Equation 19 from Robinson et al. 2016)

\({c}_{\mathrm{sp}} = \pi q{ \mathcal T }C\Delta \lambda {F}_{{\rm{s}},\lambda }(d)\displaystyle \frac{\lambda }{{hc}}{\left(\displaystyle \frac{D}{2}\right)}^{2}\)

Parameters:
  • q (float or array-like) – Quantum efficiency
  • T (float) – System throughput
  • C (float, optional) – Coronagraph design contrast
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • D (float) – Telescope diameter [m]
  • Fstar (float or array-like) – Host star spectrum at distance of planet (TOA) [W/m**2/um]
Returns:

cspeck – Speckle photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.cdark(De, X, lam, D, theta, DNhpix, IMAGE=False, CIRC=False)

Dark current photon count rate

Parameters:
  • De (float, optional) – Dark current [counts/s]
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • lam (float or array-like) – Wavelength [um]
  • D (float) – Telescope diameter [m]
  • theta – Angular size of lenslet or pixel [arcsec**2]
  • DNHpix (float, optional) – Number of horizontal/spatial pixels for dispersed spectrum
  • IMAGE (bool, optional) – Set to indicate imaging mode (not IFS)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

Dark current photon count rate (s**-1)

Return type:

cdark

coronagraph.noise_routines.cread(Re, X, lam, D, theta, DNhpix, Dtmax, IMAGE=False, CIRC=False)

Read noise count rate (assuming detector has a maximum exposure time)

Parameters:
  • Re (float or array-like) – Read noise counts per pixel
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • lam (float or array-like) – Wavelength [um]
  • D (float) – Telescope diameter [m]
  • theta – Angular size of lenslet or pixel [arcsec**2]
  • Dtmax (float, optional) – Detector maximum exposure time [hours]
  • IMAGE (bool, optional) – Set to indicate imaging mode (not IFS)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

cread – Read noise photon count rate (s**-1)

Return type:

float or array-like

coronagraph.noise_routines.ccic(Rc, cscene, X, lam, D, theta, DNhpix, Dtmax, IMAGE=False, CIRC=False)

Clock induced charge count rate

Parameters:
  • Rc (float or array-like) – Clock induced charge counts/pixel/photon
  • cscene (float or array-like) – Photon count rate of brightest pixel in the scene [counts/s]
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • lam (float or array-like) – Wavelength [um]
  • D (float) – Telescope diameter [m]
  • theta – Angular size of lenslet or pixel [arcsec**2]
  • Dtmax (float, optional) – Detector maximum exposure time [hours]
  • IMAGE (bool, optional) – Set to indicate imaging mode (not IFS)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

Clock induced charge count rate [1/s]

Return type:

ccic

coronagraph.noise_routines.f_airy(X, CIRC=False)

Fraction of Airy power contained in square or circular aperture

Parameters:
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

f_airy – Fraction of planetary light that falls within photometric aperture X*lambda/D

Return type:

float

coronagraph.noise_routines.ctherm(q, X, T, lam, dlam, D, Tsys, emis, CIRC=False)

Telescope thermal count rate

Parameters:
  • q (float or array-like) – Quantum efficiency
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • T (float) – System throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • D (float) – Telescope diameter [m]
  • Tsys (float) – Telescope mirror temperature [K]
  • emis (float) – Effective emissivity for the observing system (of order unity)
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

ctherm – Telescope thermal photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.ctherm_earth(q, X, T, lam, dlam, D, Itherm, CIRC=False)

Earth atmosphere thermal count rate

Parameters:
  • q (float or array-like) – Quantum efficiency
  • X (float, optional) – Width of photometric aperture ( * lambda / diam)
  • T (float) – System throughput
  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]
  • D (float) – Telescope diameter [m]
  • Itherm (float or array-like) – Earth thermal intensity [W/m**2/um/sr]
  • CIRC (bool, optional) – Set to use a circular aperture
Returns:

cthe – Earth atmosphere thermal photon count rate [1/s]

Return type:

float or array-like

coronagraph.noise_routines.lambertPhaseFunction(alpha)

Calculate the Lambertian Phase Function from the phase angle,

\({{\rm{\Phi }}}_{{\rm{L}}}(\alpha )=\displaystyle \frac{\mathrm{sin}\alpha +(\pi -\alpha )\mathrm{cos}\alpha }{\pi }\)

Parameters:alpha (float) – Planet phase angle [deg]
Returns:Phi – Lambertian phase function
Return type:float
coronagraph.noise_routines.construct_lam(lammin, lammax, Res=None, dlam=None)

Construct a wavelength grid by specifying either a resolving power (Res) or a bandwidth (dlam)

Parameters:
  • lammin (float) – Minimum wavelength [microns]
  • lammax (float) – Maximum wavelength [microns]
  • Res (float, optional) – Resolving power (lambda / delta-lambda)
  • dlam (float, optional) – Spectral element width for evenly spaced grid [microns]
Returns:

  • lam (float or array-like) – Wavelength [um]
  • dlam (float or array-like) – Spectral element width [um]

coronagraph.noise_routines.set_quantum_efficiency(lam, qe, NIR=False, qe_nir=0.9, vod=False)

Set instrumental quantum efficiency

Parameters:
  • lam (float or array-like) – Wavelength [um]
  • qe (float) – Detector quantum efficiency
  • NIR (bool, optional) – Use near-IR detector proporties
  • q_nir (float, optional) – NIR quantum efficiency
  • vod (bool, optional) – “Valley of Death” red QE parameterization from Robinson et al. (2016)
Returns:

q – Wavelength-dependent instrumental quantum efficiency

Return type:

numpy.array

coronagraph.noise_routines.set_dark_current(lam, De, lammax, Tdet, NIR=False, De_nir=0.001)

Set dark current grid as a function of wavelength

Parameters:
  • lam (array-like) – Wavelength grid [microns]
  • De (float) – Dark current count rate per pixel (s**-1)
  • lammax (float) – Maximum wavelength
  • Tdet (float) – Detector Temperature [K]
  • NIR (bool, optional) – Use near-IR detector proporties
  • De_nir (float, optional) – NIR minimum dark current count rate per pixel
Returns:

De – Dark current as a function of wavelength

Return type:

numpy.array

coronagraph.noise_routines.set_read_noise(lam, Re, NIR=False, Re_nir=2.0)

Set read noise grid as a function of wavelength

Parameters:
  • lam (array-like) – Wavelength grid [microns]
  • Re (float) – Read noise counts per pixel (s**-1)
  • NIR (bool, optional) – Use near-IR detector proporties
  • Re_nir (float, optional) – NIR read noise counts per pixel
Returns:

Re – Read noise as a function of wavelength

Return type:

numpy.array

coronagraph.noise_routines.set_lenslet(lam, lammin, diam, X, NIR=True, lammin_nir=1.0)

Set the angular size of the lenslet

Parameters:
  • lam (ndarray) – Wavelength grid
  • lammin (float) – Minimum wavelength
  • diam (float) – Telescope Diameter [m]
  • X (float) – Width of photometric aperture (*lambda/diam)
  • NIR (bool (optional)) – Use near-IR detector proporties
  • lammin_nir (float (optional)) – Wavelength min to use for NIR lenslet size
Returns:

theta – Angular size of lenslet

Return type:

numpy.array

coronagraph.noise_routines.set_throughput(lam, Tput, diam, sep, IWA, OWA, lammin, FIX_OWA=False, SILENT=False)

Set wavelength-dependent telescope throughput such that it is zero inside the IWA and outside the OWA.

Parameters:
  • lam (ndarray) – Wavelength grid
  • Tput (float) – Throughput
  • diam (float) – Telescope diameter [m]
  • sep (float) – Planet-star separation in radians
  • IWA (float) – Inner working angle
  • OWA (float) – Outer working angle
  • lammin (float) – Minimum wavelength
  • SILENT (bool, optional) – Suppress printing
Returns:

T – Wavelength-dependent throughput

Return type:

numpy.array

coronagraph.noise_routines.set_atmos_throughput(lam, dlam, convolve, plot=False)

Use pre-computed Earth atmospheric transmission to set throughput term for radiation through the atmosphere

Parameters:
  • lam (ndarray) – Wavelength grid
  • dlam (ndarray) – Wavelength bin width grid
  • convolve (func) – Function used to degrade/downbin spectrum
Returns:

Tatmos – Atmospheric throughput as a function of wavelength

Return type:

numpy.array

coronagraph.noise_routines.get_sky_flux()

Get the spectral flux density from the sky viewed at a ground-based telescope an an average night. This calculation comes from ESO SKYCALC and includes contributions from molecular emission of lower atmosphere, emission lines of upper atmosphere, and airglow/residual continuum, but neglects scattered moonlight, starlight, and zodi.

Returns:
  • lam_sky (numpy.array) – Wavelength grid [microns]
  • flux_sky (numpy.array) – Flux from the sky [W/m^2/um]
coronagraph.noise_routines.exptime_element(lam, cp, cn, wantsnr)

Calculate the exposure time (in hours) to get a specified signal-to-noise

Parameters:
  • lam (ndarray) – Wavelength grid
  • cp (ndarray) – Planetary photon count rate [s**-1]
  • cn (ndarray) – Noise photon count rate [s**-1]
  • wantsnr (float) – Signal-to-noise required in each spectral element
Returns:

DtSNR – Exposure time necessary to get specified SNR [hours]

Return type:

ndarray

coronagraph.noise_routines.planck(temp, wav)

Planck blackbody function

Parameters:
  • temp (float or array-like) – Temperature [K]
  • wav (float or array-like) – Wavelength [microns]
Returns:

Return type:

B_lambda [W/m^2/um/sr]