Skip to content

Commit

Permalink
Changes to make this code compatible with the new FlagDefinitions
Browse files Browse the repository at this point in the history
  • Loading branch information
pgee2000 committed Mar 3, 2017
1 parent 019b29b commit 6bfb87f
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 42 deletions.
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

0 comments on commit 6bfb87f

Please sign in to comment.