24 #include "ndarray/eigen.h"
40 FlagDefinitionList flagDefinitions;
79 double computeGaussianWidth(Method how = ADAPTIVE_MOMENT)
const;
80 double computeEffectiveArea()
const;
100 PsfAttributes::PsfAttributes(
105 _psfImage(
psf->computeImage(geom::
PointD(cen))) {}
111 double PsfAttributes::computeEffectiveArea()
const {
114 for (
int iY = 0; iY != _psfImage->getHeight(); ++iY) {
118 sumsqr += (*ptr) * (*ptr);
121 return sum * sum / sumsqr;
133 template <
typename T>
145 if ((std::abs(fracShift[0]) >= 1) || (std::abs(fracShift[1]) >= 1)) {
147 os <<
"fracShift = " << fracShift <<
" too large; abs value must be < 1 in both axes";
152 if (fracShift[0] < 0) {
153 warpingKernelPtr->setCtr(warpingKernelPtr->getCtr() +
geom::Extent2I(1, 0));
155 if (fracShift[1] < 0) {
156 warpingKernelPtr->setCtr(warpingKernelPtr->getCtr() +
geom::Extent2I(0, 1));
159 warpingKernelPtr->getDimensions());
162 os <<
"Warping kernel extends off the edge"
163 <<
"; kernel bbox = " << warpingOverlapBBox <<
"; exposure bbox = " << maskedImage.
getBBox();
166 warpingKernelPtr->setKernelParameters(
std::make_pair(fracShift[0], fracShift[1]));
167 KernelImageT warpingKernelImage(warpingKernelPtr->getDimensions());
168 warpingKernelPtr->computeImage(warpingKernelImage,
true);
169 typename KernelImageT::const_xy_locator
const warpingKernelLoc = warpingKernelImage.xy_at(0, 0);
174 typename MaskedImageT::const_xy_locator
const mimageLoc =
175 maskedImage.
xy_at(subimMin.getX(), subimMin.getY());
176 return afw::math::convolveAtAPoint<MaskedImageT, MaskedImageT>(
177 mimageLoc, warpingKernelLoc, warpingKernelPtr->getWidth(), warpingKernelPtr->getHeight());
191 geom::Point2D center = _centroidExtractor(measRecord, _flagHandler);
212 os <<
"Center = " << center <<
" not in exposure bbox" << mimage.getBBox();
221 geom::Point2I ctrPixParentInd(xCtrPixParentIndFrac.first, yCtrPixParentIndFrac.first);
226 PsfAttributes psfAttr(psfPtr, ctrPixParentInd);
227 double weight = psfAttr.computeEffectiveArea();
235 geom::Point2D(xCtrPixParentIndFrac.second, yCtrPixParentIndFrac.second), ctrPixParentInd);
236 double instFlux = mimageCtrPix.image() * weight;
237 double var = mimageCtrPix.variance() * weight * weight;
238 result.instFlux = instFlux;
240 measRecord.
set(_instFluxResultKey,
result);