File SpatialCell.h

namespace lsst

Class for a simple mapping implementing a generic AstrometryTransform.

Remove all non-astronomical counts from the Chunk Exposure’s pixels.

Forward declarations for lsst::utils::Cache

For details on the Cache class, see the Cache.h file.

It uses a template rather than a pointer so that the derived classes can use the specifics of the transform. The class simplePolyMapping overloads a few routines.

A base class for image defects

Numeric constants used by the Integrate.h integrator routines.

Compute Image Statistics

Note

Gauss-Kronrod-Patterson quadrature coefficients for use in quadpack routine qng. These coefficients were calculated with 101 decimal digit arithmetic by L. W. Fullerton, Bell Labs, Nov 1981.

Note

The Statistics class itself can only handle lsst::afw::image::MaskedImage() types. The philosophy has been to handle other types by making them look like lsst::afw::image::MaskedImage() and reusing that code. Users should have no need to instantiate a Statistics object directly, but should use the overloaded makeStatistics() factory functions.

namespace afw
namespace math
class CandidateVisitor

Subclassed by lsst::ip::diffim::detail::AssessSpatialKernelVisitor< PixelT >, lsst::ip::diffim::detail::BuildSingleKernelVisitor< PixelT >, lsst::ip::diffim::detail::BuildSpatialKernelVisitor< PixelT >, lsst::ip::diffim::detail::KernelPcaVisitor< PixelT >, lsst::ip::diffim::detail::KernelSumVisitor< PixelT >

Public Functions

CandidateVisitor()
virtual ~CandidateVisitor()
virtual void reset()
virtual void processCandidate(SpatialCellCandidate *)
class SpatialCell
#include <SpatialCell.h>

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

The SpatialCellSet example in the module documentation.

Public Types

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

Public Functions

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

Constructor

Parameters
  • label: string representing “name” of cell

  • bbox: Bounding box of cell in overall image

  • candidateList: list of candidates to represent this cell

SpatialCell(SpatialCell const&)
SpatialCell(SpatialCell&&)
SpatialCell &operator=(SpatialCell const&)
SpatialCell &operator=(SpatialCell&&)
virtual ~SpatialCell()

Destructor

bool empty() const

Determine if cell has no usable candidates

size_t size() const

Return number of usable candidates in Cell

void sortCandidates()

Rearrange the candidates to reflect their current ratings

SpatialCellCandidateIterator begin()

Return an iterator to the beginning of the Candidates

SpatialCellCandidateIterator begin(bool ignoreBad)

Parameters
  • ignoreBad: If true, ignore BAD candidates

SpatialCellCandidateIterator end()

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

SpatialCellCandidateIterator end(bool ignoreBad)

Parameters
  • ignoreBad: If true, ignore BAD candidates

void insertCandidate(std::shared_ptr<SpatialCellCandidate> candidate)

Add a candidate to the list, preserving ranking

void 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.

void setIgnoreBad(bool ignoreBad)

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

bool getIgnoreBad() const

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

std::shared_ptr<SpatialCellCandidate> getCandidateById(int id, bool noThrow = false)

Return the SpatialCellCandidate with the specified id

Parameters
  • id: The desired ID

  • noThrow: Return NULL in case of error

Exceptions
  • lsst::pex::exceptions::NotFoundError: if no candidate matches the id

std::string const &getLabel() const

Get SpatialCell’s label

lsst::geom::Box2I const &getBBox() const

Get SpatialCell’s BBox

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

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)

Parameters
  • visitor: Pass this object to every Candidate

  • nMaxPerCell: Visit no more than this many Candidates (<= 0: all)

  • ignoreExceptions: Ignore any exceptions thrown by the processing

  • reset: Reset visitor before passing it around

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)

This is the const version of SpatialCellSet::visitCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • nMaxPerCell: Visit no more than this many Candidates (-ve: all)

  • ignoreExceptions: Ignore any exceptions thrown by the processing

  • reset: Reset visitor before passing it around

