LSSTApplications  19.0.0-14-gb0260a2+1b4fc4249b,20.0.0+19029f0d82,20.0.0+66077e84be,20.0.0+b8df9e862d,20.0.0+e2e26847c2,20.0.0+e47e9b3a81,20.0.0-1-g253301a+19029f0d82,20.0.0-1-g2b7511a+46a6078777,20.0.0-1-g3dda6ea+905cef1a44,20.0.0-1-g4d801e7+5fcfd52d2e,20.0.0-1-g5b95a8c+19889959e1,20.0.0-1-gc96f8cb+d5e4df5959,20.0.0-1-gedffbd8+6ca2c30637,20.0.0-10-g0891cd99+caa8c2603a,20.0.0-13-gad96b2d30+614f89f815,20.0.0-17-gcdbda88+2b141d441d,20.0.0-2-g4dae9ad+d5e4df5959,20.0.0-2-g52fdb94+046030bafd,20.0.0-2-g61b8584+85c46248f3,20.0.0-2-g8177d33+f2ab36af31,20.0.0-2-gb780d76+f45b7d88f4,20.0.0-2-gf072044+19029f0d82,20.0.0-22-gdf434b7+d5e4df5959,20.0.0-23-g10eeb28+452d7a9290,20.0.0-23-g8900aa8+a8b4322b0e,20.0.0-3-g1653f94+85c46248f3,20.0.0-3-g4cc78c6+63636aeed8,20.0.0-3-g750bffe+7a989609f2,20.0.0-3-gbd60e8c+ff10c6d78d,20.0.0-33-g078e64d5+a2256d2c79,20.0.0-4-g97dc21a+a8b4322b0e,20.0.0-4-gfea843c+f45b7d88f4,20.0.0-5-g357b56b+f45b7d88f4,20.0.0-6-g9a5b7a1+3d4d12ed4e,20.0.0-61-g4de25fb+ddf3488217,20.0.0-7-gcda7bf1+dffc53c16b,w.2020.44
LSSTDataManagementBasePackage
Public Types | Public Member Functions | List of all members
lsst::afw::math::SpatialCell Class Reference

Class to ensure constraints for spatial modeling. More...

#include <SpatialCell.h>

Public Types

typedef std::vector< std::shared_ptr< SpatialCellCandidate > > CandidateList
 
typedef SpatialCellCandidateIterator iterator
 

Public Member Functions

 SpatialCell (std::string const &label, lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), CandidateList const &candidateList=CandidateList())
 Constructor. More...
 
 SpatialCell (SpatialCell const &)=default
 
 SpatialCell (SpatialCell &&)=default
 
SpatialCelloperator= (SpatialCell const &)=default
 
SpatialCelloperator= (SpatialCell &&)=default
 
virtual ~SpatialCell ()=default
 Destructor. More...
 
bool empty () const
 Determine if cell has no usable candidates. More...
 
size_t size () const
 Return number of usable candidates in Cell. More...
 
void sortCandidates ()
 Rearrange the candidates to reflect their current ratings. More...
 
SpatialCellCandidateIterator begin ()
 Return an iterator to the beginning of the Candidates. More...
 
SpatialCellCandidateIterator begin (bool ignoreBad)
 
SpatialCellCandidateIterator end ()
 Return an iterator to (one after) the end of the Candidates. More...
 
SpatialCellCandidateIterator end (bool ignoreBad)
 
void insertCandidate (std::shared_ptr< SpatialCellCandidate > candidate)
 Add a candidate to the list, preserving ranking. More...
 
void removeCandidate (std::shared_ptr< SpatialCellCandidate > candidate)
 Remove a candidate from the list. More...
 
void setIgnoreBad (bool ignoreBad)
 Set whether we should omit BAD candidates from candidate list when traversing. More...
 
bool getIgnoreBad () const
 Get whether we are omitting BAD candidates from candidate list when traversing. More...
 
std::shared_ptr< SpatialCellCandidategetCandidateById (int id, bool noThrow=false)
 Return the SpatialCellCandidate with the specified id. More...
 
std::string const & getLabel () const
 Get SpatialCell's label. More...
 
lsst::geom::Box2I const & getBBox () const
 Get SpatialCell's BBox. More...
 
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. More...
 
void visitCandidates (CandidateVisitor *visitor, int const nMaxPerCell=-1, bool const ignoreExceptions=false, bool const reset=true) const
 Call the visitor's processCandidate method for each Candidate in the SpatialCell (const version) More...
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false, bool const reset=true)
 Call the visitor's processCandidate method for every Candidate in the SpatialCell. More...
 
void visitAllCandidates (CandidateVisitor *visitor, bool const ignoreExceptions=false, bool const reset=true) const
 Call the visitor's processCandidate method for each Candidate in the SpatialCell (const version) More...
 

