LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
Namespaces | Classes | Functions | Variables
lsst::afw::fits Namespace Reference

Namespaces

namespace  _compression
 
namespace  _fitsContinued
 
namespace  _pickleFits
 
namespace  detail
 

Classes

struct  Bzero
 Scaling zero-point, set according to pixel type. More...
 
struct  Bzero< std::uint64_t >
 
struct  Bzero< T, typename std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed >::type >
 
class  Fits
 A simple struct that combines the two arguments that must be passed to most cfitsio routines and contains thin and/or templated wrappers around common cfitsio routines. More...
 
class  FitsError
 An exception thrown when problems are found when reading or writing FITS files. More...
 
class  FitsTypeError
 An exception thrown when a FITS file has the wrong type. More...
 
class  HduMoveGuard
 RAII scoped guard for moving the HDU in a Fits object. More...
 
class  HeaderIterationFunctor
 Base class for polymorphic functors used to iterator over FITS key headers. More...
 
struct  ImageCompressionOptions
 Options for tile compression of image pixels. More...
 
struct  ImageScale
 Scale to apply to image. More...
 
class  ImageScalingOptions
 Options for scaling image pixels. More...
 
struct  ImageWriteOptions
 Options for writing an image to FITS. More...
 
class  MemFileManager
 Lifetime-management for memory that goes into FITS memory files. More...
 

Functions

std::string makeErrorMessage (std::string const &fileName="", int status=0, std::string const &msg="")
 Return an error message reflecting FITS I/O errors. More...
 
std::string makeErrorMessage (std::string const &fileName, int status, boost::format const &msg)
 
std::string makeErrorMessage (void *fptr, int status=0, std::string const &msg="")
 Return an error message reflecting FITS I/O errors. More...
 
std::string makeErrorMessage (void *fptr, int status, boost::format const &msg)
 
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. More...
 
template<typename T >
int getBitPix ()
 Return the cfitsio integer BITPIX code for the given data type. More...
 
template<typename T , int N, int C>
ndarray::Array< T const, N, N > const makeContiguousArray (ndarray::Array< T, N, C > const &array)
 Construct a contiguous ndarray. More...
 
std::shared_ptr< daf::base::PropertyListcombineMetadata (daf::base::PropertyList const &first, daf::base::PropertyList const &second)
 Combine two sets of metadata in a FITS-appropriate fashion. More...
 
std::shared_ptr< daf::base::PropertyListcombineMetadata (std::shared_ptr< daf::base::PropertyList const > first, std::shared_ptr< daf::base::PropertyList const > second)
 
std::shared_ptr< daf::base::PropertyListreadMetadata (std::string const &fileName, int hdu=DEFAULT_HDU, bool strip=false)
 Read FITS header. More...
 
std::shared_ptr< daf::base::PropertyListreadMetadata (fits::MemFileManager &manager, int hdu=DEFAULT_HDU, bool strip=false)
 Read FITS header. More...
 
std::shared_ptr< daf::base::PropertyListreadMetadata (fits::Fits &fitsfile, bool strip=false)
 Read FITS header. More...
 
void setAllowImageCompression (bool allow)
 
bool getAllowImageCompression ()
 
ImageCompressionOptions::CompressionAlgorithm compressionAlgorithmFromString (std::string const &name)
 Interpret compression algorithm expressed in string. More...
 
std::string compressionAlgorithmToString (ImageCompressionOptions::CompressionAlgorithm algorithm)
 Provide string version of compression algorithm. More...
 
ImageCompressionOptions::CompressionAlgorithm compressionAlgorithmFromCfitsio (int cfitsio)
 Convert compression algorithm from cfitsio to ImageCompressionOptions::CompressionAlgorithm. More...
 
int compressionAlgorithmToCfitsio (ImageCompressionOptions::CompressionAlgorithm algorithm)
 Convert ImageCompressionOptions::CompressionAlgorithm to cfitsio. More...
 
ImageScalingOptions::ScalingAlgorithm scalingAlgorithmFromString (std::string const &name)
 Interpret scaling algorithm expressed in string. More...
 
std::string scalingAlgorithmToString (ImageScalingOptions::ScalingAlgorithm algorithm)
 Provide string version of compression algorithm. More...
 
 PYBIND11_MODULE (_fits, mod)
 