void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions = false, bool const reset = true)

Call the visitor’s processCandidate method for every Candidate in the SpatialCell

See

visitCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • ignoreExceptions: Ignore any exceptions thrown by

  • reset: Reset visitor before passing it around

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)

This is the const version of SpatialCellSet::visitAllCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • ignoreExceptions: Ignore any exceptions thrown by the processing

  • reset: Reset visitor before passing it around

Private Members

std::string _label
lsst::geom::Box2I _bbox
CandidateList _candidateList
bool _ignoreBad
class SpatialCellCandidate
#include <SpatialCell.h>

Base class for candidate objects in a SpatialCell

Subclassed by lsst::afw::math::SpatialCellImageCandidate

Public Types

enum Status

Values:

BAD = 0
GOOD = 1
UNKNOWN = 2

Public Functions

SpatialCellCandidate(float const xCenter, float const yCenter)

Parameters
  • xCenter: The object’s column-centre

  • yCenter: The object’s row-centre

SpatialCellCandidate(SpatialCellCandidate const&)
SpatialCellCandidate(SpatialCellCandidate&&)
SpatialCellCandidate &operator=(SpatialCellCandidate const&)
SpatialCellCandidate &operator=(SpatialCellCandidate&&)
virtual ~SpatialCellCandidate()

(virtual) destructor this is a base class you know

float getXCenter() const

Return the object’s column-centre.

float getYCenter() const

Return the object’s row-centre.

virtual bool instantiate()

Do anything needed to make this candidate usable.

virtual double getCandidateRating() const = 0

Return candidate’s rating.

virtual void setCandidateRating(double)

Set the candidate’s rating.

int getId() const

Return the candidate’s unique ID.

Status getStatus() const

Return the candidate’s status.

void setStatus(Status status)

Set the candidate’s status.

virtual bool isBad() const

Is this candidate unacceptable?

Private Members

int _id
Status _status
float const _xCenter
float const _yCenter

Private Static Attributes

int _CandidateId

Unique identifier for candidates; useful for preserving current candidate following insertion.

class SpatialCellCandidateIterator
#include <SpatialCell.h>

An iterator that only returns usable members of the SpatialCell

Public Functions

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)

Exceptions
  • lsst::pex::exceptions::NotFoundError: if no candidate is available

std::shared_ptr<SpatialCellCandidate> operator*()

Return the std::shared_ptr<CellCandidate>

bool operator==(SpatialCellCandidateIterator const &rhs) const

Are two SpatialCellCandidateIterators equal?

bool operator!=(SpatialCellCandidateIterator const &rhs) const

Are two SpatialCellCandidateIterators unequal?

Protected Functions

SpatialCellCandidateIterator(CandidateList::iterator iterator, CandidateList::iterator end, bool ignoreBad)

ctor; designed to be used to pass begin to SpatialCellCandidateIterator

Parameters
  • iterator: Where this iterator should start

  • end: One-past-the-end of iterator’s range

  • ignoreBad: Should we pass over bad Candidates?

SpatialCellCandidateIterator(CandidateList::iterator iterator, CandidateList::iterator end, bool ignoreBad, bool)

ctor; designed to be used to pass end to SpatialCellCandidateIterator

Parameters
  • iterator: start of of iterator’s range; not used

  • end: Where this iterator should start

  • ignoreBad: Should we pass over bad Candidates?

Private Types

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

Private Members

CandidateList::iterator _iterator
CandidateList::iterator _end
bool _ignoreBad

Friends

friend lsst::afw::math::SpatialCell
class SpatialCellImageCandidate : public lsst::afw::math::SpatialCellCandidate
#include <SpatialCell.h>

Base class for candidate objects in a SpatialCell that are able to return an Image of some sort (e.g. a PSF or a DIA kernel)

Subclassed by lsst::ip::diffim::KernelCandidate< _PixelT >, lsst::meas::algorithms::PsfCandidate< PixelT >

Public Functions

SpatialCellImageCandidate(float const xCenter, float const yCenter)

