2 #ifndef LSST_AFW_fits_h_INCLUDED 3 #define LSST_AFW_fits_h_INCLUDED 19 #include <boost/format.hpp> 104 #define LSST_FITS_EXCEPT(type, fitsObj, ...) \ 105 type(LSST_EXCEPT_HERE, lsst::afw::fits::makeErrorMessage((fitsObj).fptr, (fitsObj).status, __VA_ARGS__)) 110 #define LSST_FITS_CHECK_STATUS(fitsObj, ...) \ 111 if ((fitsObj).status != 0) throw LSST_FITS_EXCEPT(lsst::afw::fits::FitsError, fitsObj, __VA_ARGS__) 114 template <
typename T>
206 template <
typename T,
int N,
int C>
208 ndarray::Array<T const, N, N> contiguous = ndarray::dynamic_dimension_cast<N>(array);
209 if (contiguous.empty()) contiguous = ndarray::copy(array);
223 template <
typename T>
227 template <
typename T>
234 : compression(compression_), scaling(scaling_) {}
297 void createImageImpl(
int bitpix,
int nAxis,
long const* nAxes);
298 template <
typename T>
299 void writeImageImpl(T
const*
data,
int nElements);
300 template <
typename T>
301 void readImageImpl(
int nAxis, T* data,
long* begin,
long*
end,
long* increment);
302 void getImageShapeImpl(
int maxDim,
long* nAxes);
325 void setHdu(
int hdu,
bool relative =
false);
331 template <
typename T>
337 template <
typename T>
350 template <
typename T>
355 template <
typename T>
356 void writeKey(
std::string const& key, T
const& value);
361 template <
typename T>
365 updateColumnKey(prefix, n,
std::string(value), comment);
367 template <
typename T>
368 void updateColumnKey(
std::string const& prefix,
int n, T
const& value);
375 template <
typename T>
379 writeColumnKey(prefix, n,
std::string(value), comment);
381 template <
typename T>
382 void writeColumnKey(
std::string const& prefix,
int n, T
const& value);
411 template <
typename T>
442 template <
typename PixelT,
int N>
443 void createImage(ndarray::Vector<ndarray::Size, N>
const& shape) {
444 ndarray::Vector<long, N> nAxes(shape.reverse());
449 void createImage(
int bitpix, ndarray::Vector<ndarray::Size, N>
const& shape) {
450 ndarray::Vector<long, N> nAxes(shape.reverse());
451 createImageImpl(bitpix, N, nAxes.elems);
460 template <
typename PixelT>
462 long naxes[2] = {
x, y};
475 template <
typename T,
int N,
int C>
476 void writeImage(ndarray::Array<T const, N, C>
const& array) {
492 template <
typename T>
512 ndarray::Vector<long, N> nAxes(1);
513 getImageShapeImpl(N, nAxes.elems);
514 ndarray::Vector<ndarray::Size, N> shape;
515 for (
int i = 0; i < N; ++i) shape[i] = nAxes[N - i - 1];
525 template <
typename T>
526 bool checkImageType();
539 template <
typename T,
int N>
540 void readImage(ndarray::Array<T, N, N>
const& array, ndarray::Vector<int, N>
const& offset) {
541 ndarray::Vector<long, N> begin(offset.reverse());
542 ndarray::Vector<long, N>
end(begin);
543 end += array.getShape().reverse();
544 ndarray::Vector<long, N> increment(1);
546 readImageImpl(N, array.getData(), begin.elems, end.elems, increment.elems);
558 template <
typename T>
567 template <
typename T>
577 template <
typename T>
581 template <
typename T>
583 writeTableArray(row, col, 1, &value);
589 template <
typename T>
590 void readTableArray(
std::size_t row,
int col,
int nElements, T* value);
593 template <
typename T>
595 readTableArray(row, col, 1, &value);
602 long getTableArraySize(
int col);
608 Fits() : fptr(0), status(0), behavior(0) {}
634 bool checkCompressedImagePhu();
637 if ((fptr) && (behavior & AUTO_CLOSE)) closeFile();
763 #endif // !LSST_AFW_fits_h_INCLUDED
void createImage(int bitpix, ndarray::Vector< ndarray::Size, N > const &shape)
void writeKey(std::string const &key, char const *value)
Add a FITS header key to the bottom of the header.
MemFileManager(std::size_t len)
Construct a MemFileManager with (len) bytes of initial memory.
void updateKey(std::string const &key, char const *value)
Set a FITS header key, editing if it already exists and appending it if not.
void writeColumnKey(std::string const &prefix, int n, char const *value)
Write a key of the form XXXXXnnn, where XXXXX is the prefix and nnn is a column number.
std::shared_ptr< daf::base::PropertyList > combineMetadata(std::shared_ptr< const daf::base::PropertyList > first, std::shared_ptr< const daf::base::PropertyList > second)
Combine two sets of metadata in a FITS-appropriate fashion.
ImageCompressionOptions compression
Options controlling compression.
Options for writing an image to FITS.
void writeKey(std::string const &key, char const *value, std::string const &comment)
Add a FITS header key to the bottom of the header.
int getBitPix()
Return the cfitsio integer BITPIX code for the given data type.
void readTableScalar(std::size_t row, int col, T &value)
Read an array scalar from a binary table.
MemFileManager(void *ptr, std::size_t len)
Construct a MemFileManager that references and does not manage external memory.
ImageWriteOptions(ImageCompressionOptions const &compression_=ImageCompressionOptions(ImageCompressionOptions::NONE), ImageScalingOptions const &scaling_=ImageScalingOptions())
Construct with specific compression and scaling options.
ImageWriteOptions(image::Mask< T > const &mask)
Construct with default options for masks.
void writeColumnKey(std::string const &prefix, int n, char const *value, std::string const &comment)
Write a key of the form XXXXXnnn, where XXXXX is the prefix and nnn is a column number.
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
The base class for all image classed (Image, Mask, MaskedImage, ...)
FITS BITPIX header value by C++ type.
void updateKey(std::string const &key, char const *value, std::string const &comment)
Set a FITS header key, editing if it already exists and appending it if not.
Reports errors in external input/output operations.
void readImage(ndarray::Array< T, N, N > const &array, ndarray::Vector< int, N > const &offset)
Read an array from a FITS image.
MemFileManager()
Construct a MemFileManager with no initial memory buffer.
ndarray::Array< T const, N, N > const makeContiguousArray(ndarray::Array< T, N, C > const &array)
Construct a contiguous ndarray.
An exception thrown when problems are found when reading or writing FITS files.
ndarray::Vector< ndarray::Size, N > getImageShape()
Return the shape of the current (image) HDU.
Options for tile compression of image pixels.
A base class for image defects.
void createImage(long x, long y)
Create a 2-d image with pixel type provided by the given explicit PixelT template parameter...
Represent a 2-dimensional array of bitmask pixels.
Lifetime-management for memory that goes into FITS memory files.
void * getData() const
Return the buffer.
Fits()
Default constructor; set all data members to 0.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
void reset(void *ptr, std::size_t len)
Set the internal memory buffer to an manually-managed external block.
void updateColumnKey(std::string const &prefix, int n, char const *value)
Update a key of the form XXXXXnnn, where XXXXX is the prefix and nnn is a column number.
Options for scaling image pixels.
ImageWriteOptions(ImageScalingOptions const &scaling_)
Construct with specific scaling options.
void updateColumnKey(std::string const &prefix, int n, char const *value, std::string const &comment)
Update a key of the form XXXXXnnn, where XXXXX is the prefix and nnn is a column number.
ImageScalingOptions scaling
Options controlling scaling.
void disable()
Disable the guard, leaving the HDU at its current state at destruction.
std::size_t getLength() const
Return the buffer length.
void setAllowImageCompression(bool allow)
Class for storing generic metadata.
An exception thrown when a FITS file has the wrong type.
void reset()
Return the manager to the same state it would be if default-constructed.
void createImage(ndarray::Vector< ndarray::Size, N > const &shape)
Create an image with pixel type provided by the given explicit PixelT template parameter and shape de...
MemFileManager & operator=(const MemFileManager &)=delete
bool getAllowImageCompression()
void writeImage(ndarray::Array< T const, N, C > const &array)
Write an ndarray::Array to a FITS image HDU.
#define LSST_EXCEPTION_TYPE(t, b, c)
Macro used to define new types of exceptions without additional data.
std::string makeErrorMessage(std::string const &fileName="", int status=0, std::string const &msg="")
Return an error message reflecting FITS I/O errors.
A class to represent a 2-dimensional array of pixels.
RAII scoped guard for moving the HDU in a Fits object.
void writeTableScalar(std::size_t row, int col, T value)
Write a scalar value to a binary table.
std::string makeLimitedFitsHeader(lsst::daf::base::PropertySet const &metadata, std::set< std::string > const &excludeNames={})
Format a PropertySet into an FITS header string in a simplistic fashion.
const int DEFAULT_HDU
Specify that the default HDU should be read.
std::shared_ptr< daf::base::PropertyList > readMetadata(std::string const &fileName, int hdu=DEFAULT_HDU, bool strip=false)
Read FITS header.
ImageWriteOptions(image::Image< T > const &image)
Construct with default options for images.