28 #include "ndarray/eigen.h" 40 FlagDefinitionList flagDefinitions;
45 flagDefinitions.add(
"flag_noGoodPixels",
"not enough non-rejected pixels in data to attempt the fit");
47 "flag_edge",
"object was too close to the edge of the image to use the full PSF model");
57 schema, name,
"instFlux derived from linear least-squares fit of PSF model")),
58 _areaKey(schema.addField<float>(name +
"_area",
"effective area of PSF",
"pixel")),
59 _centroidExtractor(schema, name) {
71 geom::Point2D position = _centroidExtractor(measRecord, _flagHandler);
75 if (fitBBox != psfImage->getBBox()) {
80 auto fitRegionSpans = std::make_shared<afw::geom::SpanSet>(fitBBox);
88 fitRegion.setSpans(fitRegion.getSpans()
92 if (fitRegion.getArea() == 0) {
98 auto modelNdArray = fitRegion.getSpans()->flatten(psfImage->getArray(), psfImage->getXY0());
103 auto model = ndarray::asEigenMatrix(modelNdArray);
104 auto data = ndarray::asEigenMatrix(dataNdArray);
105 auto variance = ndarray::asEigenMatrix(varianceNdArray);
106 PsfPixel alpha =
model.squaredNorm();
112 measRecord.
set(_areaKey,
model.sum() / alpha);
116 measRecord.
set(_instFluxResultKey, result);
128 if (flag == PsfFluxAlgorithm::FAILURE)
continue;
129 if (
mapper.getInputSchema().getNames().count(
mapper.getInputSchema().join(
name, flag.
name)) == 0)
132 mapper.getInputSchema().find<afw::table::Flag>(
name +
"_" + flag.
name).key;
std::size_t size() const
return the current size (number of defined elements) of the collection
Defines the fields and offsets for a table.
VariancePtr getVariance() const
Return a (shared_ptr to) the MaskedImage's variance.
std::vector< std::string > badMaskPlanes
"Mask planes that indicate pixels that should be excluded from the fit" ;
static FlagDefinition const NO_GOOD_PIXELS
static FlagDefinitionList const & getFlagDefinitions()
Exception to be thrown when a measurement algorithm encounters a NaN or infinite pixel.
PsfFluxAlgorithm(Control const &ctrl, std::string const &name, afw::table::Schema &schema, std::string const &logName="")
A mapping between the keys of two Schemas, used to copy data between them.
static FlagDefinition const EDGE
Simple class used to define and document flags The name and doc constitute the identity of the FlagDe...
lsst::geom::Point2I getXY0() const
Return the Exposure's origin.
#define LOGL_ERROR(logger, message...)
Log a error-level message using a varargs/printf style interface.
void setValue(afw::table::BaseRecord &record, std::size_t i, bool value) const
Set the flag field corresponding to the given flag index.
meas::base::FluxErrElement instFluxErr
Standard deviation of instFlux in DN.
Exception to be thrown when a measurement algorithm experiences a known failure mode.
lsst::geom::Box2I getBBox(ImageOrigin const origin=PARENT) const
virtual void fail(afw::table::SourceRecord &measRecord, MeasurementError *error=nullptr) const
Handle an exception thrown by the current algorithm by setting flags in the given record...
Exception to be thrown when a measurement algorithm experiences a fatal error.
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
LSST DM logging module built on log4cxx.
A base class for image defects.
MaskedImageT getMaskedImage()
Return the MaskedImage.
math::Kernel::Pixel Pixel
Pixel type of Image returned by computeImage.
static FlagDefinition const FAILURE
std::string getLogName() const
A FunctorKey for FluxResult.
static FlagHandler addFields(afw::table::Schema &schema, std::string const &prefix, FlagDefinitionList const &flagDefs, FlagDefinitionList const &exclDefs=FlagDefinitionList::getEmptyList())
Add Flag fields to a schema, creating a FlagHandler object to manage them.
MaskPtr getMask() const
Return a (shared_ptr to) the MaskedImage's mask.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
void clip(Box2I const &other) noexcept
Shrink this to ensure that other.contains(*this).
void handleFailure(afw::table::BaseRecord &record, MeasurementError const *error=nullptr) const
Handle an expected or unexpected Exception thrown by a measurement algorithm.
void set(Key< T > const &key, U const &value)
Set value of a field for the given key.
Record class that contains measurements made on a single exposure.
std::shared_ptr< lsst::afw::detection::Psf const > getPsf() const
Return the Exposure's Psf object.
meas::base::Flux instFlux
Measured instFlux in DN.
virtual void measure(afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
Called to measure a single child source in an image.
vector-type utility class to build a collection of FlagDefinitions
A polymorphic base class for representing an image's Point Spread Function.
A C++ control class to handle PsfFluxAlgorithm's configuration.
An integer coordinate rectangle.
A reusable result struct for instFlux measurements.