25 #ifndef LSST_IP_DIFFIM_DIPOLEALGORITHMS_H
26 #define LSST_IP_DIFFIM_DIPOLEALGORITHMS_H
38 #include "lsst/base.h"
39 #include "lsst/pex/config.h"
40 #include "ndarray/eigen.h"
41 #include "lsst/afw/table/Source.h"
42 #include "lsst/meas/base/Algorithm.h"
43 #include "lsst/meas/base/FluxUtilities.h"
44 #include "lsst/meas/base/CentroidUtilities.h"
45 #include "lsst/meas/base/FlagHandler.h"
46 #include "lsst/meas/base/InputUtilities.h"
69 LSST_CONTROL_FIELD(
stepSizeCoord,
float,
"Default initial step size for coordinates in non-linear fitter");
70 LSST_CONTROL_FIELD(
stepSizeFlux,
float,
"Default initial step size for flux in non-linear fitter");
71 LSST_CONTROL_FIELD(
errorDef,
double,
"How many sigma the error bars of the non-linear fitter represent");
72 LSST_CONTROL_FIELD(
maxFnCalls,
int,
"Maximum function calls for non-linear fitter; 0 = unlimited");
83 static meas::base::FlagDefinition
const FAILURE;
84 static meas::base::FlagDefinition
const POS_FLAG;
85 static meas::base::FlagDefinition
const NEG_FLAG;
91 afw::table::Schema & schema, std::string
const & doc);
102 std::string
const & doc,
ResultKey const & positiveKeys,
ResultKey const & negativeKeys);
118 static meas::base::FlagDefinition
const FAILURE;
128 std::string
const & doc);
140 afw::table::Schema & schema, std::string
const & doc,
152 Control const & ctrl, std::string
const & name, afw::table::Schema & schema, std::string
const & doc
157 meas::base::CentroidResultKey::addFields(schema, name, doc+
": overall centroid", meas::base::SIGMA_ONLY);
158 meas::base::CentroidResultKey::addFields(schema, name+
"_pos", doc+
": positive lobe", meas::base::SIGMA_ONLY);
159 meas::base::CentroidResultKey::addFields(schema, name+
"_neg", doc+
": negative lobe", meas::base::SIGMA_ONLY);
166 Control const & ctrl, std::string
const & name, afw::table::Schema & schema, std::string
const & doc,
172 meas::base::CentroidResultKey::addFields(schema, name, doc+
": overall centroid", meas::base::SIGMA_ONLY);
173 meas::base::CentroidResultKey::addFields(schema, name+
"_pos", doc +
": positive lobe", meas::base::SIGMA_ONLY);
174 meas::base::CentroidResultKey::addFields(schema, name+
"_neg", doc +
": negative lobe", meas::base::SIGMA_ONLY);
182 Control const & ctrl, std::string
const & name, afw::table::Schema & schema,
183 std::string
const & doc,
ResultKey const & positiveKeys,
ResultKey const & negativeKeys
188 meas::base::FluxResultKey::addFields(schema, name+
"_pos", doc+
": positive lobe");
189 meas::base::FluxResultKey::addFields(schema, name+
"_neg", doc+
": negative lobe");
195 Control const & ctrl, std::string
const & name, afw::table::Schema & schema,
196 std::string
const & doc
201 meas::base::FluxResultKey::addFields(schema, name+
"_pos", doc+
": positive lobe");
202 meas::base::FluxResultKey::addFields(schema, name+
"_neg", doc+
": negative lobe");
218 _numPositiveKey(schema.addField<int>(name+
"_npos",
"number of positive pixels",
"count")),
219 _numNegativeKey(schema.addField<int>(name+
"_nneg",
"number of negative pixels",
"count"))
224 afw::table::SourceRecord & measRecord,
225 afw::image::Exposure<float>
const & exposure
229 afw::table::SourceRecord & measRecord,
230 meas::base::MeasurementError * error=NULL
260 afw::table::SourceRecord & measRecord,
261 afw::image::Exposure<float>
const & exposure
264 void mergeCentroids(afw::table::SourceRecord & source,
double posValue,
double negValue)
const;
267 afw::table::SourceRecord & measRecord,
268 meas::base::MeasurementError * error=NULL
297 _chi2dofKey(schema.addField<float>(name+
"_chi2dof",
298 "chi2 per degree of freedom of fit"))
300 meas::base::CentroidResultKey::addFields(schema, name+
"_pos_centroid",
"psf fitted center of positive lobe", meas::base::SIGMA_ONLY);
301 meas::base::CentroidResultKey::addFields(schema, name+
"_neg_centroid",
"psf fitted center of negative lobe", meas::base::SIGMA_ONLY);
302 meas::base::CentroidResultKey::addFields(schema, name+
"_centroid",
"average of negative and positive lobe positions", meas::base::SIGMA_ONLY);
303 _posCentroid = meas::base::CentroidResultKey(schema[name+
"_pos_centroid"]);
304 _negCentroid = meas::base::CentroidResultKey(schema[name+
"_neg_centroid"]);
305 _avgCentroid = meas::base::CentroidResultKey(schema[name+
"_centroid"]);
307 std::pair<double,int>
chi2(afw::table::SourceRecord & source,
308 afw::image::Exposure<float>
const & exposure,
309 double negCenterX,
double negCenterY,
double negFlux,
310 double posCenterX,
double poCenterY,
double posFlux
314 afw::table::SourceRecord & measRecord,
315 afw::image::Exposure<float>
const & exposure
319 afw::table::SourceRecord & measRecord,
320 meas::base::MeasurementError * error=NULL
335 #endif // !LSST_IP_DIFFIM_DIPOLEALGORITHMS_H
afw::table::Key< float > _chi2dofKey
meas::base::FluxResultKey _fluxResultKey
float stepSizeFlux
"Default initial step size for flux in non-linear fitter" ;
meas::base::CentroidResultKey _avgCentroid
meas::base::CentroidResultKey ResultKey
DipoleFluxControl Control
A typedef to the Control object for this algorithm, defined above.
Implementation of Psf dipole flux.
void mergeCentroids(afw::table::SourceRecord &source, double posValue, double negValue) const
meas::base::FluxResultKey _fluxResultKey
Intermediate base class for algorithms that compute a centroid.
afw::table::Key< int > _numNegativeKey
ResultKey const & getCenterKeys() const
Return the standard centroid keys registered by this algorithm.
meas::base::FluxResultKey ResultKey
NaiveDipoleFlux(Control const &ctrl, std::string const &name, afw::table::Schema &schema)
meas::base::FluxResultKey _fluxResultKey
static meas::base::FlagDefinition const FAILURE
void fail(afw::table::SourceRecord &measRecord, meas::base::MeasurementError *error=NULL) const
meas::base::CentroidResultKey _negCentroid
C++ control object for PSF dipole fluxes.
ResultKey const & getPositiveKeys() const
Return the standard flux keys registered by this algorithm.
static meas::base::FlagDefinition const POS_FLAG
ResultKey const & getNegativeKeys() const
void measure(afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
Given an image and a pixel position, return a Centroid using a naive 3x3 weighted moment...
DipoleFluxControl Control
meas::base::CentroidResultKey _posCentroid
ResultKey const & getNegativeKeys() const
static meas::base::FlagDefinitionList const & getFlagDefinitions()
meas::base::FlagHandler _flagHandler
void measure(afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
DipoleCentroidAlgorithm(Control const &ctrl, std::string const &name, afw::table::Schema &schema, std::string const &doc)
meas::base::FlagHandler _flagHandler
ResultKey const & getNegativeKeys() const
NaiveDipoleCentroid(Control const &ctrl, std::string const &name, afw::table::Schema &schema)
static meas::base::FlagDefinition const POS_FLAG
static meas::base::FlagDefinition const FAILURE
double errorDef
"How many sigma the error bars of the non-linear fitter represent" ;
Intermediate base class for algorithms that compute a flux.
void fail(afw::table::SourceRecord &measRecord, meas::base::MeasurementError *error=NULL) const
Intermediate base class for algorithms that compute a centroid.
int maxFnCalls
"Maximum function calls for non-linear fitter; 0 = unlimited" ;
void fail(afw::table::SourceRecord &measRecord, meas::base::MeasurementError *error=NULL) const
DipoleCentroidControl Control
DipoleFluxAlgorithm(Control const &ctrl, std::string const &name, afw::table::Schema &schema, std::string const &doc)
meas::base::FlagHandler _flagHandler
meas::base::CentroidResultKey ResultKey
Tuple type that holds the keys that define a standard centroid algorithm.
float stepSizeCoord
"Default initial step size for coordinates in non-linear fitter" ;
std::pair< double, int > chi2(afw::table::SourceRecord &source, afw::image::Exposure< float > const &exposure, double negCenterX, double negCenterY, double negFlux, double posCenterX, double poCenterY, double posFlux) const
ResultKey const & getPositiveKeys() const
ResultKey const & getPositiveKeys() const
Return the standard centroid keys registered by this algorithm.
afw::table::Key< int > _numPositiveKey
PsfDipoleFlux(PsfDipoleFluxControl const &ctrl, std::string const &name, afw::table::Schema &schema)
static meas::base::FlagDefinition const NEG_FLAG
static meas::base::FlagDefinitionList const & getFlagDefinitions()
static meas::base::FlagDefinition const NEG_FLAG
void measure(afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
Given an image and a pixel position, return a Centroid using a naive 3x3 weighted moment...
PsfDipoleFluxControl Control