Detailed Description

Class to ensure constraints for spatial modeling.

A given image is divided up into cells, with each cell represented by an instance of this class. Each cell itself contains a list of instances of classes derived from SpatialCellCandidate. One class member from each cell will be chosen to fit to a spatial model. In case of a poor fit, the next class instance in the list will be fit for. If all instances in a list are rejected from the spatial model, the best one will be used.

See also
The SpatialCellSet example in the module documentation.

Definition at line 227 of file SpatialCell.h.

Member Typedef Documentation

◆ CandidateList

Definition at line 229 of file SpatialCell.h.

◆ iterator

Definition at line 230 of file SpatialCell.h.

Constructor & Destructor Documentation

◆ SpatialCell() [1/3]

lsst::afw::math::SpatialCell::SpatialCell ( std::string const &  label,
lsst::geom::Box2I const &  bbox = lsst::geom::Box2I(),
CandidateList const &  candidateList = CandidateList() 
)

Constructor.

Parameters
labelstring representing "name" of cell
bboxBounding box of cell in overall image
candidateListlist of candidates to represent this cell

Definition at line 73 of file SpatialCell.cc.

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());
79 }

◆ SpatialCell() [2/3]

lsst::afw::math::SpatialCell::SpatialCell ( SpatialCell const &  )
default

◆ SpatialCell() [3/3]

lsst::afw::math::SpatialCell::SpatialCell ( SpatialCell &&  )
default

◆ ~SpatialCell()

virtual lsst::afw::math::SpatialCell::~SpatialCell ( )
virtualdefault

Destructor.

Member Function Documentation

◆ begin() [1/2]

SpatialCellCandidateIterator lsst::afw::math::SpatialCell::begin ( )
inline

Return an iterator to the beginning of the Candidates.

Definition at line 267 of file SpatialCell.h.

267  {
268  return SpatialCellCandidateIterator(_candidateList.begin(), _candidateList.end(), _ignoreBad);
269  }

◆ begin() [2/2]

SpatialCellCandidateIterator lsst::afw::math::SpatialCell::begin ( bool  ignoreBad)
inline
Parameters
ignoreBadIf true, ignore BAD candidates

Definition at line 270 of file SpatialCell.h.

271  {
272  return SpatialCellCandidateIterator(_candidateList.begin(), _candidateList.end(), ignoreBad);
273  }

◆ empty()

bool lsst::afw::math::SpatialCell::empty ( ) const

Determine if cell has no usable candidates.

Definition at line 99 of file SpatialCell.cc.

99  {
100  // Cast away const; end is only non-const as it provides access to the Candidates
101  // and we don't (yet) have SpatialCellCandidateConstIterator
102  SpatialCell *mthis = const_cast<SpatialCell *>(this);
103 
104  for (SpatialCellCandidateIterator ptr = mthis->begin(), end = mthis->end(); ptr != end; ++ptr) {
105  if (!(_ignoreBad && (*ptr)->isBad())) { // found a good candidate, or don't care
106  return false;
107  }
108  }
109 
110  return true;
111 }

◆ end() [1/2]

SpatialCellCandidateIterator lsst::afw::math::SpatialCell::end ( )
inline

Return an iterator to (one after) the end of the Candidates.

Definition at line 277 of file SpatialCell.h.

277  {
278  return SpatialCellCandidateIterator(_candidateList.begin(), _candidateList.end(), _ignoreBad, true);
279  }

◆ end() [2/2]

SpatialCellCandidateIterator lsst::afw::math::SpatialCell::end ( bool  ignoreBad)
inline
Parameters
ignoreBadIf true, ignore BAD candidates

Definition at line 280 of file SpatialCell.h.

281  {
282  return SpatialCellCandidateIterator(_candidateList.begin(), _candidateList.end(), ignoreBad, true);
283  }

◆ getBBox()

lsst::geom::Box2I const& lsst::afw::math::SpatialCell::getBBox ( ) const
inline

Get SpatialCell's BBox.

Definition at line 318 of file SpatialCell.h.

318 { return _bbox; }

◆ getCandidateById()

std::shared_ptr< SpatialCellCandidate > lsst::afw::math::SpatialCell::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

Definition at line 121 of file SpatialCell.cc.

121  {
122  for (SpatialCellCandidateIterator ptr = begin(), end = this->end(); ptr != end; ++ptr) {
123  if ((*ptr)->getId() == id) {
124  return *ptr;
125  }
126  }
127 
128  if (noThrow) {
130  } else {
132  (boost::format("Unable to find object with ID == %d") % id).str());
133  }
134 }

◆ getIgnoreBad()

bool lsst::afw::math::SpatialCell::getIgnoreBad ( ) const
inline

Get whether we are omitting BAD candidates from candidate list when traversing.

Definition at line 300 of file SpatialCell.h.

300 { return _ignoreBad; }

◆ getLabel()

std::string const& lsst::afw::math::SpatialCell::getLabel ( ) const
inline

Get SpatialCell's label.

Definition at line 314 of file SpatialCell.h.

314 { return _label; }

◆ insertCandidate()

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

Add a candidate to the list, preserving ranking.

Definition at line 83 of file SpatialCell.cc.

83  {
84  CandidateList::iterator pos =
85  std::lower_bound(_candidateList.begin(), _candidateList.end(), candidate, CandidatePtrMore());
86  _candidateList.insert(pos, candidate);
87 }

◆ operator=() [1/2]

SpatialCell& lsst::afw::math::SpatialCell::operator= ( SpatialCell &&  )
default

◆ operator=() [2/2]

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

◆ removeCandidate()

void lsst::afw::math::SpatialCell::removeCandidate ( std::shared_ptr< SpatialCellCandidate candidate)

Remove a candidate from the list.

This is not a particularly efficient operation, since we're using a std::vector, but should not hurt too much if the number of candidates in a cell is small.

Definition at line 89 of file SpatialCell.cc.

89  {
90  CandidateList::iterator pos = std::find(_candidateList.begin(), _candidateList.end(), candidate);
91  if (pos == _candidateList.end()) {
92  throw LSST_EXCEPT(
94  (boost::format("Unable to find candidate with ID == %d") % candidate->getId()).str());
95  }
96  _candidateList.erase(pos);
97 }

◆ setIgnoreBad()

void lsst::afw::math::SpatialCell::setIgnoreBad ( bool  ignoreBad)
inline

Set whether we should omit BAD candidates from candidate list when traversing.

Definition at line 298 of file SpatialCell.h.

298 { _ignoreBad = ignoreBad; }

◆ size()

size_t lsst::afw::math::SpatialCell::size ( ) const

Return number of usable candidates in Cell.

Definition at line 113 of file SpatialCell.cc.

113  {
114  // Cast away const; begin/end is only non-const as they provide access to the Candidates
115  // and we don't (yet) have SpatialCellCandidateConstIterator
116  SpatialCell *mthis = const_cast<SpatialCell *>(this);
117 
118  return mthis->end() - mthis->begin();
119 }

◆ sortCandidates()

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

Rearrange the candidates to reflect their current ratings.

Definition at line 81 of file SpatialCell.cc.

81 { sort(_candidateList.begin(), _candidateList.end(), CandidatePtrMore()); }

◆ visitAllCandidates() [1/2]

void lsst::afw::math::SpatialCell::visitAllCandidates ( CandidateVisitor visitor,
bool const  ignoreExceptions = false,
bool const  reset = true 
)

Call the visitor's processCandidate method for every Candidate in the SpatialCell.

Parameters
visitorPass this object to every Candidate
ignoreExceptionsIgnore any exceptions thrown by
resetReset visitor before passing it around
See also
visitCandidates

Definition at line 193 of file SpatialCell.cc.

194  {
195  if (reset) {
196  visitor->reset();
197  }
198 
199  int i = 0;
200  for (SpatialCell::iterator candidate = begin(false), candidateEnd = end(false); candidate != candidateEnd;
201  ++candidate, ++i) {
202  try {
203  visitor->processCandidate((*candidate).get());
205  if (ignoreExceptions) {
206  ;
207  } else {
208  LSST_EXCEPT_ADD(e, "Visiting candidate");
209  throw e;
210  }
211  }
212  }
213 }

◆ visitAllCandidates() [2/2]

void lsst::afw::math::SpatialCell::visitAllCandidates ( CandidateVisitor visitor,
bool const  ignoreExceptions = false,
bool const  reset = true 
) const

Call the visitor's processCandidate method for each Candidate in the SpatialCell (const version)

This is the const version of SpatialCellSet::visitAllCandidates

Parameters
visitorPass this object to every Candidate
ignoreExceptionsIgnore any exceptions thrown by the processing
resetReset visitor before passing it around
Todo:
This is currently implemented via a const_cast (arghhh). The problem is that SpatialCell::begin() const isn't yet implemented

Definition at line 215 of file SpatialCell.cc.

216  {
217 #if 1
218  //
219  // This const_cast must go!
220  //
221  SpatialCell *mthis = const_cast<SpatialCell *>(this);
222  mthis->visitAllCandidates(visitor, ignoreExceptions, reset);
223 #else
224  int i = 0;
225  for (SpatialCell::const_iterator candidate = (*cell)->begin(false), candidateEnd = (*cell)->end(false);
226  candidate != candidateEnd; ++candidate, ++i) {
227  try {
228  visitor->processCandidate((*candidate).get());
230  if (ignoreExceptions) {
231  ;
232  } else {
233  LSST_EXCEPT_ADD(e, "Visiting candidate");
234  throw e;
235  }
236  }
237  }
238 #endif
239 }