ctor

Parameters
  • xCenter: The object’s column-centre

  • yCenter: The object’s row-centre

SpatialCellImageCandidate(SpatialCellImageCandidate const&)
SpatialCellImageCandidate(SpatialCellImageCandidate&&)
SpatialCellImageCandidate &operator=(SpatialCellImageCandidate const&)
SpatialCellImageCandidate &operator=(SpatialCellImageCandidate&&)
~SpatialCellImageCandidate()
double getChi2() const

Return the candidate’s chi^2.

void setChi2(double chi2)

Set the candidate’s chi^2.

Public Static Functions

static void setWidth(int width)

Set the width of the image that getImage should return.

static int getWidth()

Return the width of the image that getImage should return.

static void setHeight(int height)

Set the height of the image that getImage should return.

static int getHeight()

Return the height of the image that getImage should return.

Private Members

double _chi2

Private Static Attributes

int _width
int _height
class SpatialCellSet
#include <SpatialCell.h>

A collection of SpatialCells covering an entire image

Public Types

typedef std::vector<std::shared_ptr<SpatialCell>> CellList

Public Functions

SpatialCellSet(lsst::geom::Box2I const &region, int xSize, int ySize = 0)

Constructor

Parameters
  • region: Bounding box for image

  • xSize: size of cells in the column direction

  • ySize: size of cells in the row direction (0: == xSize)

Exceptions
  • lsst::pex::exceptions::LengthError: if nx or ny is non-positive

SpatialCellSet(SpatialCellSet const&)
SpatialCellSet(SpatialCellSet&&)
SpatialCellSet &operator=(SpatialCellSet const&)
SpatialCellSet &operator=(SpatialCellSet&&)
virtual ~SpatialCellSet()

Destructor

CellList &getCellList()

Return our SpatialCells

lsst::geom::Box2I getBBox() const

Return the bounding box of the image

void insertCandidate(std::shared_ptr<SpatialCellCandidate> candidate)

Insert a candidate into the correct cell

void sortCandidates()

Rearrange the Candidates in all SpatialCells to reflect their current ratings.

void visitCandidates(CandidateVisitor *visitor, int const nMaxPerCell = -1, bool const ignoreExceptions = false)

Call the visitor’s processCandidate method for each Candidate in the SpatialCellSet

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)

Parameters
  • visitor: Pass this object to every Candidate

  • nMaxPerCell: Visit no more than this many Candidates (<= 0: all)

  • ignoreExceptions: Ignore any exceptions thrown by the processing

void visitCandidates(CandidateVisitor *visitor, int const nMaxPerCell = -1, bool const ignoreExceptions = false) const

Call the visitor’s processCandidate method for each Candidate in the SpatialCellSet (const version)

This is the const version of SpatialCellSet::visitCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • nMaxPerCell: Visit no more than this many Candidates (-ve: all)

  • ignoreExceptions: Ignore any exceptions thrown by the processing

void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions = false)

Call the visitor’s processCandidate method for every Candidate in the SpatialCellSet

See

visitCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • ignoreExceptions: Ignore any exceptions thrown by the processing

void visitAllCandidates(CandidateVisitor *visitor, bool const ignoreExceptions = false) const

Call the visitor’s processCandidate method for every Candidate in the SpatialCellSet (const version)

This is the const version of SpatialCellSet::visitAllCandidates

Parameters
  • visitor: Pass this object to every Candidate

  • ignoreExceptions: Ignore any exceptions thrown by the processing

std::shared_ptr<SpatialCellCandidate> getCandidateById(int id, bool noThrow = false)

Return the SpatialCellCandidate with the specified id

Parameters
  • id: The desired ID

  • noThrow: Return NULL in case of error

Exceptions
  • lsst::pex::exceptions::NotFoundError: if no candidate matches the id (unless noThrow is true, in which case a null pointer is returned

void setIgnoreBad(bool ignoreBad)

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

Private Members

lsst::geom::Box2I _region
CellList _cellList