LSST Applications  21.0.0+c4f5df5339,21.0.0+e70536a077,21.0.0-1-ga51b5d4+7c60f8a6ea,21.0.0-10-gcf60f90+74aa0801fd,21.0.0-12-g63909ac9+643a1044a5,21.0.0-15-gedb9d5423+1041c3824f,21.0.0-2-g103fe59+a356b2badb,21.0.0-2-g1367e85+6d3f3f41db,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g5242d73+6d3f3f41db,21.0.0-2-g7f82c8f+8d7c04eab9,21.0.0-2-g8f08a60+9c9a9cfcc8,21.0.0-2-ga326454+8d7c04eab9,21.0.0-2-gde069b7+bedfc5e1fb,21.0.0-2-gecfae73+6cb6558258,21.0.0-2-gfc62afb+6d3f3f41db,21.0.0-3-g21c7a62+f6e98b25aa,21.0.0-3-g357aad2+bd62456bea,21.0.0-3-g4be5c26+6d3f3f41db,21.0.0-3-g65f322c+03a4076c01,21.0.0-3-g7d9da8d+c4f5df5339,21.0.0-3-gaa929c8+c6b98066dc,21.0.0-3-gc44e71e+a26d5c1aea,21.0.0-3-ge02ed75+04b527a9d5,21.0.0-35-g64f566ff+b27e5ef93e,21.0.0-4-g591bb35+04b527a9d5,21.0.0-4-g88306b8+8773047b2e,21.0.0-4-gc004bbf+80a0b7acb7,21.0.0-4-gccdca77+a5c54364a0,21.0.0-4-ge8fba5a+ccfc328107,21.0.0-5-gdf36809+87b8d260e6,21.0.0-6-g00874e7+7eeda2b6ba,21.0.0-6-g2d4f3f3+e70536a077,21.0.0-6-g4e60332+04b527a9d5,21.0.0-6-g5ef7dad+f53629abd8,21.0.0-7-gc8ca178+b63e69433b,21.0.0-8-gfbe0b4b+c6b98066dc,w.2021.06
LSST Data Management Base Package
background.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008-2016 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/operators.h>
25 #include <pybind11/stl.h>
26 
27 #include "lsst/afw/image/Image.h"
30 
31 namespace py = pybind11;
32 
33 using namespace py::literals;
34 
35 namespace lsst {
36 namespace afw {
37 namespace math {
38 
39 namespace {
40 template <typename ImageT>
41 void declareMakeBackground(py::module &mod) {
42  mod.def("makeBackground", makeBackground<ImageT>, "img"_a, "bgCtrl"_a);
43 }
44 
45 template <typename PixelT, typename PyClass>
46 void declareGetImage(PyClass &cls, std::string const &suffix) {
47  cls.def(("getImage" + suffix).c_str(),
49  Interpolate::Style const, UndersampleStyle const) const) &
50  Background::getImage<PixelT>,
51  "interpStyle"_a, "undersampleStyle"_a = THROW_EXCEPTION);
52  cls.def(("getImage" + suffix).c_str(),
54  std::string const &) const) &
55  Background::getImage<PixelT>,
56  "interpStyle"_a, "undersampleStyle"_a = "THROW_EXCEPTION");
57  cls.def(("getImage" + suffix).c_str(),
59  lsst::geom::Box2I const &, Interpolate::Style const, UndersampleStyle const) const) &
60  Background::getImage<PixelT>,
61  "bbox"_a, "interpStyle"_a, "undersampleStyle"_a = THROW_EXCEPTION);
62  cls.def(("getImage" + suffix).c_str(),
64  lsst::geom::Box2I const &, std::string const &, std::string const &) const) &
65  Background::getImage<PixelT>,
66  "bbox"_a, "interpStyle"_a, "undersampleStyle"_a = "THROW_EXCEPTION");
67  cls.def(("getImage" + suffix).c_str(),
68  (std::shared_ptr<lsst::afw::image::Image<PixelT>> (Background::*)() const) &
69  Background::getImage<PixelT>);
70 }
71 }
72 
74  py::module::import("lsst.afw.image.image");
75 
76  /* Member types and enums */
77  py::enum_<UndersampleStyle>(mod, "UndersampleStyle")
78  .value("THROW_EXCEPTION", UndersampleStyle::THROW_EXCEPTION)
79  .value("REDUCE_INTERP_ORDER", UndersampleStyle::REDUCE_INTERP_ORDER)
80  .value("INCREASE_NXNYSAMPLE", UndersampleStyle::INCREASE_NXNYSAMPLE)
81  .export_values();
82 
83  py::class_<BackgroundControl, std::shared_ptr<BackgroundControl>> clsBackgroundControl(
84  mod, "BackgroundControl");
85 
86  /* Constructors */
87  clsBackgroundControl.def(py::init<int const, int const, StatisticsControl const, Property const,
88  ApproximateControl const>(),
89  "nxSample"_a, "nySample"_a, "sctrl"_a = StatisticsControl(), "prop"_a = MEANCLIP,
90  "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
91  clsBackgroundControl.def(py::init<int const, int const, StatisticsControl const, std::string const &,
92  ApproximateControl const>(),
93  "nxSample"_a, "nySample"_a, "sctrl"_a, "prop"_a,
94  "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
95  clsBackgroundControl.def(py::init<Interpolate::Style const, int const, int const, UndersampleStyle const,
96  StatisticsControl const, Property const, ApproximateControl const>(),
97  "style"_a, "nxSample"_a = 10, "nySample"_a = 10,
98  "undersampleStyle"_a = THROW_EXCEPTION, "sctrl"_a = StatisticsControl(),
99  "prop"_a = MEANCLIP,
100  "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
101  clsBackgroundControl.def(
102  py::init<std::string const &, int const, int const, std::string const &, StatisticsControl const,
103  std::string const &, ApproximateControl const>(),
104  "style"_a, "nxSample"_a = 10, "nySample"_a = 10, "undersampleStyle"_a = "THROW_EXCEPTION",
105  "sctrl"_a = StatisticsControl(), "prop"_a = "MEANCLIP",
106  "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
107 
108  /* Members */
109  clsBackgroundControl.def("setNxSample", &BackgroundControl::setNxSample);
110  clsBackgroundControl.def("setNySample", &BackgroundControl::setNySample);
111  clsBackgroundControl.def("setInterpStyle", (void (BackgroundControl::*)(Interpolate::Style const)) &
112  BackgroundControl::setInterpStyle);
113  clsBackgroundControl.def("setInterpStyle", (void (BackgroundControl::*)(std::string const &)) &
114  BackgroundControl::setInterpStyle);
115  clsBackgroundControl.def("setUndersampleStyle", (void (BackgroundControl::*)(UndersampleStyle const)) &
116  BackgroundControl::setUndersampleStyle);
117  clsBackgroundControl.def("setUndersampleStyle", (void (BackgroundControl::*)(std::string const &)) &
118  BackgroundControl::setUndersampleStyle);
119  clsBackgroundControl.def("getNxSample", &BackgroundControl::getNxSample);
120  clsBackgroundControl.def("getNySample", &BackgroundControl::getNySample);
121  clsBackgroundControl.def("getInterpStyle", &BackgroundControl::getInterpStyle);
122  clsBackgroundControl.def("getUndersampleStyle", &BackgroundControl::getUndersampleStyle);
123  clsBackgroundControl.def("getStatisticsControl",
125  BackgroundControl::getStatisticsControl);
126  clsBackgroundControl.def("getStatisticsProperty", &BackgroundControl::getStatisticsProperty);
127  clsBackgroundControl.def("setStatisticsProperty", (void (BackgroundControl::*)(Property)) &
128  BackgroundControl::setStatisticsProperty);
129  clsBackgroundControl.def("setStatisticsProperty", (void (BackgroundControl::*)(std::string)) &
130  BackgroundControl::setStatisticsProperty);
131  clsBackgroundControl.def("setApproximateControl", &BackgroundControl::setApproximateControl);
132  clsBackgroundControl.def("getApproximateControl",
134  BackgroundControl::getApproximateControl);
135 
136  py::class_<Background, std::shared_ptr<Background>> clsBackground(mod, "Background");
137 
138  /* Members */
139  declareGetImage<float>(clsBackground, "F");
140 
141  clsBackground.def("getAsUsedInterpStyle", &Background::getAsUsedInterpStyle);
142  clsBackground.def("getAsUsedUndersampleStyle", &Background::getAsUsedUndersampleStyle);
143  clsBackground.def("getApproximate", &Background::getApproximate, "actrl"_a,
144  "undersampleStyle"_a = THROW_EXCEPTION);
145  clsBackground.def("getBackgroundControl", (std::shared_ptr<BackgroundControl> (Background::*)()) &
146  Background::getBackgroundControl);
147 
148  py::class_<BackgroundMI, std::shared_ptr<BackgroundMI>, Background> clsBackgroundMI(mod, "BackgroundMI");
149 
150  /* Constructors */
151  clsBackgroundMI.def(
153  "imageDimensions"_a, "statsImage"_a);
154 
155  /* Operators */
156  clsBackgroundMI.def("__iadd__", &BackgroundMI::operator+=);
157  clsBackgroundMI.def("__isub__", &BackgroundMI::operator-=);
158 
159  /* Members */
160  clsBackgroundMI.def("getStatsImage", &BackgroundMI::getStatsImage);
161  clsBackgroundMI.def("getImageBBox", &BackgroundMI::getImageBBox);
162 
163  // Yes, really only float
164  declareMakeBackground<image::Image<float>>(mod);
165  declareMakeBackground<image::MaskedImage<float>>(mod);
166 
167  mod.def("stringToUndersampleStyle", stringToUndersampleStyle, "style"_a);
168 }
169 }
170 }
171 } // lsst::afw::math
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:58
A class to manipulate images, masks, and variance as a single object.
Definition: MaskedImage.h:73
Control how to make an approximation.
Definition: Approximate.h:48
Pass parameters to a Background object.
Definition: Background.h:56
A virtual base class to evaluate image background levels.
Definition: Background.h:235
Pass parameters to a Statistics object.
Definition: Statistics.h:93
An integer coordinate rectangle.
Definition: Box.h:55
PYBIND11_MODULE(background, mod)
Definition: background.cc:73
Property
control what is calculated
Definition: Statistics.h:63
@ MEANCLIP
estimate sample N-sigma clipped mean (N set in StatisticsControl, default=3)
Definition: Statistics.h:72
UndersampleStyle stringToUndersampleStyle(std::string const &style)
Conversion function to switch a string to an UndersampleStyle.
Definition: Background.cc:117
def init()
Definition: tests.py:59
A base class for image defects.
py::class_< ProductBoundedField, std::shared_ptr< ProductBoundedField >, BoundedField > PyClass