LSSTApplications  20.0.0
LSSTDataManagementBasePackage
imagePca.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008-2017 AURA/LSST.
4  *
5  * This product includes software developed by the
6  * LSST Project (http://www.lsst.org/).
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the LSST License Statement and
19  * the GNU General Public License along with this program. If not,
20  * see <https://www.lsstcorp.org/LegalNotices/>.
21  */
22 
23 #include "pybind11/pybind11.h"
24 #include "pybind11/stl.h"
25 
27 
28 namespace py = pybind11;
29 
30 using namespace py::literals;
31 
32 namespace lsst {
33 namespace afw {
34 namespace image {
35 
36 namespace {
37 
38 template <typename ImageT>
39 static void declareImagePca(py::module &mod, std::string const &suffix) {
40  py::class_<ImagePca<ImageT>, std::shared_ptr<ImagePca<ImageT>>> cls(mod, ("ImagePca" + suffix).c_str());
41 
42  cls.def(py::init<bool>(), "constantWeight"_a = true);
43 
44  cls.def("addImage", &ImagePca<ImageT>::addImage, "img"_a, "flux"_a = 0.0);
45  cls.def("getImageList", &ImagePca<ImageT>::getImageList);
46  cls.def("getDimensions", &ImagePca<ImageT>::getDimensions);
47  cls.def("getMean", &ImagePca<ImageT>::getMean);
48  cls.def("analyze", &ImagePca<ImageT>::analyze);
49  cls.def("updateBadPixels", &ImagePca<ImageT>::updateBadPixels);
50  cls.def("getEigenValues", &ImagePca<ImageT>::getEigenValues);
51  cls.def("getEigenImages", &ImagePca<ImageT>::getEigenImages);
52 }
53 
54 template <typename Image1T, typename Image2T>
55 static void declareInnerProduct(py::module &mod) {
56  mod.def("innerProduct",
57  (double (*)(Image1T const &, Image2T const &, int const))innerProduct<Image1T, Image2T>, "lhs"_a,
58  "rhs"_a, "border"_a = 0);
59 }
60 
61 } // namespace
62 
63 PYBIND11_MODULE(imagePca, mod) {
64  declareImagePca<Image<int>>(mod, "I");
65  declareImagePca<Image<float>>(mod, "F");
66  declareImagePca<Image<double>>(mod, "D");
67  declareImagePca<Image<std::uint16_t>>(mod, "U");
68  declareImagePca<Image<std::uint64_t>>(mod, "L");
69  declareImagePca<MaskedImage<int>>(mod, "MI");
70  declareImagePca<MaskedImage<float>>(mod, "MF");
71  declareImagePca<MaskedImage<double>>(mod, "MD");
72  declareImagePca<MaskedImage<std::uint16_t>>(mod, "MU");
73  declareImagePca<MaskedImage<std::uint64_t>>(mod, "ML");
74 
75  declareInnerProduct<Image<int>, Image<int>>(mod);
76  declareInnerProduct<Image<float>, Image<float>>(mod);
77  declareInnerProduct<Image<double>, Image<double>>(mod);
78  declareInnerProduct<Image<std::uint16_t>, Image<std::uint16_t>>(mod);
79  declareInnerProduct<Image<std::uint64_t>, Image<std::uint64_t>>(mod);
80 
81  declareInnerProduct<Image<float>, Image<double>>(mod);
82  declareInnerProduct<Image<double>, Image<float>>(mod);
83 }
84 }
85 }
86 } // lsst::afw::image
lsst::afw::image
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
Definition: imageAlgorithm.dox:1
std::string
STL class.
std::shared_ptr
STL class.
lsst::afw
Definition: imageAlgorithm.dox:1
lsst::afw::image::PYBIND11_MODULE
PYBIND11_MODULE(imagePca, mod)
Definition: imagePca.cc:63
lsst::afw::geom.transform.transformContinued.cls
cls
Definition: transformContinued.py:33
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
pybind11
Definition: _GenericMap.cc:40
lsst::afw::image::Image
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:58
lsst::meas::modelfit.psf.psfContinued.module
module
Definition: psfContinued.py:42
ImagePca.h