Source code for astroimtools.nddata_adapters

# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""
NDData tools for interfacing with FITS files.
"""

import astropy.io.fits as fits
from astropy import log
from astropy.nddata import NDData
from astropy.utils.decorators import deprecated_renamed_argument

__all__ = ['basic_fits_to_nddata', 'basic_nddata_to_fits']


[docs] def basic_fits_to_nddata(filename, exten=0): """ Read a single FITS extension into a `~astropy.nddata.NDData` object. This is an *extremely* simple reader that reads data from only a single FITS extension. Note the the primary FITS header will always be included in the `~astropy.nddata.NDData` meta `dict`, regardless of the value of ``exten``. Parameters ---------- filename : str The path to a FITS file. exten : int, optional The FITS extension number for array to place in the NDData object. The default is 0. Returns ------- nddata : `~astropy.nddata.NDData` An `~astropy.nddata.NDData` object with a ``data`` attribute containing the FITS data array and a ``meta`` attribute, containing the FITS header as a python `dict`. """ with fits.open(filename) as hdulist: header = hdulist[0].header header += hdulist[exten].header data = hdulist[exten].data return NDData(data, meta=header)
[docs] @deprecated_renamed_argument('clobber', 'overwrite', '0.4') def basic_nddata_to_fits(nddata, filename, overwrite=False): """ Write a `~astropy.nddata.NDData` object to a FITS file. The `~astropy.nddata.NDData` data will be saved in a FITS extension called 'SCI'. This simple writer will also attempt to save the `~astropy.nddata.NDData` uncertainty and mask to an 'ERROR' and 'MASK' FITS extension, respectively. If present, the `~astropy.nddata.NDData` meta dictionary will be stored as the FITS header. Parameters ---------- nddata : `~astropy.nddata.NDData` An `~astropy.nddata.NDData` object to write to a FITS file. filename : str The path of the output FITS file. overwrite : bool, optional Set to `True` to overwrite ``filename`` if it already exists. The default is `False`. """ hdu = fits.PrimaryHDU() if nddata.meta is not None: for k, v in nddata.meta.iteritems(): hdu.header[k] = v hdus = [hdu] hdus.append(fits.ImageHDU(data=nddata.data)) hdus[-1].header['EXTNAME'] = 'SCI' if nddata.uncertainty is not None: hdus.append(fits.ImageHDU(data=nddata.uncertainty.value)) hdus[-1].header['EXTNAME'] = 'ERROR' if nddata.mask is not None: hdus.append(fits.ImageHDU(data=nddata.mask.astype(int))) hdus[-1].header['EXTNAME'] = 'MASK' hdulist = fits.HDUList(hdus) hdulist.writeto(filename, overwrite=overwrite) log.info(f'Wrote {filename}') return