LSSTApplications  1.1.2+25,10.0+13,10.0+132,10.0+133,10.0+224,10.0+41,10.0+8,10.0-1-g0f53050+14,10.0-1-g4b7b172+19,10.0-1-g61a5bae+98,10.0-1-g7408a83+3,10.0-1-gc1e0f5a+19,10.0-1-gdb4482e+14,10.0-11-g3947115+2,10.0-12-g8719d8b+2,10.0-15-ga3f480f+1,10.0-2-g4f67435,10.0-2-gcb4bc6c+26,10.0-28-gf7f57a9+1,10.0-3-g1bbe32c+14,10.0-3-g5b46d21,10.0-4-g027f45f+5,10.0-4-g86f66b5+2,10.0-4-gc4fccf3+24,10.0-40-g4349866+2,10.0-5-g766159b,10.0-5-gca2295e+25,10.0-6-g462a451+1
LSSTDataManagementBasePackage
Image I/O

Image I/O

Reading Images, Masks, and MaskedImages from FITS files is achieved via their constructors that take a string, e.g.

Image::Image(fileName, hdu=0, metadata=lsst::daf::base::PropertySet::Ptr(), bbox=BBox());

Writing to FITS files is done via a method, e.g. Image::writeFits (but once more, you should peruse Reading and writing MaskedImages).

Reading and writing MaskedImages

MaskedImages are a bit more complicated, as there are three pieces of data to read or write, the image, the mask, and the variance. What's more, LSST changed its mind about how to do this in the early summer of 2009.

The old convention was to write three separate FITS files, so a call to MaskedImage::writeFits("foo") would result in three files, foo_img.fits, foo_msk.fits, and foo_var.fits. The new convention is that, if the filename looks like a complete FITS file, the data should be written to a single Multi Extension Fits (MEF) file. I.e.

In both cases, the FITS HDUs are identified with the EXTTYPE keyword; the possible values are IMAGE, MASK, and VARIANCE. If the EXTTYPE keyword is present in the file, it must have the expected value or lsst::pex::exceptions::InvalidParameterException is thrown.

Deprecated:
Please do not use the three-separate-files APIs in new code.

The corresponding constructors obeyed and obey the same conventions, so

Note
If foo.fits doesn't exist, the code tries to read foo.fits_img.fits for backward compatibility, but there's no way to force the code to write this file.

Appending to FITS files

If you specify the mode in e.g. Image::writeFits to a (or ab), the desired data will be appended to the file. For Images and Masks this adds a single HDU, while for a MaskedImage it adds 3.

You can read the HDU of your desires by passing an hdu to the constructor.

Note
For MaskedImage if you specify hdu, we'll read hdu, hdu+1, and hdu+2 so to get the nth MaskedImage, you should set hdu == 1 + 3*n