LSST Applications g0265f82a02+0e5473021a,g02d81e74bb+f5613e8b4f,g1470d8bcf6+190ad2ba91,g14a832a312+311607e4ab,g2079a07aa2+86d27d4dc4,g2305ad1205+a8e3196225,g295015adf3+b67ee847e5,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g3ddfee87b4+a761f810f3,g487adcacf7+17c8fdbcbd,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+65b5bd823e,g5a732f18d5+53520f316c,g64a986408d+f5613e8b4f,g6c1bc301e9+51106c2951,g858d7b2824+f5613e8b4f,g8a8a8dda67+585e252eca,g99cad8db69+6729933424,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+ef4e3a5875,gb0e22166c9+60f28cb32d,gb6a65358fc+0e5473021a,gba4ed39666+c2a2e4ac27,gbb8dafda3b+e9bba80f27,gc120e1dc64+eee469a5e5,gc28159a63d+0e5473021a,gcf0d15dbbd+a761f810f3,gdaeeff99f8+f9a426f77a,ge6526c86ff+d4c1d4bfef,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gf1cff7945b+f5613e8b4f,w.2024.16
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
lsst::afw::math::SpatialCellSet Class Reference

A collection of SpatialCells covering an entire image. More...

#include <SpatialCell.h>

Public Types

using CellList = std::vector<std::shared_ptr<SpatialCell>>
 

Public Member Functions

 SpatialCellSet (lsst::geom::Box2I const &region, int xSize, int ySize=0)
 Constructor.
 
 SpatialCellSet (SpatialCellSet const &)=default
 
 SpatialCellSet (SpatialCellSet &&)=default
 
SpatialCellSetoperator= (SpatialCellSet const &)=default
 
SpatialCellSetoperator= (SpatialCellSet &&)=default
 
virtual ~SpatialCellSet ()=default
 Destructor.
 
CellListgetCellList ()
 Return our SpatialCells.
 
lsst::geom::Box2I getBBox () const
 Return the bounding box of the image.
 
void insertCandidate (std::shared_ptr< SpatialCellCandidate > candidate)
 Insert a candidate into the correct cell.
 
void sortCandidates ()
 Rearrange the Candidates in all SpatialCells to reflect their current ratings.
 
void visitCandidates (CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false)
 Call the visitor's processCandidate method for each Candidate in the SpatialCellSet.
 
void visitCandidates (CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false) const
 Call the visitor's processCandidate method for each Candidate in the SpatialCellSet (const version)
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false)
 Call the visitor's processCandidate method for every Candidate in the SpatialCellSet.
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false) const
 Call the visitor's processCandidate method for every Candidate in the SpatialCellSet (const version)
 
std::shared_ptr< SpatialCellCandidategetCandidateById (int id, bool noThrow=false)
 Return the SpatialCellCandidate with the specified id.
 
void setIgnoreBad (bool ignoreBad)
 Set whether we should omit BAD candidates from candidate list when traversing.
 

Detailed Description

A collection of SpatialCells covering an entire image.

Definition at line 383 of file SpatialCell.h.

Member Typedef Documentation

◆ CellList

Definition at line 385 of file SpatialCell.h.

Constructor & Destructor Documentation

◆ SpatialCellSet() [1/3]

lsst::afw::math::SpatialCellSet::SpatialCellSet ( lsst::geom::Box2I const & region,
int xSize,
int ySize = 0 )

Constructor.

Parameters
regionBounding box for image
xSizesize of cells in the column direction
ySizesize of cells in the row direction (0: == xSize)
Exceptions
lsst::pex::exceptions::LengthErrorif nx or ny is non-positive

Definition at line 301 of file SpatialCell.cc.

