23 #include "pybind11/pybind11.h" 24 #include "pybind11/stl.h" 28 #include "lsst/pex/config/python.h" 34 namespace py = pybind11;
43 using PyFluxAlgorithm =
44 py::class_<ApertureFluxAlgorithm, std::shared_ptr<ApertureFluxAlgorithm>, SimpleAlgorithm>;
45 using PyFluxControl = py::class_<ApertureFluxControl>;
46 using PyFluxResult = py::class_<ApertureFluxResult, std::shared_ptr<ApertureFluxResult>, FluxResult>;
47 using PyFluxTransform =
48 py::class_<ApertureFluxTransform, std::shared_ptr<ApertureFluxTransform>,
BaseTransform>;
50 PyFluxControl declareFluxControl(py::module &mod) {
51 PyFluxControl cls(mod,
"ApertureFluxControl");
53 LSST_DECLARE_CONTROL_FIELD(cls, ApertureFluxControl, radii);
54 LSST_DECLARE_CONTROL_FIELD(cls, ApertureFluxControl, maxSincRadius);
55 LSST_DECLARE_CONTROL_FIELD(cls, ApertureFluxControl, shiftKernel);
57 cls.def(py::init<>());
62 template <
typename Image,
class PyClass>
63 void declareComputeFluxes(PyClass &cls) {
64 namespace afwEllipses = lsst::afw::geom::ellipses;
66 using Result = ApertureFluxAlgorithm::Result;
68 cls.def_static(
"computeSincFlux",
69 (Result(*)(Image
const &, afwEllipses::Ellipse
const &,
Control const &)) &
70 ApertureFluxAlgorithm::computeSincFlux,
71 "image"_a,
"ellipse"_a,
"ctrl"_a =
Control());
72 cls.def_static(
"computeNaiveFlux",
73 (Result(*)(Image
const &, afwEllipses::Ellipse
const &,
Control const &)) &
74 ApertureFluxAlgorithm::computeNaiveFlux,
75 "image"_a,
"ellipse"_a,
"ctrl"_a =
Control());
76 cls.def_static(
"computeFlux", (Result(*)(Image
const &, afwEllipses::Ellipse
const &,
Control const &)) &
77 ApertureFluxAlgorithm::computeFlux,
78 "image"_a,
"ellipse"_a,
"ctrl"_a =
Control());
81 PyFluxAlgorithm declareFluxAlgorithm(py::module &mod) {
82 PyFluxAlgorithm cls(mod,
"ApertureFluxAlgorithm");
84 cls.attr(
"FAILURE") = py::cast(ApertureFluxAlgorithm::FAILURE);
85 cls.attr(
"APERTURE_TRUNCATED") = py::cast(ApertureFluxAlgorithm::APERTURE_TRUNCATED);
86 cls.attr(
"SINC_COEFFS_TRUNCATED") = py::cast(ApertureFluxAlgorithm::SINC_COEFFS_TRUNCATED);
90 declareComputeFluxes<lsst::afw::image::Image<double>>(cls);
91 declareComputeFluxes<lsst::afw::image::MaskedImage<double>>(cls);
92 declareComputeFluxes<lsst::afw::image::Image<float>>(cls);
93 declareComputeFluxes<lsst::afw::image::MaskedImage<float>>(cls);
95 cls.def(
"measure", &ApertureFluxAlgorithm::measure,
"measRecord"_a,
"exposure"_a);
96 cls.def(
"fail", &ApertureFluxAlgorithm::fail,
"measRecord"_a,
"error"_a =
nullptr);
97 cls.def_static(
"makeFieldPrefix", &ApertureFluxAlgorithm::makeFieldPrefix,
"name"_a,
"radius"_a);
102 void declareFluxResult(py::module &mod) {
103 PyFluxResult cls(mod,
"ApertureFluxResult");
105 cls.def(
"getFlag", (
bool (ApertureFluxResult::*)(
unsigned int)
const) & ApertureFluxResult::getFlag,
108 (
bool (ApertureFluxResult::*)(std::string
const &name)
const) & ApertureFluxResult::getFlag,
110 cls.def(
"setFlag", &ApertureFluxResult::setFlag,
"index"_a,
"value"_a);
111 cls.def(
"unsetFlag", &ApertureFluxResult::unsetFlag,
"index"_a);
114 PyFluxTransform declareFluxTransform(py::module &mod) {
115 PyFluxTransform cls(mod,
"ApertureFluxTransform");
118 afw::table::SchemaMapper &>(),
119 "ctrl"_a,
"name"_a,
"mapper"_a);
121 cls.def(
"__call__", &ApertureFluxTransform::operator(),
"inputCatalog"_a,
"outputCatalog"_a,
"wcs"_a,
130 py::module::import(
"lsst.afw.geom");
131 py::module::import(
"lsst.afw.image");
132 py::module::import(
"lsst.afw.table");
133 py::module::import(
"lsst.meas.base.algorithm");
134 py::module::import(
"lsst.meas.base.flagHandler");
135 py::module::import(
"lsst.meas.base.fluxUtilities");
136 py::module::import(
"lsst.meas.base.transform");
138 py::module mod(
"apertureFlux");
140 auto clsFluxControl = declareFluxControl(mod);
141 auto clsFluxAlgorithm = declareFluxAlgorithm(mod);
142 declareFluxResult(mod);
143 auto clsFluxTransform = declareFluxTransform(mod);
145 clsFluxAlgorithm.attr(
"Control") = clsFluxControl;
147 clsFluxTransform.attr(
"Control") = clsFluxControl;
149 python::declareAlgorithm<ApertureFluxAlgorithm, ApertureFluxControl, ApertureFluxTransform>(
150 clsFluxAlgorithm, clsFluxControl, clsFluxTransform);
PYBIND11_PLUGIN(apertureFlux)