LSSTApplications  18.0.0+67,19.0.0+5,19.0.0+54,19.0.0+57,19.0.0+63,19.0.0+9,19.0.0-1-g20d9b18+23,19.0.0-1-g49a97f9+3,19.0.0-1-g5549ca4+4,19.0.0-1-g8c57eb9+23,19.0.0-1-g8e6e14c+13,19.0.0-1-ga72da6b+3,19.0.0-1-gbfe0924+50,19.0.0-1-ge272bc4+23,19.0.0-1-gefe1d0d+36,19.0.0-11-g57ef05f+1,19.0.0-13-g8db0348+4,19.0.0-14-g706b86db4+1,19.0.0-14-ge428dae,19.0.0-15-g557baf8+8,19.0.0-16-gdc8ce7c+1,19.0.0-2-g0d9f9cd+59,19.0.0-2-g260436e+40,19.0.0-2-g9675b69+3,19.0.0-2-g9b11441+48,19.0.0-2-gde8e5e3+3,19.0.0-2-gf01c5b1+1,19.0.0-2-gff6972b+7,19.0.0-3-g27e4659+25,19.0.0-3-g6513920+52,19.0.0-4-gac56cce+1,19.0.0-41-g13db8fbc+1,19.0.0-43-gbcf6a3c,19.0.0-6-gdd6eb13,19.0.0-7-g686a884+4,19.0.0-9-gce87a591+7,w.2020.14
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 
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
PYBIND11_MODULE(imagePca, mod)
Definition: imagePca.cc:63
STL class.
A base class for image defects.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:58