302 : _region(region), _cellList(CellList()) {
303 if (ySize == 0) {
304 ySize = xSize;
305 }
306
307 if (xSize <= 0 || ySize <= 0) {
308 throw LSST_EXCEPT(
310 (boost::format("Please specify cells that contain pixels, not %dx%d") % xSize % ySize).str());
311 }
312
313 int nx = region.getWidth() / xSize;
314 if (nx * xSize != region.getWidth()) {
315 nx++;
316 }
317
318 int ny = region.getHeight() / ySize;
319 if (ny * ySize != region.getHeight()) {
320 ny++;
321 }
322 //
323 // N.b. the SpatialCells will be sorted in y at the end of this
324 //
325 int y0 = region.getMinY();
326 for (int y = 0; y < ny; ++y) {
327 // ny may not be a factor of height
328 int const y1 = (y == ny - 1) ? region.getMaxY() : y0 + ySize - 1;
329 int x0 = region.getMinX();
330 for (int x = 0; x < nx; ++x) {
331 // nx may not be a factor of width
332 int const x1 = (x == nx - 1) ? region.getMaxX() : x0 + xSize - 1;
334 std::string label = (boost::format("Cell %dx%d") % x % y).str();
335
336 _cellList.push_back(std::make_shared<SpatialCell>(label, bbox));
337
338 x0 = x1 + 1;
339 }
340 y0 = y1 + 1;
341 }
342}
AmpInfoBoxKey bbox
Definition Amplifier.cc:117
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
int y
Definition SpanSet.cc:48
std::vector< std::shared_ptr< SpatialCell > > CellList
An integer coordinate rectangle.
Definition Box.h:55
Reports attempts to exceed implementation-defined length limits for some classes.
Definition Runtime.h:76
T push_back(T... args)

◆ SpatialCellSet() [2/3]

lsst::afw::math::SpatialCellSet::SpatialCellSet ( SpatialCellSet const & )
default

◆ SpatialCellSet() [3/3]

lsst::afw::math::SpatialCellSet::SpatialCellSet ( SpatialCellSet && )
default

◆ ~SpatialCellSet()

virtual lsst::afw::math::SpatialCellSet::~SpatialCellSet ( )
virtualdefault

Destructor.

Member Function Documentation

◆ getBBox()

lsst::geom::Box2I lsst::afw::math::SpatialCellSet::getBBox ( ) const
inline

Return the bounding box of the image.

Definition at line 416 of file SpatialCell.h.

416{ return _region; };

◆ getCandidateById()

std::shared_ptr< SpatialCellCandidate > lsst::afw::math::SpatialCellSet::getCandidateById ( int id,
bool noThrow = false )

Return the SpatialCellCandidate with the specified id.

Parameters
idThe desired ID
noThrowReturn NULL in case of error
Exceptions
lsst::pex::exceptions::NotFoundErrorif no candidate matches the id (unless noThrow is true, in which case a null pointer is returned

Definition at line 414 of file SpatialCell.cc.

414 {
415 for (auto const &cell : _cellList) {
416 std::shared_ptr<SpatialCellCandidate> cand = cell->getCandidateById(id, true);
417
418 if (cand) {
419 return cand;
420 }
421 }
422
423 if (noThrow) {
425 } else {
427 (boost::format("Unable to find object with ID == %d") % id).str());
428 }
429}
Reports attempts to access elements using an invalid key.
Definition Runtime.h:151

◆ getCellList()

CellList & lsst::afw::math::SpatialCellSet::getCellList ( )
inline

Return our SpatialCells.

Definition at line 411 of file SpatialCell.h.

411{ return _cellList; }

◆ insertCandidate()

void lsst::afw::math::SpatialCellSet::insertCandidate ( std::shared_ptr< SpatialCellCandidate > candidate)

Insert a candidate into the correct cell.

Definition at line 359 of file SpatialCell.cc.

359 {
360 CellList::iterator pos = std::find_if(_cellList.begin(), _cellList.end(), CellContains(candidate));
361
362 if (pos == _cellList.end()) {
364 (boost::format("Unable to insert a candidate at (%.2f, %.2f)") %
365 candidate->getXCenter() % candidate->getYCenter())
366 .str());
367 }
368
369 (*pos)->insertCandidate(candidate);
370}
T begin(T... args)
Reports attempts to access elements outside a valid range of indices.
Definition Runtime.h:89
T end(T... args)
T find_if(T... args)

◆ operator=() [1/2]

SpatialCellSet & lsst::afw::math::SpatialCellSet::operator= ( SpatialCellSet && )
default

◆ operator=() [2/2]

