LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | List of all members
lsst::ip::diffim::detail::KernelSumVisitor< PixelT > Class Template Reference

A class to accumulate kernel sums across SpatialCells. More...

#include <KernelSumVisitor.h>

Inheritance diagram for lsst::ip::diffim::detail::KernelSumVisitor< PixelT >:
lsst::afw::math::CandidateVisitor

Public Types

enum  Mode { AGGREGATE = 0 , REJECT = 1 }
 
typedef std::shared_ptr< KernelSumVisitor< PixelT > > Ptr
 

Public Member Functions

 KernelSumVisitor (lsst::daf::base::PropertySet const &ps)
 
virtual ~KernelSumVisitor ()
 
void setMode (Mode mode)
 
int getNRejected ()
 
double getkSumMean ()
 
double getkSumStd ()
 
double getdkSumMax ()
 
int getkSumNpts ()
 
void resetKernelSum ()
 
void processCandidate (lsst::afw::math::SpatialCellCandidate *candidate)
 
void processKsumDistribution ()
 
virtual void reset ()
 

Detailed Description

template<typename PixelT>
class lsst::ip::diffim::detail::KernelSumVisitor< PixelT >

A class to accumulate kernel sums across SpatialCells.

std::shared_ptr<PropertySet> ps(new PropertySet);
ps->set("kernelSumClipping", false);
ps->set("maxKsumSigma", 3.0);
detail::KernelSumVisitor<PixelT> kernelSumVisitor(*ps);
kernelSumVisitor.reset();
kernelCells.visitCandidates(&kernelSumVisitor, nStarPerCell);
kernelSumVisitor.processKsumDistribution();
kernelSumVisitor.setMode(detail::KernelSumVisitor<PixelT>::REJECT);
kernelCells.visitCandidates(&kernelSumVisitor, nStarPerCell);
int nRejected = kernelSumVisitor.getNRejected();
Note
The class has 2 processing modes; the first AGGREGATES kernel sums across all candidates. You must the process the distribution to set member variables representing the mean and standard deviation of the kernel sums. The second mode then REJECTs candidates with kernel sums outside the acceptable range (set by the ps). It does this by setting candidate status to afwMath::SpatialCellCandidate::BAD. In this mode it also accumulates the number of candidates it sets as bad.
The statistics call calculates sigma-clipped values (afwMath::MEANCLIP, afwMath::STDEVCLIP)

Definition at line 27 of file KernelSumVisitor.h.

Member Typedef Documentation

◆ Ptr

Definition at line 29 of file KernelSumVisitor.h.

Member Enumeration Documentation

◆ Mode

template<typename PixelT >
enum lsst::ip::diffim::detail::KernelSumVisitor::Mode
Enumerator
AGGREGATE 
REJECT 

Definition at line 31 of file KernelSumVisitor.h.

31 {AGGREGATE = 0, REJECT = 1};

Constructor & Destructor Documentation

◆ KernelSumVisitor()

Parameters
psps file directing behavior

Definition at line 65 of file KernelSumVisitor.cc.

67  :
69  _mode(AGGREGATE),
70  _kSums(std::vector<double>()),
71  _kSumMean(0.),
72  _kSumStd(0.),
73  _dkSumMax(0.),
74  _kSumNpts(0),
75  _nRejected(0),
76  _ps(ps.deepCopy())
77  {};

◆ ~KernelSumVisitor()

template<typename PixelT >
virtual lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::~KernelSumVisitor ( )
inlinevirtual

Definition at line 34 of file KernelSumVisitor.h.

34 {};

Member Function Documentation

◆ getdkSumMax()

template<typename PixelT >
double lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::getdkSumMax ( )
inline

Definition at line 40 of file KernelSumVisitor.h.

40 {return _dkSumMax;}

◆ getkSumMean()

template<typename PixelT >
double lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::getkSumMean ( )
inline

Definition at line 38 of file KernelSumVisitor.h.

38 {return _kSumMean;}

◆ getkSumNpts()

template<typename PixelT >
int lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::getkSumNpts ( )
inline

Definition at line 41 of file KernelSumVisitor.h.

41 {return _kSumNpts;}

◆ getkSumStd()

template<typename PixelT >
double lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::getkSumStd ( )
inline

Definition at line 39 of file KernelSumVisitor.h.

39 {return _kSumStd;}

◆ getNRejected()

template<typename PixelT >
int lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::getNRejected ( )
inline

Definition at line 37 of file KernelSumVisitor.h.

37 {return _nRejected;}

◆ processCandidate()

template<typename PixelT >
void lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::processCandidate ( lsst::afw::math::SpatialCellCandidate candidate)
virtual

Reimplemented from lsst::afw::math::CandidateVisitor.

Definition at line 90 of file KernelSumVisitor.cc.

91  {
92 
93  KernelCandidate<PixelT> *kCandidate = dynamic_cast<KernelCandidate<PixelT> *>(candidate);
94  if (kCandidate == NULL) {
96  "Failed to cast SpatialCellCandidate to KernelCandidate");
97  }
98  LOGL_DEBUG("TRACE5.ip.diffim.KernelSumVisitor.processCandidate",
99  "Processing candidate %d, mode %d", kCandidate->getId(), _mode);
100 
101  /* Grab all kernel sums and look for outliers */
102  if (_mode == AGGREGATE) {
103  _kSums.push_back(kCandidate->getKernelSolution(KernelCandidate<PixelT>::ORIG)->getKsum());
104  }
105  else if (_mode == REJECT) {
106  if (_ps->getAsBool("kernelSumClipping")) {
107  double kSum =
108  kCandidate->getKernelSolution(KernelCandidate<PixelT>::ORIG)->getKsum();
109 
110  if (fabs(kSum - _kSumMean) > _dkSumMax) {
111  kCandidate->setStatus(afwMath::SpatialCellCandidate::BAD);
112  LOGL_DEBUG("TRACE3.ip.diffim.KernelSumVisitor.processCandidate",
113  "Rejecting candidate %d; bad source kernel sum : (%.2f)",
114  kCandidate->getId(),
115  kSum);
116  _nRejected += 1;
117  }
118  }
119  else {
120  LOGL_DEBUG("TRACE5.ip.diffim.KernelSumVisitor.processCandidate",
121  "Sigma clipping not enabled");
122  }
123  }
124  }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
Definition: Log.h:515
Reports errors in the logical structure of the program.
Definition: Runtime.h:46
T fabs(T... args)
T push_back(T... args)

◆ processKsumDistribution()

template<typename PixelT >
void lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::processKsumDistribution

Definition at line 127 of file KernelSumVisitor.cc.

127  {
128  if (_kSums.size() == 0) {
130  "Unable to determine kernel sum; 0 candidates");
131  }
132  else if (_kSums.size() == 1) {
133  LOGL_DEBUG("TRACE1.ip.diffim.KernelSumVisitor.processKsumDistribution",
134  "WARNING: only 1 kernel candidate");
135 
136  _kSumMean = _kSums[0];
137  _kSumStd = 0.0;
138  _kSumNpts = 1;
139  }
140  else {
141  try {
146  _kSumMean = stats.getValue(afwMath::MEANCLIP);
147  _kSumStd = stats.getValue(afwMath::STDEVCLIP);
148  _kSumNpts = static_cast<int>(stats.getValue(afwMath::NPOINT));
149  } catch (pexExcept::Exception &e) {
150  LSST_EXCEPT_ADD(e, "Unable to calculate kernel sum statistics");
151  throw e;
152  }
153  if (std::isnan(_kSumMean)) {
155  str(boost::format("Mean kernel sum returns NaN (%d points)")
156  % _kSumNpts));
157  }
158  if (std::isnan(_kSumStd)) {
160  str(boost::format("Kernel sum stdev returns NaN (%d points)")
161  % _kSumNpts));
162  }
163  }
164  _dkSumMax = _ps->getAsDouble("maxKsumSigma") * _kSumStd;
165  LOGL_DEBUG("TRACE1.ip.diffim.KernelSumVisitor.processCandidate",
166  "Kernel Sum Distribution : %.3f +/- %.3f (%d points)",
167  _kSumMean, _kSumStd, _kSumNpts);
168  }
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it.
Definition: Exception.h:54
A class to evaluate image statistics.
Definition: Statistics.h:220
double getValue(Property const prop=NOTHING) const
Return the value of the desired property (if specified in the constructor)
Definition: Statistics.cc:1047
Provides consistent interface for LSST exceptions.
Definition: Exception.h:107
T isnan(T... args)
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)
Definition: Statistics.h:359
@ STDEVCLIP
estimate sample N-sigma clipped stdev (N set in StatisticsControl, default=3)
Definition: Statistics.h:72
@ MEANCLIP
estimate sample N-sigma clipped mean (N set in StatisticsControl, default=3)
Definition: Statistics.h:71
@ NPOINT
number of sample points
Definition: Statistics.h:65
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
T size(T... args)

◆ reset()

virtual void lsst::afw::math::CandidateVisitor::reset ( )
inlinevirtualinherited

◆ resetKernelSum()

template<typename PixelT >
void lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::resetKernelSum

Definition at line 80 of file KernelSumVisitor.cc.

80  {
81  _kSums.clear();
82  _kSumMean = 0.;
83  _kSumStd = 0.;
84  _dkSumMax = 0.;
85  _kSumNpts = 0;
86  _nRejected = 0;
87  }
T clear(T... args)

◆ setMode()

template<typename PixelT >
void lsst::ip::diffim::detail::KernelSumVisitor< PixelT >::setMode ( Mode  mode)
inline

Definition at line 36 of file KernelSumVisitor.h.

36 {_mode = mode;}

The documentation for this class was generated from the following files: