# extinction¶

Fast interstellar dust extinction laws in Python

Cython-optimized implementations of empirical dust exitinction laws found in the literature.

## Installation¶

Using conda:

conda install -c conda-forge extinction


Using pip (requires a C compiler):

pip install extinction


Extinction depends on numpy and scipy.

Development version / source code: http://github.com/kbarbary/extinction

## Usage¶

Functions:

 extinction.ccm89(wave, a_v, r_v[, unit, out]) Cardelli, Clayton & Mathis (1989) extinction function. extinction.odonnell94(wave, a_v, r_v[, ...]) O’Donnell (1994) extinction function. extinction.calzetti00(wave, a_v, r_v[, ...]) Calzetti (2000) extinction function. extinction.fitzpatrick99(wave, a_v[, r_v, unit]) Fitzpatrick (1999) dust extinction function. extinction.fm07(wave, a_v[, unit]) Fitzpatrick & Massa (2007) extinction model for R_V = 3.1. extinction.apply(extinction, flux[, inplace]) Apply extinction to flux values (optionally in-place). extinction.remove(extinction, flux[, inplace]) Remove extinction from observed flux values (optionally in-place).

Classes:

 extinction.Fitzpatrick99 Fitzpatrick (1999) dust extinction function for arbitrary R_V.

Examples:

Get extinction in magnitudes at a set of wavelengths for various dust laws:

>>> import numpy as np
>>> import extinction

>>> wave = np.array([2000., 4000., 8000.])  # wavelength in Angstroms

# Cardelli, Clayton & Mathis (1989) with A_V = 1 and R_V = 3.1
>>> extinction.ccm89(wave, 1.0, 3.1)
array([ 2.84252644,  1.4645557 ,  0.59748901])  # extinction in magnitudes

# O'Donnell (1994)
>>> extinction.odonnell94(wave, 1.0, 3.1)
array([ 2.84252644,  1.42617802,  0.60793495])

# Fitzpatrick (1999)
>>> extinction.fitzpatrick99(wave, 1.0, 3.1)
array([ 2.76225609,  1.79674653,  1.42325373])


The Fitzpatrick & Massa (2007) function has a fixed $$R_V$$ of 3.1:

>>> extinction.fm07(wave, 1.0)
array([ 2.90478329,  1.42645161,  0.54703201])


All extinction laws accept a unit keyword to change the interpretation of the wavelength array from Angstroms to inverse microns:

>>> wave = np.array([5., 2.5, 1.25])  # wavelength in inverse microns

>>> extinction.ccm89(wave, 1.0, 3.1, unit='invum')
array([ 2.84252644,  1.4645557 ,  0.59748901])  # extinction in magnitudes


### Redden or deredden¶

To “redden” or “deredden” flux values by some amount, use the apply and remove convenience functions:

>>> from extinction import ccm89, apply

>>> flux = np.ones(3)

# "redden" flux by A_V = 1.0
>>> apply(ccm89(wave, 1.0, 3.1), flux)
array([ 0.07294397,  0.25952412,  0.5767723 ])

# "deredden" flux by A_V = 1.0
>>> remove(ccm89(wave, 1.0, 3.1), flux)
array([ 13.70915145,   3.85320647,   1.73378645])


### A note on parameterization¶

Most extinction laws here have two parameters: $$A_V$$ and $$R_V$$. $$A_V$$ is a simply a linear scaling parameter; that is: ccm89(wave, 2.0, 3.1) is the same as 2.0 * ccm89(wave, 1.0, 3.1). $$R_V$$ changes the shape of the extinction curve, rather than just the amplitude.

Traditionally, the meaning ascribed to these parameters was that $$A_V$$ is the extinction in the V band, and $$R_V$$ describes the ratio of total to selective extinction: $$R_V = A_V / E(B-V)$$, where $$E(B-V)$$ is the difference in extinction between the B and V bands. While this is approximately correct, the measured extinction of a source in actual B and V bandpasses will generally depend on the source spectrum and the shape of the specific bandpasses. Therefore, the $$A_V$$ and $$R_V$$ that are parameters in our extinction law will not correspond perfectly to measured B and V extinctions. So, in the context of these extinction laws, it is best to think of $$A_V$$ and $$R_V$$ as simply parameters that describe the amplitude and shape of the wavelength dependence, rather than corresponding directly to measured magnitudes.

Finally, for a given shape of the extinction curve (described by $$R_V$$), one can equally well use $$E(B-V)$$ as a linear scaling parameter in place of $$A_V$$, with the equivalence $$E(B-V) = A_V / R_V$$. Note that the above caution applies here: $$E(B-V)$$ should be considered simply a parameter describing amplitude of extinction; it will not correspond exactly to a difference in measured B and V extinctions.

## License and Credits¶

The license is MIT. Part of this code originated in the specutils package.