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);