23 #include "pybind11/pybind11.h"
27 #include "lsst/pex/config/python.h"
32 namespace py = pybind11;
33 using namespace pybind11::literals;
41 using PyCentroidAlgorithm =
42 py::class_<GaussianCentroidAlgorithm, std::shared_ptr<GaussianCentroidAlgorithm>, SimpleAlgorithm>;
43 using PyCentroidControl = py::class_<GaussianCentroidControl>;
44 using PyCentroidTransform =
45 py::class_<GaussianCentroidTransform, std::shared_ptr<GaussianCentroidTransform>, CentroidTransform>;
47 PyCentroidControl declareCentroidControl(py::module & mod) {
48 PyCentroidControl cls(mod,
"GaussianCentroidControl");
50 cls.def(py::init<>());
52 LSST_DECLARE_CONTROL_FIELD(cls, GaussianCentroidControl, doFootprintCheck);
53 LSST_DECLARE_CONTROL_FIELD(cls, GaussianCentroidControl, maxDistToPeak);
58 template <
typename Pixel>
59 void declareFitCentroid(PyCentroidAlgorithm & cls) {
60 cls.def_static(
"fitCentroid", &GaussianCentroidAlgorithm::fitCentroid<Pixel>,
"im"_a,
"x0"_a,
"y0"_a);
63 PyCentroidAlgorithm declareCentroidAlgorithm(py::module & mod) {
64 PyCentroidAlgorithm cls(mod,
"GaussianCentroidAlgorithm");
66 cls.attr(
"FAILURE") = py::cast(GaussianCentroidAlgorithm::FAILURE);
67 cls.attr(
"NO_PEAK") = py::cast(GaussianCentroidAlgorithm::NO_PEAK);
69 cls.def(py::init<GaussianCentroidAlgorithm::Control const &, std::string const &, afw::table::Schema &>(),
70 "ctrl"_a,
"name"_a,
"schema"_a);
72 declareFitCentroid<float>(cls);
73 declareFitCentroid<double>(cls);
75 cls.def(
"measure", &GaussianCentroidAlgorithm::measure,
"measRecord"_a,
"exposure"_a);
76 cls.def(
"fail", &GaussianCentroidAlgorithm::fail,
"measRecord"_a,
"error"_a=
nullptr);
84 py::module::import(
"lsst.afw.table");
85 py::module::import(
"lsst.meas.base.algorithm");
86 py::module::import(
"lsst.meas.base.flagHandler");
87 py::module::import(
"lsst.meas.base.transform");
89 py::module mod(
"gaussianCentroid");
91 auto clsCentroidControl = declareCentroidControl(mod);
92 auto clsCentroidAlgorithm = declareCentroidAlgorithm(mod);
93 PyCentroidTransform clsCentroidTransform(mod,
"GaussianCentroidTransform");
95 clsCentroidAlgorithm.attr(
"Control") = clsCentroidControl;
96 clsCentroidTransform.attr(
"Control") = clsCentroidControl;
98 python::declareAlgorithm<GaussianCentroidAlgorithm, GaussianCentroidControl, GaussianCentroidTransform>(
99 clsCentroidAlgorithm, clsCentroidControl, clsCentroidTransform);
PYBIND11_PLUGIN(algorithm)