◆ visitCandidates() [1/2]

void lsst::afw::math::SpatialCell::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.

Parameters
visitorPass this object to every Candidate
nMaxPerCellVisit no more than this many Candidates (<= 0: all)
ignoreExceptionsIgnore any exceptions thrown by the processing
resetReset visitor before passing it around
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 136 of file SpatialCell.cc.

138  {
139  if (reset) {
140  visitor->reset();
141  }
142 
143  int i = 0;
144  for (SpatialCell::iterator candidate = begin(), candidateEnd = end(); candidate != candidateEnd;
145  ++candidate, ++i) {
146  if (nMaxPerCell > 0 && i == nMaxPerCell) { // we've processed all the candidates we want
147  return;
148  }
149 
150  try {
151  visitor->processCandidate((*candidate).get());
152  } catch (lsst::pex::exceptions::Exception &e) {
153  if (ignoreExceptions) {
154  ;
155  } else {
156  LSST_EXCEPT_ADD(e, "Visiting candidate");
157  throw e;
158  }
159  }
160  }
161 }

◆ visitCandidates() [2/2]

void lsst::afw::math::SpatialCell::visitCandidates ( CandidateVisitor visitor,
int const  nMaxPerCell = -1,
bool const  ignoreExceptions = false,
bool const  reset = true 
) const

Call the visitor's processCandidate method for each Candidate in the SpatialCell (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
resetReset visitor before passing it around
Todo:
This is currently implemented via a const_cast (arghhh). The problem is that SpatialCell::begin() const isn't yet implemented

Definition at line 163 of file SpatialCell.cc.

164  {
165 #if 1
166  //
167  // This const_cast must go!
168  //
169  SpatialCell *mthis = const_cast<SpatialCell *>(this);
170  mthis->visitCandidates(visitor, nMaxPerCell, ignoreExceptions, reset);
171 #else
172  int i = 0;
173  for (SpatialCell::const_iterator candidate = (*cell)->begin(), candidateEnd = (*cell)->end();
174  candidate != candidateEnd; ++candidate, ++i) {
175  if (i == nMaxPerCell) { // we've processed all the candidates we want
176  return;
177  }
178 
179  try {
180  visitor->processCandidate((*candidate).get());
182  if (ignoreExceptions) {
183  ;
184  } else {
185  LSST_EXCEPT_ADD(e, "Visiting candidate");
186  throw e;
187  }
188  }
189  }
190 #endif
191 }

The documentation for this class was generated from the following files:
std::shared_ptr< SpatialCellCandidate >
std::find
T find(T... args)
lsst.pex::exceptions::NotFoundError
Reports attempts to access elements using an invalid key.
Definition: Runtime.h:151
LSST_EXCEPT_ADD
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it.
Definition: Exception.h:54
lsst::afw::math::SpatialCell::begin
SpatialCellCandidateIterator begin()
Return an iterator to the beginning of the Candidates.
Definition: SpatialCell.h:267
lsst.pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
std::sort
T sort(T... args)
lsst::afw::math::SpatialCell::SpatialCell
SpatialCell(std::string const &label, lsst::geom::Box2I const &bbox=lsst::geom::Box2I(), CandidateList const &candidateList=CandidateList())
Constructor.
Definition: SpatialCell.cc:73
lsst.pex::exceptions::LengthError
Reports attempts to exceed implementation-defined length limits for some classes.
Definition: Runtime.h:76
std::string::c_str
T c_str(T... args)
std::vector::erase
T erase(T... args)
ptr
uint64_t * ptr
Definition: RangeSet.cc:88
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
std::lower_bound
T lower_bound(T... args)
lsst::afw::math::SpatialCell::end
SpatialCellCandidateIterator end()
Return an iterator to (one after) the end of the Candidates.
Definition: SpatialCell.h:277
LOGL_DEBUG
#define LOGL_DEBUG(logger, message...)
Definition: Log.h:504
std::vector::begin
T begin(T... args)
lsst::afw::math::SpatialCell::sortCandidates
void sortCandidates()
Rearrange the candidates to reflect their current ratings.
Definition: SpatialCell.cc:81
std::vector::insert
T insert(T... args)
lsst.pex::exceptions::Exception
Provides consistent interface for LSST exceptions.
Definition: Exception.h:107
std::vector::end
T end(T... args)
lsst::afw::math::SpatialCell::iterator
SpatialCellCandidateIterator iterator
Definition: SpatialCell.h:230
bbox
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117