30 #include "boost/format.hpp"
31 #include "boost/algorithm/string/trim.hpp"
51 template <
typename ImageT,
typename MaskT,
typename VarianceT>
56 template <
typename ImageT,
typename MaskT,
typename VarianceT>
61 template <
typename ImageT,
typename MaskT,
typename VarianceT>
66 template <
typename ImageT,
typename MaskT,
typename VarianceT>
71 template <
typename ImageT,
typename MaskT,
typename VarianceT>
75 template <
typename ImageT,
typename MaskT,
typename VarianceT>
79 template <
typename ImageT,
typename MaskT,
typename VarianceT>
82 template <
typename ImageT,
typename MaskT,
typename VarianceT>
85 : _maskedImage(
src.getMaskedImage(),
bbox, origin, deep),
88 template <
typename ImageT,
typename MaskT,
typename VarianceT>
90 ImageOrigin origin,
bool conformMasks,
bool allowUnsafe)
93 *
this = reader.
read<ImageT, MaskT, VarianceT>(
bbox, origin, conformMasks, allowUnsafe);
96 template <
typename ImageT,
typename MaskT,
typename VarianceT>
98 ImageOrigin origin,
bool conformMasks,
bool allowUnsafe)
101 *
this = reader.
read<ImageT, MaskT, VarianceT>(
bbox, origin, conformMasks, allowUnsafe);
104 template <
typename ImageT,
typename MaskT,
typename VarianceT>
106 ImageOrigin origin,
bool conformMasks,
bool allowUnsafe) {
108 *
this = reader.
read<ImageT, MaskT, VarianceT>(
bbox, origin, conformMasks, allowUnsafe);
111 template <
typename ImageT,
typename MaskT,
typename VarianceT>
116 template <
typename ImageT,
typename MaskT,
typename VarianceT>
118 _maskedImage = maskedImage;
121 template <
typename ImageT,
typename MaskT,
typename VarianceT>
124 if (_info->hasWcs()) {
126 auto newWcs = _info->getWcs()->copyAtShiftedPixelOrigin(shift);
127 _info->setWcs(newWcs);
129 _maskedImage.setXY0(origin);
132 template <
typename ImageT,
typename MaskT,
typename VarianceT>
134 template <
typename ImageT,
typename MaskT,
typename VarianceT>
139 template <
typename ImageT,
typename MaskT,
typename VarianceT>
145 template <
typename ImageT,
typename MaskT,
typename VarianceT>
151 template <
typename ImageT,
typename MaskT,
typename VarianceT>
158 template <
typename ImageT,
typename MaskT,
typename VarianceT>
164 writeFits(fitsfile, imageOptions, maskOptions, varianceOptions);
167 template <
typename ImageT,
typename MaskT,
typename VarianceT>
173 writeFits(fitsfile, imageOptions, maskOptions, varianceOptions);
176 template <
typename ImageT,
typename MaskT,
typename VarianceT>
181 ExposureInfo::FitsWriteData
data = _info->_startWriteFits(getXY0());
182 _maskedImage.writeFits(fitsfile, imageOptions, maskOptions, varianceOptions,
data.metadata,
183 data.imageMetadata,
data.maskMetadata,
data.varianceMetadata);
184 _info->_finishWriteFits(fitsfile,
data);
196 template <
class ExposureT>
197 void _copyCommonPixels(ExposureT &destination, ExposureT
const &
source) {
203 typename ExposureT::MaskedImageT overlapPixels(
source.getMaskedImage(), overlapBox);
204 destination.getMaskedImage().assign(overlapPixels, overlapBox);
209 template <
typename ImageT,
typename MaskT,
typename VarianceT>
219 buffer <<
"Point " << center <<
" lies at pixel " << pixelCenter <<
", which lies outside Exposure "
223 if (size[0] <= 0 || size[1] <= 0) {
225 buffer <<
"Cannot create bounding box with dimensions " << size;
231 auto copyInfo = std::make_shared<ExposureInfo>(*
getInfo());
233 blank = math::edgePixel<MaskedImageT>(
237 _copyCommonPixels(cutout, *
this);
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
afw::table::PointKey< int > dimensions
std::shared_ptr< RecordT > src
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
Lifetime-management for memory that goes into FITS memory files.
A FITS reader class for Exposures and their components.
Exposure< ImagePixelT, MaskPixelT, VariancePixelT > read(lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), ImageOrigin origin=PARENT, bool conformMasks=false, bool allowUnsafe=false)
Read the full Exposure.
A class to contain the data, WCS, and other information needed to describe an image of the sky.
Exposure getCutout(lsst::geom::SpherePoint const ¢er, lsst::geom::Extent2I const &size) const
Return an Exposure that is a small cutout of the original.
void writeFits(std::string const &fileName) const
Write an Exposure to a regular multi-extension FITS file.
virtual ~Exposure()
Destructor.
Exposure(unsigned int width, unsigned int height, std::shared_ptr< geom::SkyWcs const > wcs=std::shared_ptr< geom::SkyWcs const >())
Construct an Exposure with a blank MaskedImage of specified size (default 0x0) and a SkyWcs (which ma...
Exposure & operator=(Exposure const &)
void setXY0(lsst::geom::Point2I const &origin)
Set the Exposure's origin (including correcting the Wcs)
void setMaskedImage(MaskedImageT &maskedImage)
Set the MaskedImage of the Exposure.
A collection of all the things that make an Exposure different from a MaskedImage.
A class to manipulate images, masks, and variance as a single object.
A floating-point coordinate rectangle geometry.
An integer coordinate rectangle.
void clip(Box2I const &other) noexcept
Shrink this to ensure that other.contains(*this).
bool isEmpty() const noexcept
Return true if the box contains no points.
static Box2I makeCenteredBox(Point2D const ¢er, Extent const &size)
Create a box centered as closely as possible on a particular point.
Point in an unspecified spherical coordinate system.
Reports invalid arguments.
Reports errors in the logical structure of the program.
const char * source()
Source function that allows astChannel to source from a Stream.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
Extent< double, 2 > Extent2D
def writeFits(filename, stamp_ims, metadata, write_mask, write_variance)
A base class for image defects.
Options for writing an image to FITS.
ImageT::image_category image_category