24#include "pybind11/pybind11.h"
25#include "pybind11/stl.h"
30#include "ndarray/pybind11.h"
42using namespace pybind11::literals;
49void declareMeasurement(lsst::utils::python::WrapperCollection &wrappers) {
51 [](
auto &mod,
auto &cls) {
52 cls.def(py::init<double, double>(),
"value"_a,
"error"_a);
53 cls.def_readonly(
"value", &Measurement::value);
54 cls.def_readonly(
"error", &Measurement::error);
56 utils::python::addOutputOp(cls,
"__str__");
57 cls.def(
"__repr__", [](Measurement const &self) {
58 std::ostringstream os;
59 os <<
"Measurement(" << self <<
")";
65void declarePhotoCalib(lsst::utils::python::WrapperCollection &wrappers) {
69 [](
auto &mod,
auto &cls) {
71 cls.def(py::init<>());
72 cls.def(py::init<double, double, lsst::geom::Box2I>(),
"calibrationMean"_a,
73 "calibrationErr"_a = 0.0,
"bbox"_a = lsst::geom::Box2I());
74 cls.def(py::init<std::shared_ptr<afw::math::BoundedField>, double>(),
"calibration"_a,
75 "calibrationErr"_a = 0.0);
76 cls.def(py::init<double, double, std::shared_ptr<afw::math::BoundedField>, bool>(),
77 "calibrationMean"_a,
"calibrationErr"_a,
"calibration"_a,
"isConstant"_a);
79 table::io::python::addPersistableMethods<PhotoCalib>(cls);
82 cls.def(
"instFluxToNanojansky",
83 (double (PhotoCalib::*)(double, lsst::geom::Point<double, 2> const &) const) &
84 PhotoCalib::instFluxToNanojansky,
85 "instFlux"_a,
"point"_a);
86 cls.def(
"instFluxToNanojansky",
87 (double (PhotoCalib::*)(double) const) & PhotoCalib::instFluxToNanojansky,
90 cls.def(
"instFluxToNanojansky",
91 (Measurement(PhotoCalib::*)(double, double, lsst::geom::Point<double, 2> const &)
93 PhotoCalib::instFluxToNanojansky,
94 "instFlux"_a,
"instFluxErr"_a,
"point"_a);
95 cls.def(
"instFluxToNanojansky",
96 (Measurement(PhotoCalib::*)(double, double) const) & PhotoCalib::instFluxToNanojansky,
97 "instFlux"_a,
"instFluxErr"_a);
99 cls.def(
"instFluxToNanojansky",
100 (Measurement(PhotoCalib::*)(afw::table::SourceRecord const &, std::string const &)
102 PhotoCalib::instFluxToNanojansky,
103 "sourceRecord"_a,
"instFluxField"_a);
105 cls.def(
"instFluxToNanojansky",
106 (ndarray::Array<double, 2, 2>(PhotoCalib::*)(afw::table::SourceCatalog const &,
107 std::string const &) const) &
108 PhotoCalib::instFluxToNanojansky,
109 "sourceCatalog"_a,
"instFluxField"_a);
111 cls.def(
"instFluxToNanojansky",
112 (void (PhotoCalib::*)(afw::table::SourceCatalog &, std::string const &,
113 std::string const &) const) &
114 PhotoCalib::instFluxToNanojansky,
115 "sourceCatalog"_a,
"instFluxField"_a,
"outField"_a);
118 cls.def(
"instFluxToMagnitude",
119 (double (PhotoCalib::*)(double, lsst::geom::Point<double, 2> const &) const) &
120 PhotoCalib::instFluxToMagnitude,
121 "instFlux"_a,
"point"_a);
122 cls.def(
"instFluxToMagnitude",
123 (double (PhotoCalib::*)(double) const) & PhotoCalib::instFluxToMagnitude,
126 cls.def(
"instFluxToMagnitude",
127 (Measurement(PhotoCalib::*)(double, double, lsst::geom::Point<double, 2> const &)
129 PhotoCalib::instFluxToMagnitude,
130 "instFlux"_a,
"instFluxErr"_a,
"point"_a);
131 cls.def(
"instFluxToMagnitude",
132 (Measurement(PhotoCalib::*)(double, double) const) & PhotoCalib::instFluxToMagnitude,
133 "instFlux"_a,
"instFluxErr"_a);
135 cls.def(
"instFluxToMagnitude",
136 (Measurement(PhotoCalib::*)(afw::table::SourceRecord const &, std::string const &)
138 PhotoCalib::instFluxToMagnitude,
139 "sourceRecord"_a,
"instFluxField"_a);
141 cls.def(
"instFluxToMagnitude",
142 (ndarray::Array<double, 2, 2>(PhotoCalib::*)(afw::table::SourceCatalog const &,
143 std::string const &) const) &
144 PhotoCalib::instFluxToMagnitude,
145 "sourceCatalog"_a,
"instFluxField"_a);
147 cls.def(
"instFluxToMagnitude",
148 (void (PhotoCalib::*)(afw::table::SourceCatalog &, std::string const &,
149 std::string const &) const) &
150 PhotoCalib::instFluxToMagnitude,
151 "sourceCatalog"_a,
"instFluxField"_a,
"outField"_a);
154 cls.def(
"magnitudeToInstFlux",
155 py::overload_cast<double, lsst::geom::Point<double, 2> const &>(
156 &PhotoCalib::magnitudeToInstFlux, py::const_),
157 "instFlux"_a,
"point"_a);
158 cls.def(
"magnitudeToInstFlux",
159 py::overload_cast<double>(&PhotoCalib::magnitudeToInstFlux, py::const_),
163 cls.def(
"getCalibrationMean", &PhotoCalib::getCalibrationMean);
164 cls.def(
"getCalibrationErr", &PhotoCalib::getCalibrationErr);
165 cls.def_property_readonly(
"_isConstant", &PhotoCalib::isConstant);
166 cls.def(
"getInstFluxAtZeroMagnitude", &PhotoCalib::getInstFluxAtZeroMagnitude);
167 cls.def(
"getLocalCalibration", &PhotoCalib::getLocalCalibration,
"point"_a);
169 cls.def(
"computeScaledCalibration", &PhotoCalib::computeScaledCalibration);
170 cls.def(
"computeScalingTo", &PhotoCalib::computeScalingTo);
172 cls.def(
"calibrateImage", &PhotoCalib::calibrateImage,
"maskedImage"_a,
173 "includeScaleUncertainty"_a = true);
175 cls.def(
"calibrateCatalog",
176 py::overload_cast<afw::table::SourceCatalog const &,
177 std::vector<std::string> const &>(&PhotoCalib::calibrateCatalog,
179 "maskedImage"_a,
"fluxFields"_a);
180 cls.def(
"calibrateCatalog",
181 py::overload_cast<afw::table::SourceCatalog const &>(&PhotoCalib::calibrateCatalog,
186 cls.def(
"__eq__", &PhotoCalib::operator==, py::is_operator());
187 cls.def(
"__ne__", &PhotoCalib::operator!=, py::is_operator());
188 utils::python::addOutputOp(cls,
"__str__");
189 cls.def(
"__repr__", [](PhotoCalib const &self) {
190 std::ostringstream os;
191 os <<
"PhotoCalib(" << self <<
")";
197void declareCalib(lsst::utils::python::WrapperCollection &wrappers) {
198 wrappers.wrap([](
auto &mod) {
200 mod.def(
"makePhotoCalibFromMetadata",
201 py::overload_cast<daf::base::PropertySet &, bool>(makePhotoCalibFromMetadata),
"metadata"_a,
203 mod.def(
"makePhotoCalibFromCalibZeroPoint",
204 py::overload_cast<double, double>(makePhotoCalibFromCalibZeroPoint),
"instFluxMag0"_a,
205 "instFluxMag0Err"_a =
false);
210 wrappers.addInheritanceDependency(
"lsst.afw.typehandling");
211 declareMeasurement(wrappers);
212 declarePhotoCalib(wrappers);
213 declareCalib(wrappers);
Implementation of the Photometric Calibration class.
void wrapPhotoCalib(lsst::utils::python::WrapperCollection &)