32 #include "boost/format.hpp"
34 #include "lsst/pex/exceptions.h"
37 namespace pexExcept = lsst::pex::exceptions;
38 namespace afwImage = lsst::afw::image;
39 namespace coaddUtils = lsst::coadd::utils;
41 template<
typename WeightPixelT>
44 lsst::afw::image::Mask<lsst::afw::image::MaskPixel> &coaddMask,
45 lsst::afw::image::Image<WeightPixelT>
const &weightMap
47 typedef afwImage::Mask<afwImage::MaskPixel>::x_iterator MaskXIter;
48 typedef typename afwImage::Image<WeightPixelT>::const_x_iterator WeightMapConstXIter;
50 if (coaddMask.getDimensions() != weightMap.getDimensions()) {
51 throw LSST_EXCEPT(pexExcept::InvalidParameterError,
52 (boost::format(
"coaddMask and weightMap dimensions differ: %dx%d != %dx%d") %
53 coaddMask.getWidth() % coaddMask.getHeight() % weightMap.getWidth() % weightMap.getHeight()
57 afwImage::MaskPixel
const edgeMask = afwImage::Mask<afwImage::MaskPixel>::getPlaneBitMask(
"NO_DATA");
60 for (
int y = 0, endY = weightMap.getHeight(); y != endY; ++y) {
61 WeightMapConstXIter weightMapPtr = weightMap.row_begin(y);
62 WeightMapConstXIter
const weightMapEndPtr = weightMap.row_end(y);
63 MaskXIter coaddMaskPtr = coaddMask.row_begin(y);
64 for (; weightMapPtr != weightMapEndPtr; ++weightMapPtr, ++coaddMaskPtr) {
65 if (*weightMapPtr == 0) {
66 (*coaddMaskPtr) = (*coaddMaskPtr) | edgeMask;
76 #define INSTANTIATE(WEIGHTPIXEL) \
77 template void coaddUtils::setCoaddEdgeBits<WEIGHTPIXEL>( \
78 afwImage::Mask<afwImage::MaskPixel> &coaddMask, \
79 afwImage::Image<WEIGHTPIXEL> const &weightMap \
85 INSTANTIATE(std::uint16_t);
void setCoaddEdgeBits(lsst::afw::image::Mask< lsst::afw::image::MaskPixel > &coaddMask, lsst::afw::image::Image< WeightPixelT > const &weightMap)
set edge bits of coadd mask based on weight map