Analytic Functions (astropy.analytic_functions)


Blackbody functions have been moved to astropy.modeling.blackbody. This sub-package is deprecated since v2.0 and will be removed from Astropy in a future version.


The astropy.analytic_functions subpackage provides analytic functions that are commonly used in astronomy. These already understand Quantity, i.e., they can handle units of input and output parameters.

In future versions of astropy, many of these might be accessible as Model.

Getting Started

>>> from astropy import units as u
>>> from astropy.analytic_functions import blackbody_lambda, blackbody_nu

Calculate blackbody flux for 10000 K at 6000 Angstrom:

>>> blackbody_lambda(6000 * u.AA, 10000 * u.K)
<Quantity 15315791.836941158 erg / (Angstrom cm2 s sr)>
>>> blackbody_nu(6000 * u.AA, 10000 * u.K)
<Quantity 0.00018391673686797075 erg / (cm2 Hz s sr)

Using astropy.analytic_functions

Blackbody Radiation

Blackbody flux is calculated with Planck law (Rybicki & Lightman 1979):

\[ \begin{align}\begin{aligned}B_{\lambda}(T) = \frac{2 h c^{2} / \lambda^{5}}{exp(h c / \lambda k T) - 1}\\B_{\nu}(T) = \frac{2 h \nu^{3} / c^{2}}{exp(h \nu / k T) - 1}\end{aligned}\end{align} \]

where the unit of \(B_{\lambda}(T)\) is \(erg \; s^{-1} cm^{-2} \mathring{A}^{-1} sr^{-1}\), and \(B_{\nu}(T)\) is \(erg \; s^{-1} cm^{-2} Hz^{-1} sr^{-1}\). blackbody_lambda() and blackbody_nu() calculate the blackbody flux for \(B_{\lambda}(T)\) and \(B_{\nu}(T)\), respectively.


>>> import numpy as np
>>> import warnings
>>> from astropy import units as u
>>> from astropy.analytic_functions import blackbody_lambda, blackbody_nu
>>> from astropy.utils.exceptions import AstropyDeprecationWarning

Calculate blackbody flux for 5000 K at 100 and 10000 Angstrom while suppressing any Numpy warnings:

>>> wavelengths = [100, 10000] * u.AA
>>> temperature = 5000 * u.K
>>> with np.errstate(all='ignore'):
...     with warnings.catch_warnings():
...         warnings.simplefilter('ignore', AstropyDeprecationWarning)
...         flux_lam = blackbody_lambda(wavelengths, temperature)
...         flux_nu = blackbody_nu(wavelengths, temperature)
>>> flux_lam
Quantity [1.27452545e-108, 7.10190526e+005] erg / (Angstrom cm2 s sr)>
>>> flux_nu
<Quantity [4.25135927e-123, 2.36894060e-005] erg / (cm2 Hz s sr)>

Plot a blackbody spectrum for 5000 K:

(png, svg, pdf)


Note that an array of temperatures can also be given instead of a single temperature. In this case, the Numpy broadcasting rules apply: for instance, if the frequency and temperature have the same shape, the output will have this shape too, while if the frequency is a 2-d array with shape (n, m) and the temperature is an array with shape (m,), the output will have a shape (n, m).

See Also

Rybicki, G. B., & Lightman, A. P. 1979, Radiative Processes in Astrophysics (New York, NY: Wiley)


astropy.analytic_functions.blackbody Module

Functions related to blackbody radiation.


blackbody_nu(in_x, temperature)

Deprecated since version 2.0.

blackbody_lambda(in_x, temperature)

Deprecated since version 2.0.