template ImageScale ImageScalingOptions::determine< std::uint8_t, 2 > (ndarray::Array< std::uint8_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::uint8_t > (ndarray::Array< std::uint8_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::uint8_t, 2, 2 > ImageScale::fromFits< std::uint8_t > (ndarray::Array< std::uint8_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::uint16_t, 2 > (ndarray::Array< std::uint16_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::uint16_t > (ndarray::Array< std::uint16_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::uint16_t, 2, 2 > ImageScale::fromFits< std::uint16_t > (ndarray::Array< std::uint16_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::int16_t, 2 > (ndarray::Array< std::int16_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::int16_t > (ndarray::Array< std::int16_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::int16_t, 2, 2 > ImageScale::fromFits< std::int16_t > (ndarray::Array< std::int16_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::uint32_t, 2 > (ndarray::Array< std::uint32_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::uint32_t > (ndarray::Array< std::uint32_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::uint32_t, 2, 2 > ImageScale::fromFits< std::uint32_t > (ndarray::Array< std::uint32_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::int32_t, 2 > (ndarray::Array< std::int32_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::int32_t > (ndarray::Array< std::int32_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::int32_t, 2, 2 > ImageScale::fromFits< std::int32_t > (ndarray::Array< std::int32_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::uint64_t, 2 > (ndarray::Array< std::uint64_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::uint64_t > (ndarray::Array< std::uint64_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::uint64_t, 2, 2 > ImageScale::fromFits< std::uint64_t > (ndarray::Array< std::uint64_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< std::int64_t, 2 > (ndarray::Array< std::int64_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< std::int64_t > (ndarray::Array< std::int64_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< std::int64_t, 2, 2 > ImageScale::fromFits< std::int64_t > (ndarray::Array< std::int64_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< boost::float32_t, 2 > (ndarray::Array< boost::float32_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< boost::float32_t > (ndarray::Array< boost::float32_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< boost::float32_t, 2, 2 > ImageScale::fromFits< boost::float32_t > (ndarray::Array< boost::float32_t, 2, 2 > const &) const
 
template ImageScale ImageScalingOptions::determine< boost::float64_t, 2 > (ndarray::Array< boost::float64_t const, 2, 2 > const &image, ndarray::Array< bool, 2, 2 > const &mask) const
 
template std::shared_ptr< detail::PixelArrayBaseImageScale::toFits< boost::float64_t > (ndarray::Array< boost::float64_t const, 2, 2 > const &, bool, bool, ndarray::Array< long, 1 > const &, int) const
 
template ndarray::Array< boost::float64_t, 2, 2 > ImageScale::fromFits< boost::float64_t > (ndarray::Array< boost::float64_t, 2, 2 > const &) const
 

Variables

const int DEFAULT_HDU = INT_MIN
 Specify that the default HDU should be read. More...
 

Function Documentation

◆ combineMetadata() [1/2]

std::shared_ptr< daf::base::PropertyList > lsst::afw::fits::combineMetadata ( daf::base::PropertyList const &  first,
daf::base::PropertyList const &  second 
)

Combine two sets of metadata in a FITS-appropriate fashion.

"COMMENT" and "HISTORY" entries:

  • If of type std::string then the values in second are appended to values in first
  • If not of type std::string then they are silently ignored

All other entries:

  • Values in second override values in first (regardless of type)
  • Only scalars are copied; if a vector is found, only the last value is copied
Parameters
[in]firstThe first set of metadata to combine
[in]secondThe second set of metadata to combine
Returns
The combined metadata. Item names have the following order:
  • names in first, omitting all names except "COMMENT" and "HISTORY" that appear in second
  • names in second, omitting "COMMENT" and "HISTORY" if valid versions appear in first

Definition at line 1635 of file fits.cc.

1637 {
1638 auto combined = std::make_shared<daf::base::PropertyList>();
1639 bool const asScalar = true;
1640 for (auto const &name : first.getOrderedNames()) {
1641 auto const iscv = isCommentIsValid(first, name);
1642 if (iscv.isComment) {
1643 if (iscv.isValid) {
1644 combined->add<std::string>(name, first.getArray<std::string>(name));
1645 }
1646 } else {
1647 combined->copy(name, first, name, asScalar);
1648 }
1649 }
1650 for (auto const &name : second.getOrderedNames()) {
1651 auto const iscv = isCommentIsValid(second, name);
1652 if (iscv.isComment) {
1653 if (iscv.isValid) {
1654 combined->add<std::string>(name, second.getArray<std::string>(name));
1655 }
1656 } else {
1657 // `copy` will replace an item, even if has a different type, so no need to call `remove`
1658 combined->copy(name, second, name, asScalar);
1659 }
1660 }
1661 return combined;
1662}
table::Key< std::string > name
Definition: Amplifier.cc:116

◆ combineMetadata() [2/2]

std::shared_ptr< daf::base::PropertyList > lsst::afw::fits::combineMetadata ( std::shared_ptr< daf::base::PropertyList const >  first,
std::shared_ptr< daf::base::PropertyList const >  second 
)

Definition at line 1664 of file fits.cc.

1666 {
1667 if (!first) {
1668 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "First argument may not be null/None.");
1669 }
1670 if (!second) {
1671 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "Second argument may not be null/None.");
1672 }
1673 return combineMetadata(*first, *second);
1674}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
Reports invalid arguments.
Definition: Runtime.h:66
std::shared_ptr< daf::base::PropertyList > combineMetadata(daf::base::PropertyList const &first, daf::base::PropertyList const &second)
Combine two sets of metadata in a FITS-appropriate fashion.
Definition: fits.cc:1635

◆ compressionAlgorithmFromCfitsio()

ImageCompressionOptions::CompressionAlgorithm lsst::afw::fits::compressionAlgorithmFromCfitsio ( int  cfitsio)

Convert compression algorithm from cfitsio to ImageCompressionOptions::CompressionAlgorithm.

Definition at line 49 of file fitsCompression.cc.

49 {
50 switch (cfitsio) {
51 case 0:
52 return ImageCompressionOptions::NONE;
53 case RICE_1:
54 return ImageCompressionOptions::RICE;
55 case GZIP_1:
56 return ImageCompressionOptions::GZIP;
57 case GZIP_2:
58 return ImageCompressionOptions::GZIP_SHUFFLE;
59 case PLIO_1:
60 return ImageCompressionOptions::PLIO;
61 case HCOMPRESS_1:
63 "Unsupported compression algorithm: HCOMPRESS_1");
64 default:
66 os << "Unrecognized cfitsio compression: " << cfitsio;
68 }
69}
std::ostream * os
Definition: Schema.cc:557

◆ compressionAlgorithmFromString()

ImageCompressionOptions::CompressionAlgorithm lsst::afw::fits::compressionAlgorithmFromString ( std::string const &  name)

Interpret compression algorithm expressed in string.

Definition at line 19 of file fitsCompression.cc.

19 {
20 if (name == "NONE") return ImageCompressionOptions::NONE;
21 if (name == "GZIP") return ImageCompressionOptions::GZIP;
22 if (name == "GZIP_SHUFFLE") return ImageCompressionOptions::GZIP_SHUFFLE;
23 if (name == "RICE") return ImageCompressionOptions::RICE;
24 if (name == "HCOMPRESS")
25 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "HCOMPRESS is unsupported");
26 if (name == "PLIO") return ImageCompressionOptions::PLIO;
27 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "Unrecognised compression algorithm: " + name);
28}

◆ compressionAlgorithmToCfitsio()

int lsst::afw::fits::compressionAlgorithmToCfitsio ( ImageCompressionOptions::CompressionAlgorithm  algorithm)

Convert ImageCompressionOptions::CompressionAlgorithm to cfitsio.

Definition at line 71 of file fitsCompression.cc.

71 {
72 switch (algorithm) {
73 case ImageCompressionOptions::NONE:
74 return 0;
75 case ImageCompressionOptions::GZIP:
76 return GZIP_1;
77 case ImageCompressionOptions::GZIP_SHUFFLE:
78 return GZIP_2;
79 case ImageCompressionOptions::RICE:
80 return RICE_1;
81 case ImageCompressionOptions::PLIO:
82 return PLIO_1;
83 default:
85 os << "Unrecognized compression algorithm: " << algorithm;
87 }
88}

◆ compressionAlgorithmToString()

std::string lsst::afw::fits::compressionAlgorithmToString ( ImageCompressionOptions::CompressionAlgorithm  algorithm)

Provide string version of compression algorithm.

Definition at line 30 of file fitsCompression.cc.

30 {
31 switch (algorithm) {
32 case ImageCompressionOptions::NONE:
33 return "NONE";
34 case ImageCompressionOptions::GZIP:
35 return "GZIP";
36 case ImageCompressionOptions::GZIP_SHUFFLE:
37 return "GZIP_SHUFFLE";
38 case ImageCompressionOptions::RICE:
39 return "RICE";
40 case ImageCompressionOptions::PLIO:
41 return "PLIO";
42 default:
44 os << "Unrecognized compression algorithm: " << algorithm;
46 }
47}

◆ getAllowImageCompression()

bool lsst::afw::fits::getAllowImageCompression ( )

Definition at line 1555 of file fits.cc.

1555{ return allowImageCompression; }

◆ getBitPix()

template<typename T >
int lsst::afw::fits::getBitPix ( )

Return the cfitsio integer BITPIX code for the given data type.

Definition at line 490 of file fits.cc.

490 {
491 return FitsBitPix<T>::CONSTANT;
492}

◆ ImageScale::fromFits< boost::float32_t >()

template ndarray::Array< boost::float32_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< boost::float32_t > ( ndarray::Array< boost::float32_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< boost::float64_t >()

template ndarray::Array< boost::float64_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< boost::float64_t > ( ndarray::Array< boost::float64_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::int16_t >()

template ndarray::Array< std::int16_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::int16_t > ( ndarray::Array< std::int16_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::int32_t >()

template ndarray::Array< std::int32_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::int32_t > ( ndarray::Array< std::int32_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::int64_t >()

template ndarray::Array< std::int64_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::int64_t > ( ndarray::Array< std::int64_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::uint16_t >()

template ndarray::Array< std::uint16_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::uint16_t > ( ndarray::Array< std::uint16_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::uint32_t >()

template ndarray::Array< std::uint32_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::uint32_t > ( ndarray::Array< std::uint32_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::uint64_t >()

template ndarray::Array< std::uint64_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::uint64_t > ( ndarray::Array< std::uint64_t, 2, 2 > const &  ) const

◆ ImageScale::fromFits< std::uint8_t >()

template ndarray::Array< std::uint8_t, 2, 2 > lsst::afw::fits::ImageScale::fromFits< std::uint8_t > ( ndarray::Array< std::uint8_t, 2, 2 > const &  ) const

◆ ImageScale::toFits< boost::float32_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< boost::float32_t > ( ndarray::Array< boost::float32_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< boost::float64_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< boost::float64_t > ( ndarray::Array< boost::float64_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::int16_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::int16_t > ( ndarray::Array< std::int16_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::int32_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::int32_t > ( ndarray::Array< std::int32_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::int64_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::int64_t > ( ndarray::Array< std::int64_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::uint16_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::uint16_t > ( ndarray::Array< std::uint16_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::uint32_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::uint32_t > ( ndarray::Array< std::uint32_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::uint64_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::uint64_t > ( ndarray::Array< std::uint64_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScale::toFits< std::uint8_t >()

template std::shared_ptr< detail::PixelArrayBase > lsst::afw::fits::ImageScale::toFits< std::uint8_t > ( ndarray::Array< std::uint8_t const, 2, 2 > const &  ,
bool  ,
bool  ,
ndarray::Array< long, 1 > const &  ,
int   
) const

◆ ImageScalingOptions::determine< boost::float32_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< boost::float32_t, 2 > ( ndarray::Array< boost::float32_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< boost::float64_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< boost::float64_t, 2 > ( ndarray::Array< boost::float64_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::int16_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::int16_t, 2 > ( ndarray::Array< std::int16_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::int32_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::int32_t, 2 > ( ndarray::Array< std::int32_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::int64_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::int64_t, 2 > ( ndarray::Array< std::int64_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::uint16_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::uint16_t, 2 > ( ndarray::Array< std::uint16_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::uint32_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::uint32_t, 2 > ( ndarray::Array< std::uint32_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::uint64_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::uint64_t, 2 > ( ndarray::Array< std::uint64_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ ImageScalingOptions::determine< std::uint8_t, 2 >()

template ImageScale lsst::afw::fits::ImageScalingOptions::determine< std::uint8_t, 2 > ( ndarray::Array< std::uint8_t const, 2, 2 > const &  image,
ndarray::Array< bool, 2, 2 > const &  mask 
) const

◆ makeContiguousArray()

template<typename T , int N, int C>
ndarray::Array< T const, N, N > const lsst::afw::fits::makeContiguousArray ( ndarray::Array< T, N, C > const &  array)

Construct a contiguous ndarray.

A deep copy is only performed if the array is not already contiguous.

Definition at line 208 of file fits.h.

208 {
209 ndarray::Array<T const, N, N> contiguous = ndarray::dynamic_dimension_cast<N>(array);
210 if (contiguous.empty()) contiguous = ndarray::copy(array);
211 return contiguous;
212}

◆ makeErrorMessage() [1/4]

std::string lsst::afw::fits::makeErrorMessage ( std::string const &  fileName,
int  status,
boost::format const &  msg 
)
inline

Definition at line 65 of file fits.h.

65 {
66 return makeErrorMessage(fileName, status, msg.str());
67}
std::string makeErrorMessage(void *fptr, int status, boost::format const &msg)
Definition: fits.h:79

◆ makeErrorMessage() [2/4]

std::string lsst::afw::fits::makeErrorMessage ( std::string const &  fileName = "",
int  status = 0,
std::string const &  msg = "" 
)

Return an error message reflecting FITS I/O errors.

Parameters
[in]fileNameFITS filename to be included in the error message.
[in]statusThe last status value returned by the cfitsio library; if nonzero, the error message will include a description from cfitsio.
[in]msgAn additional custom message to include.

Definition at line 426 of file fits.cc.

426 {
428 os << "cfitsio error";
429 if (fileName != "") {
430 os << " (" << fileName << ")";
431 }
432 if (status != 0) {
433 char fitsErrMsg[FLEN_ERRMSG];
434 fits_get_errstatus(status, fitsErrMsg);
435 os << ": " << fitsErrMsg << " (" << status << ")";
436 }
437 if (msg != "") {
438 os << " : " << msg;
439 }
440 os << "\ncfitsio error stack:\n";
441 char cfitsioMsg[FLEN_ERRMSG];
442 while (fits_read_errmsg(cfitsioMsg) != 0) {
443 os << " " << cfitsioMsg << "\n";
444 }
445 return os.str();
446}

◆ makeErrorMessage() [3/4]

std::string lsst::afw::fits::makeErrorMessage ( void *  fptr,
int  status,
boost::format const &  msg 
)
inline

Definition at line 79 of file fits.h.

79 {
80 return makeErrorMessage(fptr, status, msg.str());
81}

◆ makeErrorMessage() [4/4]

std::string lsst::afw::fits::makeErrorMessage ( void *  fptr,
int  status = 0,
std::string const &  msg = "" 
)

Return an error message reflecting FITS I/O errors.

Parameters
[in]fptrA cfitsio fitsfile pointer to be inspected for a filename. Passed as void* to avoid including fitsio.h in the header file.
[in]statusThe last status value returned by the cfitsio library; if nonzero, the error message will include a description from cfitsio.
[in]msgAn additional custom message to include.

Definition at line 448 of file fits.cc.

448 {
449 std::string fileName = "";
450 fitsfile *fd = reinterpret_cast<fitsfile *>(fptr);
451 if (fd != nullptr && fd->Fptr != nullptr && fd->Fptr->filename != nullptr) {
452 fileName = fd->Fptr->filename;
453 }
454 return makeErrorMessage(fileName, status, msg);
455}
std::string makeErrorMessage(std::string const &fileName="", int status=0, std::string const &msg="")
Return an error message reflecting FITS I/O errors.
Definition: fits.cc:426

◆ makeLimitedFitsHeader()

std::string lsst::afw::fits::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.

This function is designed to format data for creating a WCS. As such, it is quite limited:

  • It skips entries whose name is longer than 8 characters, since none are used for FITS-WCS
  • It skips string entries if the fully formatted string is longer than 80 characters
  • It skips entries with types it cannot handle (e.g. long, long long)
  • For entries that have array data, it only writes the final value, since that is the value that should be used by code that reads FITS headers.
  • It makes no attempt to insure that required entries, such as SIMPLE, are present.
Parameters
[in]metadataMetadata to format; if this is a PropertyList then the order of items is preserved
[in]excludeNamesNames of entries to exclude from the returned header string
Returns
a FITS header string (exactly 80 characters per entry, no line terminators)

Definition at line 457 of file fits.cc.

458 {
459 daf::base::PropertyList const *pl = dynamic_cast<daf::base::PropertyList const *>(&metadata);
460 std::vector<std::string> allParamNames;
461 if (pl) {
462 allParamNames = pl->getOrderedNames();
463 } else {
464 allParamNames = metadata.paramNames(false);
465 }
466 std::vector<std::string> desiredParamNames;
467 for (auto const &name : allParamNames) {
468 if (excludeNames.count(name) == 0) {
469 desiredParamNames.push_back(name);
470 }
471 }
472 return makeLimitedFitsHeaderImpl(desiredParamNames, metadata);
473}
Class for storing ordered metadata with comments.
Definition: PropertyList.h:68
std::vector< std::string > getOrderedNames() const
Get the list of property names, in the order they were added.
Definition: PropertyList.cc:82
T count(T... args)
T push_back(T... args)

◆ PYBIND11_MODULE()

lsst::afw::fits::PYBIND11_MODULE ( _fits  ,
mod   
)

Definition at line 274 of file _fits.cc.

274 {
275 lsst::utils::python::WrapperCollection wrappers(mod, "lsst.afw.fits");
276 wrappers.addSignatureDependency("lsst.pex.exceptions");
277 wrappers.addSignatureDependency("lsst.daf.base");
278 // FIXME: after afw.image pybind wrappers are converted
279 //wrappers.addSignatureDependency("lsst.afw.image");
280 wrappers.wrapException<FitsError, lsst::pex::exceptions::IoError>("FitsError", "IoError");
281 declareImageCompression(wrappers);
282 declareImageScalingOptions(wrappers);
283 declareImageScale(wrappers);
284 declareImageWriteOptions(wrappers);
285 declareFits(wrappers);
286 declareFitsModule(wrappers);
287 wrappers.finish();
288}
An exception thrown when problems are found when reading or writing FITS files.
Definition: fits.h:36
Reports errors in external input/output operations.
Definition: Runtime.h:160

◆ readMetadata() [1/3]

std::shared_ptr< daf::base::PropertyList > lsst::afw::fits::readMetadata ( fits::Fits fitsfile,
bool  strip = false 
)

Read FITS header.

Includes support for the INHERIT convention: if 'INHERIT = T' is in the header, the PHU will be read as well, and nominated HDU will override any duplicated values.

Parameters
fitsfilethe file and HDU to be read
stripif true, common FITS keys that usually have non-metadata intepretations (e.g. NAXIS, BITPIX) will be ignored.

Definition at line 1688 of file fits.cc.

1688 {
1689 auto metadata = std::make_shared<lsst::daf::base::PropertyList>();
1690 fitsfile.readMetadata(*metadata, strip);
1691 // if INHERIT=T, we want to also include header entries from the primary HDU
1692 int oldHdu = fitsfile.getHdu();
1693 if (oldHdu != 0 && metadata->exists("INHERIT")) {
1694 bool inherit = false;
1695 if (metadata->typeOf("INHERIT") == typeid(std::string)) {
1696 inherit = (metadata->get<std::string>("INHERIT") == "T");
1697 } else {
1698 inherit = metadata->get<bool>("INHERIT");
1699 }
1700 if (strip) metadata->remove("INHERIT");
1701 if (inherit) {
1702 HduMoveGuard guard(fitsfile, 0);
1703 // Combine the metadata from the primary HDU with the metadata from the specified HDU,
1704 // with non-comment values from the specified HDU superseding those in the primary HDU
1705 // and comments from the specified HDU appended to comments from the primary HDU
1706 auto primaryHduMetadata = std::make_shared<daf::base::PropertyList>();
1707 fitsfile.readMetadata(*primaryHduMetadata, strip);
1708 metadata = combineMetadata(*primaryHduMetadata, *metadata);
1709 } else {
1710 // Purge invalid values
1711 auto const emptyMetadata = std::make_shared<lsst::daf::base::PropertyList>();
1712 metadata = combineMetadata(*metadata, *emptyMetadata);
1713 }
1714 }
1715 return metadata;
1716}
void readMetadata(daf::base::PropertySet &metadata, bool strip=false)
Read a FITS header into a PropertySet or PropertyList.
Definition: fits.cc:1087
int getHdu()
Return the current HDU (0-indexed; 0 is the Primary HDU).
Definition: fits.cc:507
bool strip
Definition: fits.cc:911

◆ readMetadata() [2/3]

std::shared_ptr< daf::base::PropertyList > lsst::afw::fits::readMetadata ( fits::MemFileManager manager,
int  hdu = DEFAULT_HDU,
bool  strip = false 
)

Read FITS header.

Includes support for the INHERIT convention: if 'INHERIT = T' is in the header, the PHU will be read as well, and nominated HDU will override any duplicated values.

Parameters
managerthe in-memory file whose header will be read
hduthe HDU to read (0-indexed; 0 is the Primary HDU).
stripif true, common FITS keys that usually have non-metadata intepretations (e.g. NAXIS, BITPIX) will be ignored.

Definition at line 1682 of file fits.cc.

1682 {
1683 fits::Fits fp(manager, "r", fits::Fits::AUTO_CLOSE | fits::Fits::AUTO_CHECK);
1684 fp.setHdu(hdu);
1685 return readMetadata(fp, strip);
1686}
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
Definition: fits.h:297
std::shared_ptr< daf::base::PropertyList > readMetadata(std::string const &fileName, int hdu=DEFAULT_HDU, bool strip=false)
Read FITS header.
Definition: fits.cc:1676

◆ readMetadata() [3/3]

std::shared_ptr< daf::base::PropertyList > lsst::afw::fits::readMetadata ( std::string const &  fileName,
int  hdu = DEFAULT_HDU,
bool  strip = false 
)

Read FITS header.

Includes support for the INHERIT convention: if 'INHERIT = T' is in the header, the PHU will be read as well, and nominated HDU will override any duplicated values.

Parameters
fileNamethe file whose header will be read
hduthe HDU to read (0-indexed; 0 is the Primary HDU).
stripif true, common FITS keys that usually have non-metadata intepretations (e.g. NAXIS, BITPIX) will be ignored.

Definition at line 1676 of file fits.cc.

1676 {
1677 fits::Fits fp(fileName, "r", fits::Fits::AUTO_CLOSE | fits::Fits::AUTO_CHECK);
1678 fp.setHdu(hdu);
1679 return readMetadata(fp, strip);
1680}

◆ scalingAlgorithmFromString()

ImageScalingOptions::ScalingAlgorithm lsst::afw::fits::scalingAlgorithmFromString ( std::string const &  name)

Interpret scaling algorithm expressed in string.

Definition at line 98 of file fitsCompression.cc.

98 {
99 if (name == "NONE") return ImageScalingOptions::NONE;
100 if (name == "RANGE") return ImageScalingOptions::RANGE;
101 if (name == "STDEV_POSITIVE") return ImageScalingOptions::STDEV_POSITIVE;
102 if (name == "STDEV_NEGATIVE") return ImageScalingOptions::STDEV_NEGATIVE;
103 if (name == "STDEV_BOTH") return ImageScalingOptions::STDEV_BOTH;
104 if (name == "MANUAL") return ImageScalingOptions::MANUAL;
105 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "Unrecognized scaling algorithm: " + name);
106}

◆ scalingAlgorithmToString()

std::string lsst::afw::fits::scalingAlgorithmToString ( ImageScalingOptions::ScalingAlgorithm  algorithm)

Provide string version of compression algorithm.

Definition at line 108 of file fitsCompression.cc.

108 {
109 switch (algorithm) {
110 case ImageScalingOptions::NONE:
111 return "NONE";
112 case ImageScalingOptions::RANGE:
113 return "RANGE";
114 case ImageScalingOptions::STDEV_POSITIVE:
115 return "STDEV_POSITIVE";
116 case ImageScalingOptions::STDEV_NEGATIVE:
117 return "STDEV_NEGATIVE";
118 case ImageScalingOptions::STDEV_BOTH:
119 return "STDEV_BOTH";
120 case ImageScalingOptions::MANUAL:
121 return "MANUAL";
122 default:
124 os << "Unrecognized scaling algorithm: " << algorithm;
126 }
127}

◆ setAllowImageCompression()

void lsst::afw::fits::setAllowImageCompression ( bool  allow)

Definition at line 1553 of file fits.cc.

1553{ allowImageCompression = allow; }

Variable Documentation

◆ DEFAULT_HDU

const int lsst::afw::fits::DEFAULT_HDU = INT_MIN

Specify that the default HDU should be read.

This special HDU number indicates that the first extension should be used if the primary HDU is empty (i.e., has NAXIS=0) and the Primary HDU is the current.

Definition at line 18 of file fitsDefaults.h.