18 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
21 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
25 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
28 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
31 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
34 template <
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
54 const itype nil = 0xffff;
62 foot->getSpans()->setImage(*argmin, static_cast<itype>(i));
63 foot->getSpans()->setImage(*dist, static_cast<dtype>(1));
68 int const height = dist->getHeight();
69 int const width = dist->getWidth();
72 for (
int y = 0;
y != height; ++
y) {
75 for (
int x = 0;
x != width; ++
x, ++dim.x(), ++aim.x()) {
83 dim(0, 0) = width + height;
87 dtype ndist = dim(0,-1) + 1;
88 if (ndist < dim(0,0)) {
95 dtype ndist = dim(-1,0) + 1;
96 if (ndist < dim(0,0)) {
105 for (
int y = height - 1;
y >= 0; --
y) {
108 for (
int x = width - 1;
x >= 0; --
x, --dim.x(), --aim.x()) {
111 if (
y + 1 < height) {
112 dtype ndist = dim(0,1) + 1;
113 if (ndist < dim(0,0)) {
120 dtype ndist = dim(1,0) + 1;
121 if (ndist < dim(0,0)) {
144 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
150 int S = halfsize*2 + 1;
153 xy_loc pix = img.
xy_at(halfsize,halfsize);
155 for (
int i=0; i<S; ++i) {
156 for (
int j=0; j<S; ++j) {
157 locs.
push_back(pix.cache_location(j-halfsize, i-halfsize));
162 ImagePixelT vals[S*S];
163 for (
int y=halfsize;
y<H-halfsize; ++
y) {
166 inpix !=
end; ++inpix.x(), ++optr) {
167 for (
int i=0; i<SS; ++i)
168 vals[i] = inpix[locs[i]];
175 for (
int y=0;
y<2*halfsize; ++
y) {
178 iy = H - 1 - (
y-halfsize);
181 for (; iptr !=
end; ++iptr,++optr)
184 for (
int y=halfsize;
y<H-halfsize; ++
y) {
187 for (; iptr !=
end; ++iptr,++optr)
192 for (; iptr !=
end; ++iptr,++optr)
222 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
229 int cx = peak.
getIx();
230 int cy = peak.
getIy();
231 int ix0 = img.
getX0();
232 int iy0 = img.
getY0();
245 for (s = 0; s <
std::max(DW,DH); s += S) {
247 for (p=0; p<S; p++) {
287 for (
int i=0; i<(8*L); i++, x += dx, y += dy) {
291 if (i % (2*L) == 0) {
294 dx = ( leg % 2) * (-1 + 2*(leg/2));
296 dy = ((leg+1) % 2) * ( 1 - 2*(leg/2));
299 int px = cx + x - ix0;
300 int py = cy + y - iy0;
302 if (px < 0 || px >= iW || py < 0 || py >= iH)
305 ImagePixelT pix = (*shadowingImg)(px,py);
312 const double A = 0.3;
318 ds0 = (double(y) / double(x)) - A;
321 for (shx=1; shx<=S; shx++) {
322 int xsign = (x>0?1:-1);
324 psx = cx + x + (xsign*shx) - ix0;
325 if (psx < 0 || psx >= iW)
328 for (shy = lround(shx * ds0);
329 shy <= lround(shx * ds1); shy++) {
330 psy = cy + y + xsign*shy - iy0;
331 if (psy < 0 || psy >= iH)
333 img(psx, psy) =
std::min(img(psx, psy), pix);
339 ds0 = (double(x) / double(y)) - A;
342 for (shy=1; shy<=S; shy++) {
343 int ysign = (y>0?1:-1);
344 psy = cy + y + (ysign*shy) - iy0;
345 if (psy < 0 || psy >= iH)
348 for (shx = lround(shy * ds0);
349 shx <= lround(shy * ds1); shx++) {
350 psx = cx + x + ysign*shx - ix0;
351 if (psx < 0 || psx >= iW)
353 img(psx, psy) =
std::min(img(psx, psy), pix);
359 shadowingImg->assign(img);
363 static double _get_contrib_r_to_footprint(
int x,
int y,
369 int dx = sp.getX0() -
x;
382 int dy = sp.getY() -
y;
383 minr2 =
std::min(minr2, (
double)(mindx*mindx + dy*dy));
386 return 1. / (1. + minr2);
390 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
396 int strayFluxOptions,
401 double clipStrayFluxFraction,
416 int ix0 = img.
getX0();
417 int iy0 = img.
getY0();
422 for (
size_t i=0; i<tfoots.size(); ++i) {
429 bool always = (strayFluxOptions & STRAYFLUX_TO_POINT_SOURCES_ALWAYS);
434 if (strayFluxOptions & STRAYFLUX_NEAREST_FOOTPRINT) {
444 if (!always && ispsf.
size()) {
447 auto empty = std::make_shared<det::Footprint>();
449 for (
size_t i=0; i<tfoots.size(); ++i) {
456 footlist = &templist;
458 nearestFootprint(*footlist, nearest, dist);
468 tsum->row_begin(y - sumy0) + (x0 - sumx0);
471 double contrib[tfoots.size()];
473 for (
int x = x0; x <= x1; ++
x, ++tsum_it, ++in_it) {
477 if ((*tsum_it > 0) || (*in_it).image() <= 0) {
481 if (strayFluxOptions & STRAYFLUX_R_TO_FOOTPRINT) {
483 for (
size_t i=0; i<tfoots.size(); ++i) {
486 }
else if (strayFluxOptions & STRAYFLUX_NEAREST_FOOTPRINT) {
487 for (
size_t i=0; i<tfoots.size(); ++i) {
490 int i = nearest->get0(x, y);
494 for (
size_t i=0; i<tfoots.size(); ++i) {
499 contrib[i] = 1. / (1. + dx*dx + dy*dy);
505 bool ptsrcs = always;
507 for (
size_t i=0; i<tfoots.size(); ++i) {
509 if ((!ptsrcs) && ispsf.
size() && ispsf[i]) {
512 if (contrib[i] == -1.0) {
513 contrib[i] = _get_contrib_r_to_footprint(x, y, tfoots[i]);
519 STRAYFLUX_TO_POINT_SOURCES_WHEN_NECESSARY)) {
523 for (
size_t i=0; i<tfoots.size(); ++i) {
524 if (contrib[i] == -1.0) {
525 contrib[i] = _get_contrib_r_to_footprint(x, y, tfoots[i]);
532 double strayclip = (clipStrayFluxFraction * csum);
534 for (
size_t i=0; i<tfoots.size(); ++i) {
536 if ((!ptsrcs) && ispsf.
size() && ispsf[i]) {
541 if (contrib[i] < strayclip) {
548 for (
size_t i=0; i<tfoots.size(); ++i) {
549 if (contrib[i] == 0.) {
553 double p = (contrib[i] / csum) * (*in_it).image();
556 strayfoot[i] = std::make_shared<det::Footprint>();
562 strayvar[i].
push_back((*in_it).variance());
568 for (
size_t i=0; i<tfoots.size(); ++i) {
570 strayfoot[i]->setSpans(std::make_shared<afwGeom::SpanSet>(straySpans[i]));
578 HeavyFootprintPtrT heavy(
new HeavyFootprint(*strayfoot[i]));
579 ndarray::Array<ImagePixelT,1,1> himg = heavy->getImageArray();
587 assert((
size_t)strayfoot[i]->getArea() == straypix[i].size());
589 for (spix = straypix[i].begin(),
590 smask = straymask[i].begin(),
591 svar = strayvar [i].begin(),
593 mpix = heavy->getMaskArray().begin(),
594 vpix = heavy->getVarianceArray().begin();
595 spix != straypix[i].
end();
596 ++spix, ++smask, ++svar, ++hpix, ++mpix, ++vpix) {
606 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
616 for (
size_t i=0; i<timgs.
size(); ++i) {
632 tsum->row_begin(y - sumy0) + (copyx0 - sumx0);
633 for (; in_it != inend; ++in_it, ++tsum_it) {
634 *tsum_it +=
std::max((ImagePixelT)0., static_cast<ImagePixelT>(*in_it));
689 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
701 int strayFluxOptions,
702 double clipStrayFluxFraction
705 if (timgs.
size() != tfoots.size()) {
707 (
boost::format(
"Template images must be the same length as template footprints (%d vs %d)")
708 % timgs.
size() % tfoots.size()).
str());
711 for (
size_t i=0; i<timgs.
size(); ++i) {
712 if (!timgs[i]->getBBox().contains(tfoots[i]->getBBox())) {
714 "Template image MUST contain template footprint");
718 "Image bbox MUST contain parent footprint");
729 bool findStrayFlux = (strayFluxOptions & ASSIGN_STRAYFLUX);
731 int ix0 = img.
getX0();
732 int iy0 = img.
getY0();
740 if (!tsum->getBBox().contains(foot.
getBBox())) {
742 "Template sum image MUST contain parent footprint");
749 _sum_templates(timgs, tsum);
752 for (
size_t i=0; i<timgs.
size(); ++i) {
756 port->setXY0(timg->getXY0());
770 timg->row_begin(y - ty0) + (copyx0 - tx0);
773 tsum->row_begin(y - sumy0) + (copyx0 - sumx0);
775 port->row_begin(y - ty0) + (copyx0 - tx0);
776 for (; tptr != tend; ++tptr, ++in_it, ++out_it, ++tsum_it) {
780 double frac =
std::max((ImagePixelT)0., static_cast<ImagePixelT>(*tptr)) / (*tsum_it);
784 out_it.mask() = (*in_it).mask();
785 out_it.variance() = (*in_it).variance();
786 out_it.image() = (*in_it).image() * frac;
792 if ((ispsf.size() > 0) && (ispsf.size() != timgs.
size())) {
794 (
boost::format(
"'ispsf' must be the same length as templates (%d vs %d)")
795 % ispsf.size() % timgs.
size()).
str());
797 if ((pkx.size() != timgs.
size()) || (pky.size() != timgs.
size())) {
799 (
boost::format(
"'pkx' and 'pky' must be the same length as templates (%d,%d vs %d)")
800 % pkx.size() % pky.size() % timgs.
size()).
str());
802 _find_stray_flux(foot, tsum, img, strayFluxOptions, tfoots,
803 ispsf, pkx, pky, clipStrayFluxFraction, strays);
825 int cx,
int cy,
bool forward=
true)
826 : _real(real), _cx(cx), _cy(cy), _forward(forward)
836 return _real ==
other;
839 return _real !=
other;
842 return _real <=
other;
845 return _real <
other;
848 return _real >=
other;
851 return _real >
other;
855 return (_real == other._real) &&
856 (_cx == other._cx) && (_cy == other._cy) &&
857 (_forward == other._forward);
860 return !(*
this ==
other);
881 return _real >= _end;
887 return _real->getX0() - _cx;
889 return _cx - _real->getX1();
894 return _real->getX1() - _cx;
896 return _cx - _real->getX0();
900 return std::abs(_real->getY() - _cy);
903 return _real->getX0();
906 return _real->getX1();
909 return _real->getY();
971 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
978 auto sfoot = std::make_shared<det::Footprint>();
993 if (peakspan == spans.
begin()) {
995 if (!sp.contains(cx, cy)) {
997 "Failed to find span containing (%i,%i): before the beginning of this footprint", cx, cy);
1004 if (!sp.contains(cx, cy)) {
1007 if (!sp.contains(cx, cy)) {
1009 LOGL_WARN(_log,
"Failed to find span containing (%i,%i): nearest is %i, [%i,%i]. " 1010 "Footprint bbox is [%i,%i],[%i,%i]",
1011 cx, cy, sp.getY(), sp.getX0(), sp.getX1(),
1017 LOGL_DEBUG(_log,
"Span containing (%i,%i): (x=[%i,%i], y=%i)",
1018 cx, cy, sp.getX0(), sp.getX1(), sp.getY());
1053 while (fwd.notDone() && back.
notDone()) {
1058 int fdxlo = fwd.dxlo();
1059 int bdxlo = back.
dxlo();
1066 for (fend = fwd; fend.
notDone(); ++fend) {
1067 if (fend.
dy() != dy)
1070 for (bend = back; bend.
notDone(); ++bend) {
1071 if (bend.
dy() != dy)
1075 LOGL_DEBUG(_log,
"dy=%i, fy=%i, fx=[%i, %i], by=%i, fx=[%i, %i], fdx=%i, bdx=%i",
1076 dy, fy, fwd.x0(), fwd.x1(), by, back.
x0(), back.
x1(),
1080 if (bdxlo > fdxlo) {
1085 while ((fwd != fend) && (fwd.dxhi() < bdxlo)) {
1090 LOGL_DEBUG(_log,
"Advanced to forward span %i, [%i, %i]",
1091 fy, fwd.x0(), fwd.x1());
1094 }
else if (fdxlo > bdxlo) {
1099 while ((back != bend) && (back.
dxhi() < fdxlo)) {
1104 LOGL_DEBUG(_log,
"Advanced to backward span %i, [%i, %i]",
1105 by, back.
x0(), back.
x1());
1110 if ((back == bend) || (fwd == fend)) {
1129 LOGL_DEBUG(_log,
"Adding span fwd %i, [%i, %i], back %i, [%i, %i]",
1130 fy, cx+dxlo, cx+dxhi, by, cx-dxhi, cx-dxlo);
1136 if (fwd.dxhi() < back.
dxhi()) {
1141 LOGL_DEBUG(_log,
"Stepped forward to span %i, [%i, %i]",
1142 fwd.y(), fwd.x0(), fwd.x1());
1149 LOGL_DEBUG(_log,
"Stepped backward to span %i, [%i, %i]",
1150 back.
y(), back.
x0(), back.
x1());
1154 if ((back == bend) || (fwd == fend)) {
1169 sfoot->setSpans(std::make_shared<afwGeom::SpanSet>(
std::move(tmpSpans)));
1185 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
1196 bool* patchedEdges) {
1200 *patchedEdges =
false;
1202 int cx = peak.
getIx();
1203 int cy = peak.
getIy();
1219 "Image too small for symmetrized footprint");
1224 bool touchesEdge =
false;
1226 LOGL_DEBUG(_log,
"Checking footprint for EDGE bits");
1229 MaskPixelT edgebit = mask->getPlaneBitMask(
"EDGE");
1231 fwd != spans.
end(); ++fwd) {
1232 int x0 = fwd->getX0();
1233 int x1 = fwd->getX1();
1235 mask->x_at(x0 - mask->getX0(), fwd->getY() - mask->getY0());
1236 for (
int x=x0; x<=x1; ++
x, ++xiter) {
1237 if ((*xiter) & edgebit) {
1246 LOGL_DEBUG(_log,
"Footprint includes an EDGE pixel.");
1259 for (; fwd <= back; fwd++, back--) {
1260 int fy = fwd->getY();
1261 int by = back->getY();
1263 for (
int fx=fwd->getX0(), bx=back->getX1();
1278 ImagePixelT pixf = theimg->get0(fx, fy);
1279 ImagePixelT pixb = theimg->get0(bx, by);
1280 ImagePixelT pix =
std::min(pixf, pixb);
1282 pix =
std::max(pix, static_cast<ImagePixelT>(0));
1284 targetimg->set0(fx, fy, pix);
1285 targetimg->set0(bx, by, pix);
1301 LOGL_DEBUG(_log,
"Footprint touches EDGE: start bbox [%i,%i],[%i,%i]",
1305 for (fwd = ospans.begin(); fwd != ospans.end(); ++fwd) {
1306 int y = fwd->getY();
1307 int x = fwd->getX0();
1309 int ym = cy + (cy -
y);
1310 int xm = cx + (cx -
x);
1320 LOGL_DEBUG(_log,
"Footprint touches EDGE: grown bbox [%i,%i],[%i,%i]",
1325 sfoot->getSpans()->copyImage(*targetimg, *targetimg2);
1327 LOGL_DEBUG(_log,
"Symmetric footprint spans:");
1329 for (fwd = sspans.
begin(); fwd != sspans.
end(); ++fwd) {
1330 LOGL_DEBUG(_log,
" %s", fwd->toString().c_str());
1336 for (fwd = ospans.begin(); fwd != ospans.end(); ++fwd) {
1337 int y = fwd->getY();
1338 int x0 = fwd->getX0();
1339 int x1 = fwd->getX1();
1341 int ym = cy + (cy -
y);
1342 int xm0 = cx + (cx - x0);
1343 int xm1 = cx + (cx - x1);
1354 x0 = cx + (cx - (imbb.
getMinX() - 1));
1357 x1 = cx + (cx - (imbb.
getMaxX() + 1));
1359 LOGL_DEBUG(_log,
"Span y=%i, x=[%i,%i] has mirror (%i,[%i,%i]) out-of-bounds; clipped to %i,[%i,%i]",
1360 y, fwd->getX0(), fwd->getX1(), ym, xm1, xm0,
y, x0, x1);
1364 targetimg2->x_at(x0 - targetimg2->getX0(), y - targetimg2->getY0());
1365 for (
int x=x0; x<=x1; ++
x, ++outiter, ++initer) {
1366 *outiter = initer.
image();
1370 sfoot->setSpans(std::make_shared<afwGeom::SpanSet>(
std::move(newSpans)));
1371 targetimg = targetimg2;
1374 *patchedEdges = touchesEdge;
1382 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
1387 ImagePixelT thresh) {
1397 int const y = sp->getY();
1398 int const x0 = sp->getX0();
1399 int const x1 = sp->getX1();
1402 for (xiter = img->x_at(x0 - img->getX0(), y - img->getY0()), x=x0; x<=x1; ++
x, ++xiter) {
1403 if (*xiter >= thresh) {
1415 template<
typename ImagePixelT,
typename MaskPixelT,
typename VariancePixelT>
1420 ImagePixelT thresh) {
1424 auto significant = std::make_shared<det::Footprint>();
1427 int const x0 = img->getX0(), y0 = img->getY0();
1432 int const y = span.
getY();
1433 int x = span.
getX0();
1435 bool onSpan =
false;
1437 for (; x <= span.
getX1(); ++
x, ++iter) {
1438 if (*iter >= thresh) {
1441 }
else if (onSpan) {
1450 significant->setSpans(std::make_shared<afwGeom::SpanSet>(
std::move(tmpSpans)));
static bool hasSignificantFluxAtEdge(ImagePtrT, std::shared_ptr< lsst::afw::detection::Footprint >, ImagePixelT threshold)
Returns true if the given Footprint sfoot in image img has flux above value thresh at its edge...
Extent2I const getDimensions() const noexcept
Angle abs(Angle const &a)
int getIy() const
Convenience accessors for the keys in the minimal schema.
static std::shared_ptr< lsst::afw::detection::Footprint > getSignificantEdgePixels(ImagePtrT, std::shared_ptr< lsst::afw::detection::Footprint >, ImagePixelT threshold)
Returns a list of pixels that are on the edge of the given Footprint sfoot* in image img...
bool operator<(const SpanSet::const_iterator &other)
const_iterator end() const
A compact representation of a collection of pixels.
A range of pixels within one row of an Image.
int getHeight() const
Return the number of rows in the image.
Reports attempts to exceed implementation-defined length limits for some classes. ...
_const_view_t::x_iterator const_x_iterator
A const iterator for traversing the pixels in a row.
bool operator==(RelativeSpanIterator &other)
bool operator!=(const SpanSet::const_iterator &other)
_view_t::x_iterator x_iterator
An iterator for traversing the pixels in a row.
static void _find_stray_flux(lsst::afw::detection::Footprint const &foot, ImagePtrT tsum, MaskedImageT const &img, int strayFluxOptions, std::vector< std::shared_ptr< lsst::afw::detection::Footprint > > tfoots, std::vector< bool > const &ispsf, std::vector< int > const &pkx, std::vector< int > const &pky, double clipStrayFluxFraction, std::vector< std::shared_ptr< typename lsst::afw::detection::HeavyFootprint< ImagePixelT, MaskPixelT, VariancePixelT > > > &strays)
boost::shared_ptr< lsst::afw::detection::Footprint > FootprintPtrT
bool operator==(const SpanSet::const_iterator &other)
const_iterator begin() const
Schema getSchema() const
Return the schema associated with the catalog's table.
RelativeSpanIterator(SpanSet::const_iterator const &real, SpanSet const &arr, int cx, int cy, bool forward=true)
int getX0() const
Return the image's column-origin.
static boost::shared_ptr< lsst::afw::detection::Footprint > symmetrizeFootprint(lsst::afw::detection::Footprint const &foot, int cx, int cy)
Given a Footprint foot and peak cx,cy, returns a Footprint that is symmetric around the peak (with tw...
x_iterator row_begin(int y) const
Return an x_iterator to the start of the y'th row.
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
x_iterator x_at(int x, int y) const
Return an x_iterator at the point (x, y)
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
LSST DM logging module built on log4cxx.
An iterator to the MaskedImage.
FastFinder::Iterator Iterator
static void medianFilter(ImageT const &img, ImageT &outimg, int halfsize)
Run a spatial median filter over the given input img, writing the results to out. ...
bool operator>=(const SpanSet::const_iterator &other)
int getX0() const
Return the image's column-origin.
boost::shared_ptr< lsst::afw::image::Mask< MaskPixelT > > MaskPtrT
int getMaxY() const noexcept
x_iterator row_begin(int y) const
Return an x_iterator to the start of the image.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A class to manipulate images, masks, and variance as a single object.
int getWidth() const noexcept
#define LOGL_WARN(logger, message...)
Log a warn-level message using a varargs/printf style interface.
Ref< ImagePixelT >::type image()
Return (a reference to) the image part of the Pixel pointed at by the iterator.
int getIx() const
Convenience accessors for the keys in the minimal schema.
Key< Flag > const & target
int getMaxX() const noexcept
MaskPtr getMask() const
Return a (shared_ptr to) the MaskedImage's mask.
int getMinX() const noexcept
static void makeMonotonic(ImageT &img, lsst::afw::detection::PeakRecord const &pk)
Given an image mimg and Peak location peak, overwrite mimg so that pixels further from the peak have ...
int getY0() const
Return the image's row-origin.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
def apportionFlux(debResult, log, assignStrayFlux=True, strayFluxAssignment='r-to-peak', strayFluxToPointSources='necessary', clipStrayFluxFraction=0.001, getTemplateSum=False)
std::vector< Span >::const_iterator const_iterator
int getY0() const
Return the image's row-origin.
void include(Point2I const &point)
Expand this to ensure that this->contains(point).
This is a convenience class used in symmetrizeFootprint, wrapping the idea of iterating through a Spa...
static void _sum_templates(std::vector< ImagePtrT > timgs, ImagePtrT tsum)
bool contains(Point2I const &point) const noexcept
Return true if the box contains the point.
int getWidth() const
Return the number of columns in the image.
void clip(Box2I const &other) noexcept
Shrink this to ensure that other.contains(*this).
x_iterator row_end(int y) const
Return an x_iterator to the end of the y'th row.
bool operator!=(RelativeSpanIterator &other)
int getX1() const noexcept
Return the ending x-value.
ItemVariant const * other
int getY() const noexcept
Return the y-value.
static std::pair< ImagePtrT, FootprintPtrT > buildSymmetricTemplate(MaskedImageT const &img, lsst::afw::detection::Footprint const &foot, lsst::afw::detection::PeakRecord const &pk, double sigma1, bool minZero, bool patchEdges, bool *patchedEdges)
Given an img, footprint foot, and peak, creates a symmetric template around the peak; produce a Maske...
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...
#define LOG_GET(logger)
Returns a Log object associated with logger.
RelativeSpanIterator operator++()
RelativeSpanIterator operator++(int dummy)
lsst::geom::Box2I getBBox(ImageOrigin const origin=PARENT) const
Record class that represents a peak in a Footprint.
_view_t::xy_locator xy_locator
An xy_locator.
boost::shared_ptr< lsst::afw::image::MaskedImage< ImagePixelT > MaskPixelT, VariancePixelT > MaskedImagePtrT
xy_locator xy_at(int x, int y) const
Return an xy_locator at the point (x, y) in the image.
An integer coordinate rectangle.
A class to represent a 2-dimensional array of pixels.
bool operator>(const SpanSet::const_iterator &other)
bool operator<=(const SpanSet::const_iterator &other)
int getMinY() const noexcept
boost::shared_ptr< lsst::afw::detection::HeavyFootprint< ImagePixelT > MaskPixelT, VariancePixelT > HeavyFootprintPtrT
int getX0() const noexcept
Return the starting x-value.
table::Key< double > sigma1
boost::shared_ptr< lsst::afw::image::Image< ImagePixelT > > ImagePtrT
Reports errors that are due to events beyond the control of the program.
A const locator for the MaskedImage.