45 std::shared_ptr<SpatialCellCandidate>, bool> {
47 return a->getCandidateRating() > b->getCandidateRating();
52 int SpatialCellCandidate::_CandidateId = 0;
69 int SpatialCellImageCandidate::_width = 0;
71 int SpatialCellImageCandidate::_height = 0;
75 : _label(label), _bbox(bbox), _candidateList(candidateList), _ignoreBad(true) {
76 LOGL_DEBUG(
"afw.math.SpatialCell",
"Cell %s : created with %d candidates", this->_label.
c_str(),
77 this->_candidateList.
size());
84 CandidateList::iterator pos =
86 _candidateList.
insert(pos, candidate);
90 CandidateList::iterator pos =
std::find(_candidateList.
begin(), _candidateList.
end(), candidate);
91 if (pos == _candidateList.
end()) {
94 (
boost::format(
"Unable to find candidate with ID == %d") % candidate->getId()).
str());
96 _candidateList.
erase(pos);
105 if (!(_ignoreBad && (*ptr)->isBad())) {
118 return mthis->
end() - mthis->
begin();
123 if ((*ptr)->getId() ==
id) {
138 bool const ignoreExceptions,
bool const reset) {
146 if (nMaxPerCell > 0 && i == nMaxPerCell) {
153 if (ignoreExceptions) {
164 bool const ignoreExceptions,
bool const reset)
const {
173 for (SpatialCell::const_iterator candidate = (*cell)->begin(), candidateEnd = (*cell)->end();
174 candidate != candidateEnd; ++candidate, ++i) {
175 if (i == nMaxPerCell) {
182 if (ignoreExceptions) {
205 if (ignoreExceptions) {
216 bool const reset)
const {
225 for (SpatialCell::const_iterator candidate = (*cell)->begin(
false), candidateEnd = (*cell)->end(
false);
226 candidate != candidateEnd; ++candidate, ++i) {
230 if (ignoreExceptions) {
242 CandidateList::iterator
end,
bool ignoreBad)
243 : _iterator(iterator), _end(end), _ignoreBad(ignoreBad) {
244 for (; _iterator != _end; ++_iterator) {
245 (*_iterator)->instantiate();
247 if (!(_ignoreBad && (*_iterator)->isBad())) {
254 CandidateList::iterator
end,
bool ignoreBad,
bool)
255 : _iterator(end), _end(end), _ignoreBad(ignoreBad) {
263 if (_iterator != _end) {
267 for (; _iterator != _end; ++_iterator) {
268 (*_iterator)->instantiate();
270 if (!(_ignoreBad && (*_iterator)->isBad())) {
279 if (!(_ignoreBad && (*ptr)->isBad())) {
288 if (_iterator == _end) {
296 if (_iterator == _end) {
304 : _region(region), _cellList(
CellList()) {
309 if (xSize <= 0 || ySize <= 0) {
312 (
boost::format(
"Please specify cells that contain pixels, not %dx%d") % xSize % ySize).
str());
316 if (nx * xSize != region.
getWidth()) {
328 for (
int y = 0;
y < ny; ++
y) {
330 int const y1 = (
y == ny - 1) ? region.
getMaxY() : y0 + ySize - 1;
332 for (
int x = 0;
x < nx; ++
x) {
334 int const x1 = (
x == nx - 1) ? region.
getMaxX() : x0 + xSize - 1;
351 return cell->getBBox().contains(
362 CellList::iterator pos =
std::find_if(_cellList.begin(), _cellList.end(), CellContains(candidate));
364 if (pos == _cellList.end()) {
366 (
boost::format(
"Unable to insert a candidate at (%.2f, %.2f)") %
367 candidate->getXCenter() % candidate->getYCenter())
371 (*pos)->insertCandidate(candidate);
375 for (CellList::iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
376 (*cell)->sortCandidates();
381 bool const ignoreExceptions) {
384 for (CellList::iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
385 (*cell)->visitCandidates(visitor, nMaxPerCell, ignoreExceptions,
false);
390 bool const ignoreExceptions)
const {
393 for (CellList::const_iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
402 for (CellList::iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
403 (*cell)->visitAllCandidates(visitor, ignoreExceptions,
false);
410 for (CellList::const_iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
417 for (CellList::iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
434 for (CellList::iterator cell = _cellList.begin(),
end = _cellList.end(); cell !=
end; ++cell) {
435 (*cell)->setIgnoreBad(ignoreBad);
bool empty() const
Determine if cell has no usable candidates.
void setStatus(Status status)
Set the candidate's status.
void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions=false, bool const reset=true)
Call the visitor's processCandidate method for every Candidate in the SpatialCell.
int getHeight() const noexcept
SpatialCellCandidateIterator end()
Return an iterator to (one after) the end of the Candidates.
int positionToIndex(double pos)
Convert image position to nearest integer index.
Reports attempts to exceed implementation-defined length limits for some classes. ...
void sortCandidates()
Rearrange the candidates to reflect their current ratings.
void setIgnoreBad(bool ignoreBad)
Set whether we should omit BAD candidates from candidate list when traversing.
SpatialCellCandidateIterator(CandidateList::iterator iterator, CandidateList::iterator end, bool ignoreBad)
ctor; designed to be used to pass begin to SpatialCellCandidateIterator
Provides consistent interface for LSST exceptions.
virtual void processCandidate(SpatialCellCandidate *)
void insertCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Add a candidate to the list, preserving ranking.
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
void operator++()
Advance the iterator, maybe skipping over candidates labelled BAD.
LSST DM logging module built on log4cxx.
Reports attempts to access elements using an invalid key.
SpatialCell(std::string const &label, lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), CandidateList const &candidateList=CandidateList())
Constructor.
A base class for image defects.
int getMaxY() const noexcept
SpatialCellSet(lsst::geom::Box2I const ®ion, int xSize, int ySize=0)
Constructor.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
void visitCandidates(CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false, bool const reset=true)
Call the visitor's processCandidate method for each Candidate in the SpatialCell. ...
int getWidth() const noexcept
void removeCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Remove a candidate from the list.
std::shared_ptr< SpatialCellCandidate const > operator*() const
Dereference the iterator to return the Candidate (if there is one)
SpatialCellCandidateIterator iterator
size_t operator-(SpatialCellCandidateIterator const &rhs) const
Return the number of candidate between this and rhs.
int getMaxX() const noexcept
void sortCandidates()
Rearrange the Candidates in all SpatialCells to reflect their current ratings.
int getMinX() const noexcept
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Reports attempts to access elements outside a valid range of indices.
void insertCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Insert a candidate into the correct cell.
Class to ensure constraints for spatial modeling.
std::shared_ptr< SpatialCellCandidate > getCandidateById(int id, bool noThrow=false)
Return the SpatialCellCandidate with the specified id.
Reports invalid arguments.
void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions=false)
Call the visitor's processCandidate method for every Candidate in the SpatialCellSet.
std::shared_ptr< SpatialCellCandidate > getCandidateById(int id, bool noThrow=false)
Return the SpatialCellCandidate with the specified id.
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it...
An integer coordinate rectangle.
void visitCandidates(CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false)
Call the visitor's processCandidate method for each Candidate in the SpatialCellSet.
SpatialCellCandidateIterator begin()
Return an iterator to the beginning of the Candidates.
size_t size() const
Return number of usable candidates in Cell.
An iterator that only returns usable members of the SpatialCell.
int getMinY() const noexcept