Wavelength Calibration¶
Wavelength calibration is currently supported for 1D spectra. Given a list of spectral
lines with known wavelengths and estimated pixel positions on an input calibration
spectrum, you can currently use specreduce
to:
Fit an
astropy
model to the wavelength/pixel pairs to generate a spectral WCS solution for the dispersion.Apply the generated spectral WCS to other
Spectrum1D
objects.
1D Wavelength Calibration¶
The WavelengthCalibration1D
class can be used
to fit a dispersion model to a list of line positions and wavelengths. Future development
will implement catalogs of known lamp spectra for use in matching observed lines. In the
example below, the line positions (pixel_centers
) have already been extracted from
lamp_spectrum
:
import astropy.units as u
from specreduce import WavelengthCalibration1D
pixel_centers = [10, 22, 31, 43]
wavelengths = [5340, 5410, 5476, 5543]*u.AA
test_cal = WavelengthCalibration1D(lamp_spectrum, line_pixels=pixel_centers,
line_wavelengths=wavelengths)
calibrated_spectrum = test_cal.apply_to_spectrum(science_spectrum)
The example above uses the default model (Linear1D
)
to fit the input spectral lines, and then applies the calculated WCS solution to a second
spectrum (science_spectrum
). Any other 1D astropy
model can be provided as the
input model
parameter to the WavelengthCalibration1D
.
In the above example, the model fit and WCS construction is all done as part of the
apply_to_spectrum()
call, but you could also access the WCS
object itself
by calling:
test_cal.wcs
The calculated WCS is a cached property that will be cleared if the line_list
, model
,
or input_spectrum
properties are updated, since these will alter the calculated dispersion
fit.
You can also provide the input pixel locations and wavelengths of the lines as an
QTable
with (at minimum) columns pixel_center
and wavelength
,
using the matched_line_list
input argument:
from astropy.table import QTable
pixels = [10, 20, 30, 40]*u.pix
wavelength = [5340, 5410, 5476, 5543]*u.AA
line_list = QTable([pixels, wavelength], names=["pixel_center", "wavelength"])
test_cal = WavelengthCalibration1D(lamp_spectrum, matched_line_list=line_list)