46 std::shared_ptr<SpatialCellCandidate>, bool> {
48 return a->getCandidateRating() >
b->getCandidateRating();
53 int SpatialCellCandidate::_CandidateId = 0;
67 (boost::format(
"Saw unknown status %d") % status).str());
70 int SpatialCellImageCandidate::_width = 0;
72 int SpatialCellImageCandidate::_height = 0;
76 : _label(label), _bbox(
bbox), _candidateList(candidateList), _ignoreBad(true) {
77 LOGL_DEBUG(
"afw.math.SpatialCell",
"Cell %s : created with %d candidates", this->_label.
c_str(),
78 this->_candidateList.size());
85 CandidateList::iterator pos =
87 _candidateList.
insert(pos, candidate);
91 CandidateList::iterator pos =
std::find(_candidateList.
begin(), _candidateList.
end(), candidate);
92 if (pos == _candidateList.
end()) {
95 (boost::format(
"Unable to find candidate with ID == %d") % candidate->getId()).str());
97 _candidateList.
erase(pos);
105 for (
auto && mthi : *mthis) {
106 if (!(_ignoreBad && (mthi)->isBad())) {
119 return mthis->
end() - mthis->
begin();
124 if ((*ptr)->getId() ==
id) {
133 (boost::format(
"Unable to find object with ID == %d") %
id).str());
139 bool const ignoreExceptions,
bool const reset) {
147 if (nMaxPerCell > 0 && i == nMaxPerCell) {
154 if (ignoreExceptions) {
165 bool const ignoreExceptions,
bool const reset)
const {
174 for (SpatialCell::const_iterator candidate = (*cell)->begin(), candidateEnd = (*cell)->end();
175 candidate != candidateEnd; ++candidate, ++i) {
176 if (i == nMaxPerCell) {
183 if (ignoreExceptions) {
206 if (ignoreExceptions) {
217 bool const reset)
const {
226 for (SpatialCell::const_iterator candidate = (*cell)->begin(
false), candidateEnd = (*cell)->end(
false);
227 candidate != candidateEnd; ++candidate, ++i) {
231 if (ignoreExceptions) {
243 CandidateList::iterator
end,
bool ignoreBad)
244 : _iterator(iterator), _end(
end), _ignoreBad(ignoreBad) {
245 for (; _iterator != _end; ++_iterator) {
246 (*_iterator)->instantiate();
248 if (!(_ignoreBad && (*_iterator)->isBad())) {
255 CandidateList::iterator
end,
bool ignoreBad,
bool)
256 : _iterator(
end), _end(
end), _ignoreBad(ignoreBad) {
264 if (_iterator != _end) {
268 for (; _iterator != _end; ++_iterator) {
269 (*_iterator)->instantiate();
271 if (!(_ignoreBad && (*_iterator)->isBad())) {
280 if (!(_ignoreBad && (*ptr)->isBad())) {
289 if (_iterator == _end) {
297 if (_iterator == _end) {
305 : _region(region), _cellList(
CellList()) {
310 if (xSize <= 0 || ySize <= 0) {
313 (boost::format(
"Please specify cells that contain pixels, not %dx%d") % xSize % ySize).str());
317 if (nx * xSize != region.
getWidth()) {
329 for (
int y = 0;
y < ny; ++
y) {
331 int const y1 = (
y == ny - 1) ? region.
getMaxY() : y0 + ySize - 1;
333 for (
int x = 0;
x < nx; ++
x) {
335 int const x1 = (
x == nx - 1) ? region.
getMaxX() : x0 + xSize - 1;
337 std::string label = (boost::format(
"Cell %dx%d") %
x %
y).str();
339 _cellList.
push_back(std::make_shared<SpatialCell>(label,
bbox));
352 return cell->getBBox().contains(
363 CellList::iterator pos =
std::find_if(_cellList.
begin(), _cellList.
end(), CellContains(candidate));
365 if (pos == _cellList.
end()) {
367 (boost::format(
"Unable to insert a candidate at (%.2f, %.2f)") %
368 candidate->getXCenter() % candidate->getYCenter())
372 (*pos)->insertCandidate(candidate);
376 for (
auto const &cell : _cellList) {
377 cell->sortCandidates();
382 bool const ignoreExceptions) {
385 for (
auto const &cell : _cellList) {
386 cell->visitCandidates(visitor, nMaxPerCell, ignoreExceptions,
false);
391 bool const ignoreExceptions)
const {
394 for (
auto const &cell : _cellList) {
403 for (
auto const &cell : _cellList) {
404 cell->visitAllCandidates(visitor, ignoreExceptions,
false);
411 for (
auto const &cell : _cellList) {
418 for (
auto const &cell : _cellList) {
430 (boost::format(
"Unable to find object with ID == %d") %
id).str());
435 for (
auto const &cell : _cellList) {
436 cell->setIgnoreBad(ignoreBad);
#define LSST_EXCEPT_ADD(e, m)
#define LSST_EXCEPT(type,...)
#define LOGL_DEBUG(logger, message...)
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.
std::shared_ptr< SpatialCellCandidate const > operator*() const
Dereference the iterator to return the Candidate (if there is one)
size_t operator-(SpatialCellCandidateIterator const &rhs) const
Return the number of candidate between this and rhs.
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.
int getMinY() const noexcept
int getHeight() const noexcept
int getMinX() const noexcept
int getWidth() const noexcept
int getMaxX() const noexcept
int getMaxY() const noexcept
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
int positionToIndex(double pos)
Convert image position to nearest integer index.
A base class for image defects.