LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
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. More...
 
 SpatialCellSet (SpatialCellSet const &)=default
 
 SpatialCellSet (SpatialCellSet &&)=default
 
SpatialCellSetoperator= (SpatialCellSet const &)=default
 
SpatialCellSetoperator= (SpatialCellSet &&)=default
 
virtual ~SpatialCellSet ()=default
 Destructor. More...
 
CellListgetCellList ()
 Return our SpatialCells. More...
 
lsst::geom::Box2I getBBox () const
 Return the bounding box of the image. More...
 
void insertCandidate (std::shared_ptr< SpatialCellCandidate > candidate)
 Insert a candidate into the correct cell. More...
 
void sortCandidates ()
 Rearrange the Candidates in all SpatialCells to reflect their current ratings. More...
 
void visitCandidates (CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false)
 Call the visitor's processCandidate method for each Candidate in the SpatialCellSet. More...
 
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) More...
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false)
 Call the visitor's processCandidate method for every Candidate in the SpatialCellSet. More...
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false) const
 Call the visitor's processCandidate method for every Candidate in the SpatialCellSet (const version) More...
 
std::shared_ptr< SpatialCellCandidategetCandidateById (int id, bool noThrow=false)
 Return the SpatialCellCandidate with the specified id. More...
 
void setIgnoreBad (bool ignoreBad)
 Set whether we should omit BAD candidates from candidate list when traversing. More...
 

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 302 of file SpatialCell.cc.

303 : _region(region), _cellList(CellList()) {
304 if (ySize == 0) {
305 ySize = xSize;
306 }
307
308 if (xSize <= 0 || ySize <= 0) {
309 throw LSST_EXCEPT(
311 (boost::format("Please specify cells that contain pixels, not %dx%d") % xSize % ySize).str());
312 }
313
314 int nx = region.getWidth() / xSize;
315 if (nx * xSize != region.getWidth()) {
316 nx++;
317 }
318
319 int ny = region.getHeight() / ySize;
320 if (ny * ySize != region.getHeight()) {
321 ny++;
322 }
323 //
324 // N.b. the SpatialCells will be sorted in y at the end of this
325 //
326 int y0 = region.getMinY();
327 for (int y = 0; y < ny; ++y) {
328 // ny may not be a factor of height
329 int const y1 = (y == ny - 1) ? region.getMaxY() : y0 + ySize - 1;
330 int x0 = region.getMinX();
331 for (int x = 0; x < nx; ++x) {
332 // nx may not be a factor of width
333 int const x1 = (x == nx - 1) ? region.getMaxX() : x0 + xSize - 1;
335 std::string label = (boost::format("Cell %dx%d") % x % y).str();
336
337 _cellList.push_back(std::make_shared<SpatialCell>(label, bbox));
338
339 x0 = x1 + 1;
340 }
341 y0 = y1 + 1;
342 }
343}
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
double x
#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
Definition: SpatialCell.h:385
An integer coordinate rectangle.
Definition: Box.h:55
Reports attempts to exceed implementation-defined length limits for some classes.
Definition: Runtime.h:76
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
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 415 of file SpatialCell.cc.

415 {
416 for (auto const &cell : _cellList) {
417 std::shared_ptr<SpatialCellCandidate> cand = cell->getCandidateById(id, true);
418
419 if (cand) {
420 return cand;
421 }
422 }
423
424 if (noThrow) {
426 } else {
428 (boost::format("Unable to find object with ID == %d") % id).str());
429 }
430}
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 360 of file SpatialCell.cc.

360 {
361 CellList::iterator pos = std::find_if(_cellList.begin(), _cellList.end(), CellContains(candidate));
362
363 if (pos == _cellList.end()) {
365 (boost::format("Unable to insert a candidate at (%.2f, %.2f)") %
366 candidate->getXCenter() % candidate->getYCenter())
367 .str());
368 }
369
370 (*pos)->insertCandidate(candidate);
371}
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 432 of file SpatialCell.cc.

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

◆ sortCandidates()

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

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

Definition at line 373 of file SpatialCell.cc.

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

◆ 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 398 of file SpatialCell.cc.

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

◆ 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 406 of file SpatialCell.cc.

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

◆ 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 379 of file SpatialCell.cc.

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

◆ 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 388 of file SpatialCell.cc.

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

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