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) {
132 (
boost::format(
"Unable to find object with ID == %d") %
id).str());
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) {
429 (
boost::format(
"Unable to find object with ID == %d") %
id).str());
434 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
435 (*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.
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.
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.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
int positionToIndex(double pos)
Convert image position to nearest integer index.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A base class for image defects.