Source code for sofia_redux.pipeline.sofia.flitecam_wavecal_reduction
# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""FLITECAM Grism Wavecal Reduction pipeline steps"""
from sofia_redux.pipeline.sofia.sofia_exception import SOFIAImportError
try:
import sofia_redux.instruments.flitecam
assert sofia_redux.instruments.flitecam
except ImportError:
raise SOFIAImportError('FLITECAM modules not installed')
from sofia_redux.pipeline.sofia.flitecam_reduction import FLITECAMReduction
from sofia_redux.pipeline.sofia.flitecam_spectroscopy_reduction \
import FLITECAMSpectroscopyReduction
from sofia_redux.pipeline.sofia.parameters.flitecam_wavecal_parameters \
import FLITECAMWavecalParameters
from sofia_redux.pipeline.sofia.forcast_wavecal_reduction \
import FORCASTWavecalReduction
__all__ = ['FLITECAMWavecalReduction']
[docs]
class FLITECAMWavecalReduction(FLITECAMSpectroscopyReduction,
FORCASTWavecalReduction):
r"""
FLITECAM wavelength calibration reduction steps.
This reduction object defines specialized reduction steps
for generating wavelength calibration data from spectroscopic
input files. It is selected by the SOFIA chooser only if a
top-level configuration flag is supplied (wavecal=True). The
final output product from this reduction is a FITS file (\*WCL\*.fits)
with PRODTYPE = 'wavecal'. This file can be supplied to the
standard spectroscopic pipeline, at the make_profiles step,
to specify a new wavelength calibration.
"""
def __init__(self):
"""Initialize the reduction object."""
super().__init__()
# descriptive attributes specific to calibration
self.name = 'Wavecal'
# product type definitions for spectral steps
self.prodtype_map.update(
{'make_profiles': 'spatial_profile',
'extract_summed_spectrum': 'summed_spectrum',
'identify_lines': 'lines_identified',
'reidentify_lines': 'lines_reidentified',
'fit_lines': 'lines_fit',
'rectify': 'rectified_image'})
self.prodnames.update(
{'spatial_profile': 'PRF',
'summed_spectrum': 'SSM',
'lines_identified': 'LID',
'lines_reidentified': 'LRD',
'lines_fit': 'LFT',
'rectified_image': 'RIM'})
# invert the map for quick lookup of step from type
self.step_map = {v: k for k, v in self.prodtype_map.items()}
# default recipe and step names
self.recipe = ['check_header', 'correct_linearity', 'make_image',
'stack_dithers', 'make_profiles',
'extract_summed_spectrum',
'identify_lines', 'reidentify_lines',
'fit_lines', 'rectify']
self.processing_steps.update(
{'extract_summed_spectrum': 'Extract First Spectrum',
'identify_lines': 'Identify Lines',
'reidentify_lines': 'Reidentify Lines',
'fit_lines': 'Fit Lines',
'rectify': 'Verify Rectification'})
[docs]
def load(self, data, param_class=None):
"""Call parent load, with spatcal parameters."""
FLITECAMReduction.load(
self, data, param_class=FLITECAMWavecalParameters)