23 #include "pybind11/pybind11.h"
24 #include "pybind11/stl.h"
28 #include "lsst/pex/config/python.h"
34 namespace py = pybind11;
35 using namespace pybind11::literals;
43 using PyFluxAlgorithm = py::class_<PsfFluxAlgorithm, std::shared_ptr<PsfFluxAlgorithm>, SimpleAlgorithm>;
44 using PyFluxControl = py::class_<PsfFluxControl>;
45 using PyFluxTransform = py::class_<PsfFluxTransform, std::shared_ptr<PsfFluxTransform>, BaseTransform>;
47 PyFluxControl declareFluxControl(py::module &mod) {
48 PyFluxControl cls(mod,
"PsfFluxControl");
50 LSST_DECLARE_CONTROL_FIELD(cls, PsfFluxControl, badMaskPlanes);
52 cls.def(py::init<>());
57 PyFluxAlgorithm declareFluxAlgorithm(py::module &mod) {
58 PyFluxAlgorithm cls(mod,
"PsfFluxAlgorithm");
60 cls.attr(
"FAILURE") = py::cast(PsfFluxAlgorithm::FAILURE);
61 cls.attr(
"NO_GOOD_PIXELS") = py::cast(PsfFluxAlgorithm::NO_GOOD_PIXELS);
62 cls.attr(
"EDGE") = py::cast(PsfFluxAlgorithm::EDGE);
64 cls.def(py::init<PsfFluxAlgorithm::Control const &, std::string const &, afw::table::Schema &>(),
65 "ctrl"_a,
"name"_a,
"schema"_a);
67 cls.def(py::init<PsfFluxAlgorithm::Control
const &, std::string
const &, afw::table::Schema &,
68 std::string
const &>(),
69 "ctrl"_a,
"name"_a,
"schema"_a,
"logName"_a);
73 PyFluxTransform declareFluxTransform(py::module &mod) {
74 PyFluxTransform cls(mod,
"PsfFluxTransform");
76 cls.def(py::init<PsfFluxTransform::Control const &, std::string const &, afw::table::SchemaMapper &>(),
77 "ctrl"_a,
"name"_a,
"mapper"_a);
85 py::module::import(
"lsst.afw.table");
86 py::module::import(
"lsst.meas.base.algorithm");
87 py::module::import(
"lsst.meas.base.flagHandler");
88 py::module::import(
"lsst.meas.base.fluxUtilities");
89 py::module::import(
"lsst.meas.base.transform");
91 py::module mod(
"psfFlux");
93 auto clsFluxControl = declareFluxControl(mod);
94 auto clsFluxAlgorithm = declareFluxAlgorithm(mod);
95 auto clsFluxTransform = declareFluxTransform(mod);
97 clsFluxAlgorithm.attr(
"Control") = clsFluxControl;
98 clsFluxTransform.attr(
"Control") = clsFluxControl;
100 python::declareAlgorithm<PsfFluxAlgorithm, PsfFluxControl, PsfFluxTransform>(
101 clsFluxAlgorithm, clsFluxControl, clsFluxTransform);
PYBIND11_PLUGIN(algorithm)