SpatialCellSet & lsst::afw::math::SpatialCellSet::operator= ( SpatialCellSet const & )
default

◆ setIgnoreBad()

void lsst::afw::math::SpatialCellSet::setIgnoreBad ( bool ignoreBad)

Set whether we should omit BAD candidates from candidate list when traversing.

Definition at line 431 of file SpatialCell.cc.

431 {
432 for (auto const &cell : _cellList) {
433 cell->setIgnoreBad(ignoreBad);
434 }
435}

◆ sortCandidates()

void lsst::afw::math::SpatialCellSet::sortCandidates ( )

Rearrange the Candidates in all SpatialCells to reflect their current ratings.

Definition at line 372 of file SpatialCell.cc.

372 {
373 for (auto const &cell : _cellList) {
374 cell->sortCandidates();
375 }
376}

◆ visitAllCandidates() [1/2]

void lsst::afw::math::SpatialCellSet::visitAllCandidates ( CandidateVisitor * visitor,
bool const ignoreExceptions = false )

Call the visitor's processCandidate method for every Candidate in the SpatialCellSet.

Parameters
visitorPass this object to every Candidate
ignoreExceptionsIgnore any exceptions thrown by the processing
See also
visitCandidates

Definition at line 397 of file SpatialCell.cc.

397 {
398 visitor->reset();
399
400 for (auto const &cell : _cellList) {
401 cell->visitAllCandidates(visitor, ignoreExceptions, false);
402 }
403}

◆ visitAllCandidates() [2/2]

void lsst::afw::math::SpatialCellSet::visitAllCandidates ( CandidateVisitor * visitor,
bool const ignoreExceptions = false ) const

Call the visitor's processCandidate method for every Candidate in the SpatialCellSet (const version)

This is the const version of SpatialCellSet::visitAllCandidates

Parameters
visitorPass this object to every Candidate
ignoreExceptionsIgnore any exceptions thrown by the processing

Definition at line 405 of file SpatialCell.cc.

405 {
406 visitor->reset();
407
408 for (auto const &cell : _cellList) {
409 SpatialCell const *ccell = cell.get(); // the SpatialCellSet's SpatialCells should be const too
410 ccell->visitAllCandidates(visitor, ignoreExceptions, false);
411 }
412}

◆ visitCandidates() [1/2]

void lsst::afw::math::SpatialCellSet::visitCandidates ( CandidateVisitor * visitor,
int const nMaxPerCell = -1,
bool const ignoreExceptions = false )

Call the visitor's processCandidate method for each Candidate in the SpatialCellSet.

Parameters
visitorPass this object to every Candidate
nMaxPerCellVisit no more than this many Candidates (<= 0: all)
ignoreExceptionsIgnore any exceptions thrown by the processing
Note
This is obviously similar to the Design Patterns (Go4) Visitor pattern, but we've simplified the double dispatch (i.e. we don't call a virtual method on SpatialCellCandidate that in turn calls processCandidate(*this), but can be re-defined)

Definition at line 378 of file SpatialCell.cc.

379 {
380 visitor->reset();
381
382 for (auto const &cell : _cellList) {
383 cell->visitCandidates(visitor, nMaxPerCell, ignoreExceptions, false);
384 }
385}

◆ visitCandidates() [2/2]

void lsst::afw::math::SpatialCellSet::visitCandidates ( CandidateVisitor * visitor,
int const nMaxPerCell = -1,
bool const ignoreExceptions = false ) const

Call the visitor's processCandidate method for each Candidate in the SpatialCellSet (const version)

This is the const version of SpatialCellSet::visitCandidates

Parameters
visitorPass this object to every Candidate
nMaxPerCellVisit no more than this many Candidates (-ve: all)
ignoreExceptionsIgnore any exceptions thrown by the processing

Definition at line 387 of file SpatialCell.cc.

388 {
389 visitor->reset();
390
391 for (auto const &cell : _cellList) {
392 SpatialCell const *ccell = cell.get(); // the SpatialCellSet's SpatialCells should be const too
393 ccell->visitCandidates(visitor, nMaxPerCell, ignoreExceptions, false);
394 }
395}

The documentation for this class was generated from the following files: