Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes to make this code compatible with the new FlagDefinitions #8

Merged
merged 3 commits into from
Mar 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
25 changes: 11 additions & 14 deletions include/lsst/meas/extensions/shapeHSM/HsmMomentsControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,16 @@ class HsmPsfMomentsControl {
/// Use this to consolidate common code for HsmSourceMoments and HsmPsfMoments
class HsmMomentsAlgorithm : public base::SimpleAlgorithm {
public:
enum {
FAILURE = base::FlagHandler::FAILURE,
NO_PIXELS,
NOT_CONTAINED,
GALSIM,
N_FLAGS
};

// Structures and routines to manage flaghandler
static base::FlagDefinitionList const & getFlagDefinitions();
static base::FlagDefinition const FAILURE;
static base::FlagDefinition const NO_PIXELS;
static base::FlagDefinition const NOT_CONTAINED;
static base::FlagDefinition const PARENT_SOURCE;
static base::FlagDefinition const GALSIM;

typedef HsmMomentsControl Control;

protected:
HsmMomentsAlgorithm(std::string const & name, afw::table::Schema & schema, char const* doc) :
Expand All @@ -81,13 +84,7 @@ class HsmMomentsAlgorithm : public base::SimpleAlgorithm {
),
_centroidExtractor(schema, name)
{
static std::array<base::FlagDefinition, N_FLAGS> const flagDefs = {{
{"flag", "general failure flag, set if anything went wrong"},
{"flag_no_pixels", "no pixels to measure"},
{"flag_not_contained", "center not contained in footprint bounding box"},
{"flag_galsim", "GalSim error"},
}};
_flagHandler = base::FlagHandler::addFields(schema, name, flagDefs.begin(), flagDefs.end());
_flagHandler = base::FlagHandler::addFields(schema, name, getFlagDefinitions());
}

/// Calculate moments
Expand Down
16 changes: 8 additions & 8 deletions include/lsst/meas/extensions/shapeHSM/HsmShapeControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,14 @@ class HsmShapeRegaussControl : public HsmShapeControl {
*/
class HsmShapeAlgorithm : public base::SimpleAlgorithm {
public:
enum {
FAILURE=base::FlagHandler::FAILURE,
NO_PIXELS,
NOT_CONTAINED,
PARENT_SOURCE,
GALSIM,
N_FLAGS
};

// Structures and routines to manage flaghandler
static base::FlagDefinitionList const & getFlagDefinitions();
static base::FlagDefinition const FAILURE;
static base::FlagDefinition const NO_PIXELS;
static base::FlagDefinition const NOT_CONTAINED;
static base::FlagDefinition const PARENT_SOURCE;
static base::FlagDefinition const GALSIM;

/// A typedef to the Control object for this algorithm, defined above.
/// The control object contains the configuration parameters for this algorithm.
Expand Down
24 changes: 19 additions & 5 deletions src/HsmMoments.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,22 @@
#include "lsst/meas/extensions/shapeHSM/HsmAdapter.h"
#include "lsst/meas/extensions/shapeHSM/HsmMomentsControl.h"

namespace {
lsst::meas::base::FlagDefinitionList flagDefinitions;
} // end anonymous

namespace lsst { namespace meas { namespace extensions { namespace shapeHSM {

base::FlagDefinition const HsmMomentsAlgorithm::FAILURE = flagDefinitions.addFailureFlag("general failure flag, set if anything went wrong");
base::FlagDefinition const HsmMomentsAlgorithm::NO_PIXELS = flagDefinitions.add("flag_no_pixels", "no pixels to measure");
base::FlagDefinition const HsmMomentsAlgorithm::NOT_CONTAINED = flagDefinitions.add("flag_not_contained", "center not contained in footprint bounding box");
base::FlagDefinition const HsmMomentsAlgorithm::PARENT_SOURCE = flagDefinitions.add("flag_parent_source", "parent source, ignored");
base::FlagDefinition const HsmMomentsAlgorithm::GALSIM("flag_galsim", "GalSim failure");

base::FlagDefinitionList const & HsmMomentsAlgorithm::getFlagDefinitions() {
return flagDefinitions;
}

template<typename PixelT>
void HsmMomentsAlgorithm::calculate(
afw::table::SourceRecord& source,
Expand All @@ -57,7 +71,7 @@ void HsmMomentsAlgorithm::calculate(
width, 1.0e-6,
galsim::Position<double>(center.getX(), center.getY()));
} catch (galsim::hsm::HSMError const& e) {
throw LSST_EXCEPT(base::MeasurementError, e.what(), GALSIM);
throw LSST_EXCEPT(base::MeasurementError, e.what(), GALSIM.number);
}

afw::geom::ellipses::DeterminantRadius const radius(shape.moments_sigma);
Expand Down Expand Up @@ -96,15 +110,15 @@ void HsmSourceMomentsAlgorithm::measure(
if (bbox.getArea() == 0) {
throw LSST_EXCEPT(
base::MeasurementError,
_flagHandler.getDefinition(NO_PIXELS).doc,
NO_PIXELS
NO_PIXELS.doc,
NO_PIXELS.number
);
}
if (!bbox.contains(afw::geom::Point2I(center))) {
throw LSST_EXCEPT(
base::MeasurementError,
_flagHandler.getDefinition(NOT_CONTAINED).doc,
NOT_CONTAINED
NOT_CONTAINED.doc,
NOT_CONTAINED.number
);
}

Expand Down
37 changes: 22 additions & 15 deletions src/HsmShape.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@

namespace lsst { namespace meas { namespace extensions { namespace shapeHSM {

namespace {
lsst::meas::base::FlagDefinitionList flagDefinitions;
} // end anonymous

base::FlagDefinition const HsmShapeAlgorithm::FAILURE = flagDefinitions.addFailureFlag("general failure flag, set if anything went wrong");
base::FlagDefinition const HsmShapeAlgorithm::NO_PIXELS = flagDefinitions.add("flag_no_pixels", "no pixels to measure");
base::FlagDefinition const HsmShapeAlgorithm::NOT_CONTAINED = flagDefinitions.add("flag_not_contained", "center not contained in footprint bounding box");
base::FlagDefinition const HsmShapeAlgorithm::PARENT_SOURCE = flagDefinitions.add("flag_parent_source", "parent source, ignored");
base::FlagDefinition const HsmShapeAlgorithm::GALSIM = flagDefinitions.add("flag_galsim", "GalSim failure");

base::FlagDefinitionList const & HsmShapeAlgorithm::getFlagDefinitions() {
return flagDefinitions;
}

namespace {

/// Return appropriate symbol for a measurement type
Expand Down Expand Up @@ -114,14 +128,7 @@ HsmShapeAlgorithm::HsmShapeAlgorithm(
_centroidExtractor(schema, name),
_hasDeblendKey(_ctrl.deblendNChild.size() > 0)
{
static std::array<base::FlagDefinition,N_FLAGS> const flagDefs = {{
{"flag", "general failure flag"},
{"flag_no_pixels", "no pixels to measure"},
{"flag_not_contained", "center not contained in footprint bounding box"},
{"flag_parent_source", "parent source, ignored"},
{"flag_galsim", "GalSim failure"},
}};
_flagHandler = base::FlagHandler::addFields(schema, name, flagDefs.begin(), flagDefs.end());
_flagHandler = base::FlagHandler::addFields(schema, name, getFlagDefinitions());

if (_hasDeblendKey) {
_deblendKey = schema[ctrl.deblendNChild];
Expand All @@ -134,7 +141,7 @@ void HsmShapeAlgorithm::measure(
) const {
afw::geom::Point2D center = _centroidExtractor(source, _flagHandler);
if (_hasDeblendKey && source.get(_deblendKey) > 0) {
throw LSST_EXCEPT(base::MeasurementError, "Ignoring parent source", PARENT_SOURCE);
throw LSST_EXCEPT(base::MeasurementError, "Ignoring parent source", PARENT_SOURCE.number);
}

std::vector<std::string> const & badMaskPlanes = _ctrl.badMaskPlanes;
Expand All @@ -145,15 +152,15 @@ void HsmShapeAlgorithm::measure(
if (bbox.getArea() == 0) {
throw LSST_EXCEPT(
base::MeasurementError,
_flagHandler.getDefinition(NO_PIXELS).doc,
NO_PIXELS
NO_PIXELS.doc,
NO_PIXELS.number
);
}
if (!bbox.contains(afw::geom::Point2I(center))) {
throw LSST_EXCEPT(
base::MeasurementError,
_flagHandler.getDefinition(NOT_CONTAINED).doc,
NOT_CONTAINED
NOT_CONTAINED.doc,
NOT_CONTAINED.number
);
}

Expand Down Expand Up @@ -188,7 +195,7 @@ void HsmShapeAlgorithm::measure(
2.5*psfSigma, psfSigma, 1.0e-6,
galsim::Position<double>(center.getX(), center.getY()));
} catch (galsim::hsm::HSMError const& e) {
throw LSST_EXCEPT(base::MeasurementError, e.what(), GALSIM);
throw LSST_EXCEPT(base::MeasurementError, e.what(), GALSIM.number);
}

assert(shape.meas_type[0] == measTypeSymbol(_measType));
Expand All @@ -207,7 +214,7 @@ void HsmShapeAlgorithm::measure(
assert(false);
}
source.set(_resolutionKey, shape.resolution_factor);
_flagHandler.setValue(source, FAILURE, shape.correction_status != 0);
_flagHandler.setValue(source, FAILURE.number, shape.correction_status != 0);
}

void HsmShapeAlgorithm::fail(afw::table::SourceRecord & measRecord, base::MeasurementError * error) const {
Expand Down