LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
Public Member Functions | List of all members
lsst::afw::image::ImageFitsReader Class Referencefinal

A FITS reader class for regular Images. More...

#include <ImageFitsReader.h>

Inheritance diagram for lsst::afw::image::ImageFitsReader:
lsst::afw::image::ImageBaseFitsReader

Public Member Functions

template<typename PixelT >
Image< PixelT > read (lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), ImageOrigin origin=PARENT, bool allowUnsafe=false)
 Read the Image. More...
 
std::string readDType () const
 Read a string describing the pixel type of the on-disk image. More...
 
lsst::geom::Box2I readBBox (ImageOrigin origin=PARENT)
 Read the bounding box of the on-disk image. More...
 
lsst::geom::Point2I readXY0 (lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), ImageOrigin origin=PARENT)
 Read the image origin from the on-disk image or a subimage thereof. More...
 
std::shared_ptr< daf::base::PropertyListreadMetadata ()
 Read the image's FITS header. More...
 
template<typename T >
ndarray::Array< T, 2, 2 > readArray (lsst::geom::Box2I const &bbox, ImageOrigin origin=PARENT, bool allowUnsafe=false)
 Read the image's data array. More...
 
int getHdu () const noexcept
 Return the HDU this reader targets. More...
 
std::string getFileName () const
 Return the name of the file this reader targets. More...
 

Detailed Description

A FITS reader class for regular Images.

Exception Safety
All ImageFitsReader methods provide strong exception safety, but exceptions thrown by the internal fits::Fits object itself may change its status variable or HDU pointer; ImageFitsReader guards against this by resetting those before any use of the Fits object.

Definition at line 39 of file ImageFitsReader.h.

Member Function Documentation

◆ getFileName()

std::string lsst::afw::image::ImageBaseFitsReader::getFileName ( ) const
inlineinherited

Return the name of the file this reader targets.

Definition at line 141 of file ImageBaseFitsReader.h.

141 { return _fitsFile->getFileName(); }
std::string getFileName() const
Return the file name associated with the FITS object or "<unknown>" if there is none.
Definition: fits.cc:497

◆ getHdu()

int lsst::afw::image::ImageBaseFitsReader::getHdu ( ) const
inlinenoexceptinherited

Return the HDU this reader targets.

Definition at line 136 of file ImageBaseFitsReader.h.

136 { return _hdu; }

◆ read()

template<typename PixelT >
template Image< std::uint64_t > lsst::afw::image::ImageFitsReader::read ( lsst::geom::Box2I const &  bbox = lsst::geom::Box2I(),
ImageOrigin  origin = PARENT,
bool  allowUnsafe = false 
)

Read the Image.

Parameters
bboxA bounding box used to defined a subimage, or an empty box (default) to read the whole image.
originCoordinate system convention for the given box.
allowUnsafePermit reading into the requested pixel type even when on-disk values may overflow or truncate.

In Python, this templated method is wrapped with an additional dtype argument to provide the type to read. This defaults to the type of the on-disk image.

Definition at line 27 of file ImageFitsReader.cc.

27  {
28  return Image<PixelT>(readArray<PixelT>(bbox, origin, allowUnsafe), false, readXY0(bbox, origin));
29 }
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
lsst::geom::Point2I readXY0(lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), ImageOrigin origin=PARENT)
Read the image origin from the on-disk image or a subimage thereof.

◆ readArray()

template<typename T >
template ndarray::Array< std::uint64_t, 2, 2 > lsst::afw::image::ImageBaseFitsReader::readArray ( lsst::geom::Box2I const &  bbox,
ImageOrigin  origin = PARENT,
bool  allowUnsafe = false 
)
inherited

Read the image's data array.

Parameters
bboxA bounding box used to defined a subimage, or an empty box (default) to read the whole image.
originCoordinate system convention for the given box.
allowUnsafePermit reading into the requested pixel type even when on-disk values may overflow or truncate.

Definition at line 171 of file ImageBaseFitsReader.cc.

172  {
173  checkFitsFile(_fitsFile);
174  auto fullBBox = readBBox(origin);
175  auto subBBox = bbox;
176  if (subBBox.isEmpty()) {
177  subBBox = fullBBox;
178  } else if (!fullBBox.contains(subBBox)) {
179  throw LSST_EXCEPT(
180  pex::exceptions::LengthError,
181  str(boost::format("Subimage box (%d,%d) %dx%d doesn't fit in image (%d,%d) %dx%d in HDU %d") %
182  subBBox.getMinX() % subBBox.getMinY() % subBBox.getWidth() % subBBox.getHeight() %
183  fullBBox.getMinX() % fullBBox.getMinY() % fullBBox.getWidth() % fullBBox.getHeight() % _hdu)
184  );
185  }
186  fits::HduMoveGuard guard(*_fitsFile, _hdu);
187  if (!allowUnsafe & !_fitsFile->checkImageType<T>()) {
188  throw LSST_FITS_EXCEPT(
189  fits::FitsTypeError, *_fitsFile,
190  str(boost::format("Incompatible type for FITS image: on disk is %s (HDU %d), in-memory is %s. "
191  "Read with allowUnsafe=True to permit conversions that may overflow.") %
192  _fitsFile->getImageDType() % _hdu % makeDTypeString<T>())
193  );
194  }
195  ndarray::Array<T, 2, 2> result = ndarray::allocate(subBBox.getHeight(), subBBox.getWidth());
196  ndarray::Vector<int, 2> offset = ndarray::makeVector(subBBox.getMinY() - fullBBox.getMinY(),
197  subBBox.getMinX() - fullBBox.getMinX());
198  _fitsFile->readImage(result, offset);
199  return result;
200 }
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
lsst::geom::Box2I readBBox(ImageOrigin origin=PARENT)
Read the bounding box of the on-disk image.
bool checkImageType()
Return true if the current HDU is compatible with the given pixel type.
Definition: fits.cc:1418
std::string getImageDType()
Return the numpy dtype equivalent of the image pixel type (e.g.
Definition: fits.cc:1449
void readImage(ndarray::Array< T, N, N > const &array, ndarray::Vector< int, N > const &offset)
Read an array from a FITS image.
Definition: fits.h:541
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
#define LSST_FITS_EXCEPT(type, fitsObj,...)
A FITS-related replacement for LSST_EXCEPT that takes an additional Fits object and uses makeErrorMes...
Definition: fits.h:105
py::object result
Definition: _schema.cc:429

◆ readBBox()

lsst::geom::Box2I lsst::afw::image::ImageBaseFitsReader::readBBox ( ImageOrigin  origin = PARENT)
inherited

Read the bounding box of the on-disk image.

Parameters
originCoordinate system convention for the returned box. If LOCAL, the returned box will always have a minimum of (0, 0).

Definition at line 86 of file ImageBaseFitsReader.cc.

86  {
87  readMetadata(); // guarantees _bbox is initialized
88  if (origin == LOCAL) {
90  }
91  return _bbox;
92 }
Extent2I const getDimensions() const noexcept
Definition: Box.h:186
std::shared_ptr< daf::base::PropertyList > readMetadata()
Read the image&#39;s FITS header.

◆ readDType()

std::string lsst::afw::image::ImageBaseFitsReader::readDType ( ) const
inherited

Read a string describing the pixel type of the on-disk image.

Returns
A string of the form [u](int|float)<bits> (e.g. "uint16", "float64").

Definition at line 80 of file ImageBaseFitsReader.cc.

80  {
81  checkFitsFile(_fitsFile);
82  fits::HduMoveGuard guard(*_fitsFile, _hdu);
83  return _fitsFile->getImageDType();
84 }
std::string getImageDType()
Return the numpy dtype equivalent of the image pixel type (e.g.
Definition: fits.cc:1449

◆ readMetadata()

std::shared_ptr< daf::base::PropertyList > lsst::afw::image::ImageBaseFitsReader::readMetadata ( )
inherited

Read the image's FITS header.

Definition at line 105 of file ImageBaseFitsReader.cc.

105  {
106  checkFitsFile(_fitsFile);
107  if (_metadata == nullptr) {
108  fits::HduMoveGuard guard(*_fitsFile, _hdu);
109  auto metadata = fits::readMetadata(*_fitsFile, /*strip=*/true);
110  // One-use lambda avoids declare-then-initialize; see C++ Core Guidelines, ES28.
111  auto computeShape = [this](){
112  int nAxis = _fitsFile->getImageDim();
113  if (nAxis == 2) {
114  return _fitsFile->getImageShape<2>();
115  }
116  if (nAxis == 3) {
117  ndarray::Vector<ndarray::Size, 3> shape3 = _fitsFile->getImageShape<3>();
118  if (shape3[0] != 1) {
119  throw LSST_EXCEPT(
120  fits::FitsError,
121  str(boost::format("Error reading %s: HDU %d has 3rd dimension %d != 1") %
122  getFileName() % _hdu % shape3[0]));
123  }
124  return shape3.last<2>();
125  }
126  throw LSST_EXCEPT(
127  fits::FitsError,
128  str(boost::format("Error reading %s: HDU %d has %d dimensions") %
129  getFileName() % _hdu % nAxis)
130  );
131  };
132  // Construct _bbox and check dimensions at the same time both to make
133  // one less valid state for this class to be in and to make sure
134  // the appropriate metadata is stripped before we ever return it.
135  ndarray::Vector<ndarray::Size, 2> shape = computeShape();
136  auto xy0 = afw::geom::getImageXY0FromMetadata(*metadata, detail::wcsNameForXY0, /*strip=*/true);
137  _bbox = lsst::geom::Box2I(xy0, lsst::geom::Extent2I(shape[1], shape[0]));
138  _metadata = std::move(metadata);
139  }
140  return _metadata;
141 }
int getImageDim()
Return the number of dimensions in the current HDU.
Definition: fits.cc:1405
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
std::string getFileName() const
Return the name of the file this reader targets.
ndarray::Vector< ndarray::Size, N > getImageShape()
Return the shape of the current (image) HDU.
Definition: fits.h:512
T move(T... args)
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
lsst::geom::Point2I getImageXY0FromMetadata(daf::base::PropertySet &metadata, std::string const &wcsName, bool strip=false)
Definition: wcsUtils.cc:98
std::string const wcsNameForXY0
Definition: ImageBase.h:70
std::shared_ptr< daf::base::PropertyList > readMetadata(std::string const &fileName, int hdu=DEFAULT_HDU, bool strip=false)
Read FITS header.
Definition: fits.cc:1640

◆ readXY0()

lsst::geom::Point2I lsst::afw::image::ImageBaseFitsReader::readXY0 ( lsst::geom::Box2I const &  bbox = lsst::geom::Box2I(),
ImageOrigin  origin = PARENT 
)
inherited

Read the image origin from the on-disk image or a subimage thereof.

Parameters
bboxA bounding box used to defined a subimage, or an empty box (default) to use the whole image.
originCoordinate system convention for the given box. Ignored if bbox is empty.

Definition at line 94 of file ImageBaseFitsReader.cc.

94  {
95  if (bbox.isEmpty()) {
96  return readBBox().getMin();
97  } else if (origin == PARENT) {
98  return bbox.getMin();
99  } else {
100  auto full = readBBox();
101  return full.getMin() + lsst::geom::Extent2I(bbox.getMin());
102  }
103 }
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
lsst::geom::Box2I readBBox(ImageOrigin origin=PARENT)
Read the bounding box of the on-disk image.
Point2I const getMin() const noexcept
Definition: Box.h:156
Extent< int, 2 > Extent2I
Definition: Extent.h:397

The documentation for this class was generated from the following files: