LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
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

typedef std::vector< std::shared_ptr< SpatialCell > > CellList
 

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 387 of file SpatialCell.h.

Member Typedef Documentation

◆ CellList

Definition at line 389 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 303 of file SpatialCell.cc.

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

◆ 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 420 of file SpatialCell.h.

420 { 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 416 of file SpatialCell.cc.

416  {
417  for (CellList::iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
418  std::shared_ptr<SpatialCellCandidate> cand = (*cell)->getCandidateById(id, true);
419 
420  if (cand) {
421  return cand;
422  }
423  }
424 
425  if (noThrow) {
427  } else {
429  (boost::format("Unable to find object with ID == %d") % id).str());
430  }
431 }
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
T end(T... args)
Reports attempts to access elements using an invalid key.
Definition: Runtime.h:151
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
T begin(T... args)
int end

◆ getCellList()

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

Return our SpatialCells.

Definition at line 415 of file SpatialCell.h.

415 { return _cellList; }

◆ insertCandidate()

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

Insert a candidate into the correct cell.

Definition at line 361 of file SpatialCell.cc.

361  {
362  CellList::iterator pos = std::find_if(_cellList.begin(), _cellList.end(), CellContains(candidate));
363 
364  if (pos == _cellList.end()) {
366  (boost::format("Unable to insert a candidate at (%.2f, %.2f)") %
367  candidate->getXCenter() % candidate->getYCenter())
368  .str());
369  }
370 
371  (*pos)->insertCandidate(candidate);
372 }
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
T end(T... args)
T find_if(T... args)
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
Reports attempts to access elements outside a valid range of indices.
Definition: Runtime.h:89
T begin(T... args)

◆ operator=() [1/2]

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

◆ operator=() [2/2]

SpatialCellSet& lsst::afw::math::SpatialCellSet::operator= ( SpatialCellSet &&  )
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 433 of file SpatialCell.cc.

433  {
434  for (CellList::iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
435  (*cell)->setIgnoreBad(ignoreBad);
436  }
437 }
T end(T... args)
T begin(T... args)
int end

◆ sortCandidates()

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

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

Definition at line 374 of file SpatialCell.cc.

374  {
375  for (CellList::iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
376  (*cell)->sortCandidates();
377  }
378 }
T end(T... args)
T begin(T... args)
int end

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

399  {
400  visitor->reset();
401 
402  for (CellList::iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
403  (*cell)->visitAllCandidates(visitor, ignoreExceptions, false);
404  }
405 }
T end(T... args)
T begin(T... args)
int end

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

407  {
408  visitor->reset();
409 
410  for (CellList::const_iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
411  SpatialCell const *ccell = cell->get(); // the SpatialCellSet's SpatialCells should be const too
412  ccell->visitAllCandidates(visitor, ignoreExceptions, false);
413  }
414 }
T end(T... args)
T begin(T... args)
int end

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

381  {
382  visitor->reset();
383 
384  for (CellList::iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
385  (*cell)->visitCandidates(visitor, nMaxPerCell, ignoreExceptions, false);
386  }
387 }
T end(T... args)
T begin(T... args)
int end

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

390  {
391  visitor->reset();
392 
393  for (CellList::const_iterator cell = _cellList.begin(), end = _cellList.end(); cell != end; ++cell) {
394  SpatialCell const *ccell = cell->get(); // the SpatialCellSet's SpatialCells should be const too
395  ccell->visitCandidates(visitor, nMaxPerCell, ignoreExceptions, false);
396  }
397 }
T end(T... args)
T begin(T... args)
int end

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