44 std::shared_ptr<SpatialCellCandidate>, bool> {
46 return a->getCandidateRating() >
b->getCandidateRating();
51int SpatialCellCandidate::_CandidateId = 0;
65 (boost::format(
"Saw unknown status %d") % status).
str());
68int SpatialCellImageCandidate::_width = 0;
70int SpatialCellImageCandidate::_height = 0;
74 : _label(label), _bbox(
bbox), _candidateList(candidateList), _ignoreBad(true) {
75 LOGL_DEBUG(
"lsst.afw.math.SpatialCell",
"Cell %s : created with %d candidates", this->_label.
c_str(),
76 this->_candidateList.size());
83 CandidateList::iterator pos =
85 _candidateList.
insert(pos, candidate);
89 CandidateList::iterator pos =
std::find(_candidateList.
begin(), _candidateList.
end(), candidate);
90 if (pos == _candidateList.
end()) {
93 (boost::format(
"Unable to find candidate with ID == %d") % candidate->getId()).str());
95 _candidateList.
erase(pos);
103 for (
auto && mthi : *mthis) {
104 if (!(_ignoreBad && (mthi)->isBad())) {
117 return mthis->
end() - mthis->
begin();
122 if ((*ptr)->getId() ==
id) {
131 (boost::format(
"Unable to find object with ID == %d") %
id).
str());
137 bool const ignoreExceptions,
bool const reset) {
145 if (nMaxPerCell > 0 && i == nMaxPerCell) {
152 if (ignoreExceptions) {
163 bool const ignoreExceptions,
bool const reset)
const {
172 for (SpatialCell::const_iterator candidate = (*cell)->begin(), candidateEnd = (*cell)->end();
173 candidate != candidateEnd; ++candidate, ++i) {
174 if (i == nMaxPerCell) {
181 if (ignoreExceptions) {
204 if (ignoreExceptions) {
215 bool const reset)
const {
224 for (SpatialCell::const_iterator candidate = (*cell)->begin(
false), candidateEnd = (*cell)->end(
false);
225 candidate != candidateEnd; ++candidate, ++i) {
229 if (ignoreExceptions) {
241 CandidateList::iterator
end,
bool ignoreBad)
242 : _iterator(iterator), _end(
end), _ignoreBad(ignoreBad) {
243 for (; _iterator != _end; ++_iterator) {
244 (*_iterator)->instantiate();
246 if (!(_ignoreBad && (*_iterator)->isBad())) {
253 CandidateList::iterator
end,
bool ignoreBad,
bool)
254 : _iterator(
end), _end(
end), _ignoreBad(ignoreBad) {
262 if (_iterator != _end) {
266 for (; _iterator != _end; ++_iterator) {
267 (*_iterator)->instantiate();
269 if (!(_ignoreBad && (*_iterator)->isBad())) {
278 if (!(_ignoreBad && (*ptr)->isBad())) {
287 if (_iterator == _end) {
295 if (_iterator == _end) {
303 : _region(region), _cellList(
CellList()) {
308 if (xSize <= 0 || ySize <= 0) {
311 (boost::format(
"Please specify cells that contain pixels, not %dx%d") % xSize % ySize).
str());
315 if (nx * xSize != region.
getWidth()) {
327 for (
int y = 0;
y < ny; ++
y) {
329 int const y1 = (
y == ny - 1) ? region.
getMaxY() : y0 + ySize - 1;
331 for (
int x = 0;
x < nx; ++
x) {
333 int const x1 = (
x == nx - 1) ? region.
getMaxX() : x0 + xSize - 1;
337 _cellList.
push_back(std::make_shared<SpatialCell>(label,
bbox));
350 return cell->getBBox().contains(
361 CellList::iterator pos =
std::find_if(_cellList.
begin(), _cellList.
end(), CellContains(candidate));
363 if (pos == _cellList.
end()) {
365 (boost::format(
"Unable to insert a candidate at (%.2f, %.2f)") %
366 candidate->getXCenter() % candidate->getYCenter())
370 (*pos)->insertCandidate(candidate);
374 for (
auto const &cell : _cellList) {
375 cell->sortCandidates();
380 bool const ignoreExceptions) {
383 for (
auto const &cell : _cellList) {
384 cell->visitCandidates(visitor, nMaxPerCell, ignoreExceptions,
false);
389 bool const ignoreExceptions)
const {
392 for (
auto const &cell : _cellList) {
401 for (
auto const &cell : _cellList) {
402 cell->visitAllCandidates(visitor, ignoreExceptions,
false);
409 for (
auto const &cell : _cellList) {
416 for (
auto const &cell : _cellList) {
428 (boost::format(
"Unable to find object with ID == %d") %
id).
str());
433 for (
auto const &cell : _cellList) {
434 cell->setIgnoreBad(ignoreBad);
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
LSST DM logging module built on log4cxx.
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
virtual void processCandidate(SpatialCellCandidate *)
void setStatus(Status status)
Set the candidate's status.
An iterator that only returns usable members of the SpatialCell.
SpatialCellCandidateIterator(CandidateList::iterator iterator, CandidateList::iterator end, bool ignoreBad)
ctor; designed to be used to pass begin to SpatialCellCandidateIterator
void operator++()
Advance the iterator, maybe skipping over candidates labelled BAD.
size_t operator-(SpatialCellCandidateIterator const &rhs) const
Return the number of candidate between this and rhs.
std::shared_ptr< SpatialCellCandidate const > operator*() const
Dereference the iterator to return the Candidate (if there is one)
Class to ensure constraints for spatial modeling.
SpatialCellCandidateIterator end()
Return an iterator to (one after) the end of the Candidates.
size_t size() const
Return number of usable candidates in Cell.
void sortCandidates()
Rearrange the candidates to reflect their current ratings.
void removeCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Remove a candidate from the list.
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.
SpatialCellCandidateIterator begin()
Return an iterator to the beginning of the Candidates.
bool empty() const
Determine if cell has no usable candidates.
std::shared_ptr< SpatialCellCandidate > getCandidateById(int id, bool noThrow=false)
Return the SpatialCellCandidate with the specified id.
SpatialCell(std::string const &label, lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), CandidateList const &candidateList=CandidateList())
Constructor.
void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions=false, bool const reset=true)
Call the visitor's processCandidate method for every Candidate in the SpatialCell.
void insertCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Add a candidate to the list, preserving ranking.
void sortCandidates()
Rearrange the Candidates in all SpatialCells to reflect their current ratings.
void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions=false)
Call the visitor's processCandidate method for every Candidate in the SpatialCellSet.
void setIgnoreBad(bool ignoreBad)
Set whether we should omit BAD candidates from candidate list when traversing.
void insertCandidate(std::shared_ptr< SpatialCellCandidate > candidate)
Insert a candidate into the correct cell.
std::shared_ptr< SpatialCellCandidate > getCandidateById(int id, bool noThrow=false)
Return the SpatialCellCandidate with the specified id.
void visitCandidates(CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false)
Call the visitor's processCandidate method for each Candidate in the SpatialCellSet.
SpatialCellSet(lsst::geom::Box2I const ®ion, int xSize, int ySize=0)
Constructor.
An integer coordinate rectangle.
int getMinY() const noexcept
int getHeight() const noexcept
int getMinX() const noexcept
int getWidth() const noexcept
int getMaxX() const noexcept
int getMaxY() const noexcept
Provides consistent interface for LSST exceptions.
Reports invalid arguments.
Reports attempts to exceed implementation-defined length limits for some classes.
Reports attempts to access elements using an invalid key.
Reports attempts to access elements outside a valid range of indices.
int positionToIndex(double pos)
Convert image position to nearest integer index.