34 #include "boost/assign/list_of.hpp"
51 : _kernelPtr(kernelPtr), _bbox(
bbox), _xy0(xy0), _doNormalize(doNormalize), _imagePtrList(4) {
55 LOGL_DEBUG(
"TRACE5.afw.math.convolve.KernelImagesForRegion",
56 "KernelImagesForRegion(bbox(minimum=(%d, %d), extent=(%d, %d)), xy0=(%d, %d), doNormalize=%d, "
66 : _kernelPtr(kernelPtr), _bbox(
bbox), _xy0(xy0), _doNormalize(doNormalize), _imagePtrList(4) {
72 _insertImage(
TOP_LEFT, topLeftImagePtr);
73 _insertImage(
TOP_RIGHT, topRightImagePtr);
74 LOGL_DEBUG(
"TRACE5.afw.math.convolve.KernelImagesForRegion",
75 "KernelImagesForRegion(bbox(minimum=(%d, %d), extent=(%d, %d)), xy0=(%d, %d), doNormalize=%d, "
82 if (_imagePtrList[location]) {
83 return _imagePtrList[location];
87 _imagePtrList[location] = imagePtr;
88 _computeImage(location);
108 os <<
"Bug: unhandled location = " << location;
119 bool hasData = regionRow.
hasData();
122 startY = regionRow.
front()->getBBox().getMaxY() + 1;
124 startY = this->_bbox.
getMinY();
128 int remHeight = 1 + this->_bbox.
getMaxY() - startY;
129 int remYDiv = regionRow.
getNY() - yInd;
130 int height = _computeNextSubregionLength(remHeight, remYDiv);
136 rgnIter != rgnEnd; ++rgnIter) {
137 (*rgnIter)->_moveUp(isFirst, height);
149 int remWidth = this->_bbox.
getWidth();
150 int remXDiv = regionRow.
getNX();
152 rgnIter != rgnEnd; ++rgnIter) {
153 int width = _computeNextSubregionLength(remWidth, remXDiv);
159 _doNormalize, blImagePtr, brImagePtr, tlImagePtr, trImageNullPtr));
160 *rgnIter = regionPtr;
168 tlImagePtr = regionPtr->getImage(
TOP_RIGHT);
174 void KernelImagesForRegion::_computeImage(Location location)
const {
175 ImagePtr imagePtr = _imagePtrList[location];
178 os <<
"Null imagePtr at location " << location;
188 if ((nDivisions >
length) || (nDivisions < 1)) {
190 os <<
"nDivisions = " << nDivisions <<
" not in range [1, " <<
length <<
" = length]";
195 for (
int remNDiv = nDivisions; remNDiv > 0; --remNDiv) {
196 int subLength = _computeNextSubregionLength(remLength, remNDiv);
199 os <<
"Bug! _computeSubregionLengths(length=" <<
length <<
", nDivisions=" << nDivisions
200 <<
") computed sublength = " << subLength <<
" < 0; remLength = " << remLength;
204 remLength -= subLength;
206 return regionLengths;
209 void KernelImagesForRegion::_moveUp(
bool isFirst,
int newHeight) {
225 int const KernelImagesForRegion::_MinInterpolationSize = 10;
228 : _nx(nx), _ny(ny), _yInd(-1), _regionList(nx) {
229 if ((nx < 1) || (ny < 1)) {
231 os <<
"nx = " << nx <<
" and/or ny = " << ny <<
" < 1";
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
LSST DM logging module built on log4cxx.
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
lsst::geom::Extent2I const getDimensions() const
Return the Kernel's dimensions (width, height)
double computeImage(lsst::afw::image::Image< Pixel > &image, bool doNormalize, double x=0.0, double y=0.0) const
Compute an image (pixellized representation of the kernel) in place.
Location
locations of various points in the region
KernelImagesForRegion(KernelConstPtr kernelPtr, lsst::geom::Box2I const &bbox, lsst::geom::Point2I const &xy0, bool doNormalize)
Construct a KernelImagesForRegion.
bool computeNextRow(RowOfKernelImagesForRegion ®ionRow) const
Compute next row of subregions.
lsst::geom::Point2I getPixelIndex(Location location) const
Compute pixel index of a given location, relative to the parent image (thus offset by bottom left cor...
ImagePtr getImage(Location location) const
Return the image and sum at the specified location.
lsst::afw::image::Image< lsst::afw::math::Kernel::Pixel > Image
std::shared_ptr< Image > ImagePtr
A row of KernelImagesForRegion.
RowOfKernelImagesForRegion(int nx, int ny)
Construct a RowOfKernelImagesForRegion.
std::shared_ptr< KernelImagesForRegion > front()
Return the first region in the list.
RegionList::const_iterator begin() const
Return the begin iterator for the list.
RegionList::iterator Iterator
RegionList::const_iterator end() const
Return the end iterator for the list.
An integer coordinate rectangle.
int getMinY() const noexcept
int getHeight() const noexcept
Point2I const getMin() const noexcept
int getMinX() const noexcept
int getWidth() const noexcept
int getMaxX() const noexcept
int getMaxY() const noexcept
Reports invalid arguments.
Reports attempts to access elements using an invalid key.
Reports errors that are due to events beyond the control of the program.
double indexToPosition(double ind)
Convert image index to image position.
Extent< int, 2 > Extent2I
A base class for image defects.