LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
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: