22 #include "pybind11/pybind11.h"
23 #include "pybind11/stl.h"
25 #include "numpy/arrayobject.h"
26 #include "ndarray/pybind11.h"
28 #include "lsst/meas/extensions/psfex/psf.hh"
30 namespace py = pybind11;
31 using namespace pybind11::literals;
35 namespace extensions {
39 py::module mod(
"psf");
41 if (_import_array() < 0) {
42 PyErr_SetString(PyExc_ImportError,
"numpy.core.multiarray failed to import");
46 py::class_<Context> clsContext(mod,
"Context");
48 clsContext.attr(
"KEEPHIDDEN") = py::cast(static_cast<int>(Context::KEEPHIDDEN));
49 clsContext.attr(
"REMOVEHIDDEN") = py::cast(static_cast<int>(Context::REMOVEHIDDEN));
51 clsContext.def(py::init<std::vector<std::string>
const&, std::vector<int>
const&, std::vector<int>
const&,
bool>(),
52 "names"_a,
"group"_a,
"degree"_a,
"pcexflag"_a);
54 clsContext.def(
"getName", &Context::getName);
55 clsContext.def(
"getNpc", &Context::getNpc);
56 clsContext.def(
"getPcflag", &Context::getPcflag);
57 clsContext.def(
"getPc", &Context::getPc);
59 py::class_<Sample> clsSample(mod,
"Sample");
61 clsSample.def(
"getCatindex", &Sample::getCatindex);
62 clsSample.def(
"setCatindex", &Sample::setCatindex);
63 clsSample.def(
"getObjindex", &Sample::getObjindex);
64 clsSample.def(
"setObjindex", &Sample::setObjindex);
65 clsSample.def(
"getExtindex", &Sample::getExtindex);
66 clsSample.def(
"setExtindex", &Sample::setExtindex);
67 clsSample.def(
"setVig", &Sample::setVig);
68 clsSample.def(
"setNorm", &Sample::setNorm);
69 clsSample.def(
"setBacknoise2", &Sample::setBacknoise2);
70 clsSample.def(
"setGain", &Sample::setGain);
71 clsSample.def(
"setX", &Sample::setX);
72 clsSample.def(
"setY", &Sample::setY);
73 clsSample.def(
"setContext", &Sample::setContext);
74 clsSample.def(
"setFluxrad", &Sample::setFluxrad);
75 clsSample.def(
"getVig", &Sample::getVig);
76 clsSample.def(
"getVigResi", &Sample::getVigResi);
77 clsSample.def(
"getVigChi", &Sample::getVigChi);
78 clsSample.def(
"getVigWeight", &Sample::getVigWeight);
79 clsSample.def(
"getXY", &Sample::getXY);
80 clsSample.def(
"getNorm", &Sample::getNorm);
82 py::class_<Set, std::shared_ptr<Set>> clsSet(mod,
"Set");
84 clsSet.def(py::init<Context &>());
86 clsSet.def(
"newSample", &Set::newSample);
87 clsSet.def(
"trimMemory", &Set::trimMemory);
88 clsSet.def(
"getFwhm", &Set::getFwhm);
89 clsSet.def(
"setFwhm", &Set::setFwhm);
90 clsSet.def(
"getNcontext", &Set::getNcontext);
91 clsSet.def(
"getNsample", &Set::getNsample);
92 clsSet.def(
"getContextOffset", &Set::getContextOffset);
93 clsSet.def(
"setContextOffset", &Set::setContextOffset);
94 clsSet.def(
"getContextScale", &Set::getContextScale);
95 clsSet.def(
"setContextScale", &Set::setContextScale);
96 clsSet.def(
"getRecentroid", &Set::getRecentroid);
97 clsSet.def(
"setRecentroid", &Set::setRecentroid);
98 clsSet.def(
"setVigSize", &Set::setVigSize);
99 clsSet.def(
"finiSample", &Set::finiSample);
100 clsSet.def(
"empty", &Set::empty);
101 clsSet.def(
"getContextNames", &Set::getContextNames);
102 clsSet.def(
"setContextname", &Set::setContextname);
103 clsSet.def(
"setBadFlags", &Set::setBadFlags);
104 clsSet.def(
"getBadFlags", &Set::getBadFlags);
105 clsSet.def(
"setBadSN", &Set::setBadSN);
106 clsSet.def(
"getBadSN", &Set::getBadSN);
107 clsSet.def(
"setBadFrmin", &Set::setBadFrmin);
108 clsSet.def(
"getBadFrmin", &Set::getBadFrmin);
109 clsSet.def(
"setBadFrmax", &Set::setBadFrmax);
110 clsSet.def(
"getBadFrmax", &Set::getBadFrmax);
111 clsSet.def(
"setBadElong", &Set::setBadElong);
112 clsSet.def(
"getBadElong", &Set::getBadElong);
113 clsSet.def(
"setBadPix", &Set::setBadPix);
114 clsSet.def(
"getBadPix", &Set::getBadPix);
115 clsSet.def(
"getSample", &Set::getSample);
117 py::class_<Psf> clsPsf(mod,
"Psf");
119 clsPsf.def(py::init<>());
121 clsPsf.def(
"getLoc", &Psf::getLoc);
122 clsPsf.def(
"getResi", &Psf::getResi);
123 clsPsf.def(
"build", &Psf::build,
124 "x"_a,
"y"_a,
"other"_a=std::vector<double>());
125 clsPsf.def(
"clip", &Psf::clip);