LSSTApplications  11.0-24-g0a022a1,15.0+13,15.0+9,15.0-1-g19261fa+5,15.0-1-g1eca518+15,15.0-1-g60afb23+12,15.0-1-g615e0bb+4,15.0-1-g6668b0b+5,15.0-1-g788a293+12,15.0-1-ga91101e+12,15.0-1-gae1598d+8,15.0-1-gc45031d+15,15.0-1-gd076f1f+12,15.0-1-gdf18595+2,15.0-1-gf4f1c34+8,15.0-2-g100d730+5,15.0-2-g18f3f21+5,15.0-2-g35685a8+6,15.0-2-gf38729e+5,15.0-21-g91b8abf62,15.0-3-g150fc43+14,15.0-3-g6f085af+5,15.0-3-g707930d,15.0-3-g9103c06+8,15.0-3-ga03b4ca+16,15.0-3-gaec6799+5,15.0-3-gb7a597c+12,15.0-3-ge6a6747+5,15.0-4-g45f767a+8,15.0-4-g654b129+10,15.0-4-gf5d1e39,15.0-4-gff20472+15,15.0-5-ga70c291+5,15.0-6-g9a9df217+5,15.0-7-gab4c137+6,15.0-7-gab79a70c+4
LSSTDataManagementBasePackage
ellipse.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 "numpy/arrayobject.h"
28 #include "ndarray/pybind11.h"
29 #include "ndarray/converter.h"
30 
33 #include "lsst/afw/geom/Point.h"
37 
38 namespace py = pybind11;
39 using namespace pybind11::literals;
40 
41 using namespace lsst::afw::geom;
42 using namespace ellipses;
43 
45  py::module mod("_ellipse", "Python wrapper for afw _ellipse library");
46 
47  if (_import_array() < 0) {
48  PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import");
49  return nullptr;
50  }
51 
52  /* Module level */
53  py::class_<Ellipse, std::shared_ptr<Ellipse>> clsEllipse(mod, "Ellipse");
54 
55  // /* Member types and enums */
56  // py::class_<Ellipse::GridTransform> clsEllipseGridTransform(clsEllipse, "GridTransform");
57  //
58  // /* Constructors */
59  // clsEllipseGridTransform.def(py::init<Ellipse const &>());
60  //
61  // /* Members */
62  // clsEllipseGridTransform.def("getMatrix", &Ellipse::GridTransform::getMatrix);
63  // clsEllipseGridTransform.def("d", &Ellipse::GridTransform::d);
64  // clsEllipseGridTransform.def("getDeterminant", &Ellipse::GridTransform::getDeterminant);
65  // clsEllipseGridTransform.def("invert", &Ellipse::GridTransform::invert);
66 
67  /* Constructors */
68  clsEllipse.def(py::init<BaseCore const &, Point2D const &>(), "core"_a, "center"_a = Point2D());
69  clsEllipse.def(py::init<Ellipse const &>());
70  clsEllipse.def(py::init<Ellipse::Convolution const &>());
71 
72  py::implicitly_convertible<Ellipse::Convolution, Ellipse>();
73 
74  /* Operators */
75 
76  /* Members */
77  clsEllipse.def("getCore", [](Ellipse &ellipse) { return ellipse.getCorePtr(); });
78  clsEllipse.def("getCenter", (Point2D & (Ellipse::*)()) & Ellipse::getCenter);
79  clsEllipse.def("setCenter", &Ellipse::setCenter);
80  clsEllipse.def("setCore", &Ellipse::setCore);
81  clsEllipse.def("normalize", &Ellipse::normalize);
82  clsEllipse.def("grow", &Ellipse::grow);
83  clsEllipse.def("scale", &Ellipse::scale);
84  clsEllipse.def("shift", &Ellipse::shift);
85  clsEllipse.def("getParameterVector", &Ellipse::getParameterVector);
86  clsEllipse.def("setParameterVector", &Ellipse::setParameterVector);
87  clsEllipse.def("transform",
88  [](Ellipse const &self, AffineTransform const &t) -> Ellipse { return self.transform(t); },
89  "transform"_a);
90  // clsEllipse.def("convolve", (Convolution const (Ellipse::*)(Ellipse const &) const)
91  // &Ellipse::convolve);
92  clsEllipse.def("getGridTransform", [](Ellipse &self) -> AffineTransform {
93  return self.getGridTransform(); // delibarate conversion to AffineTransform
94  });
95  clsEllipse.def("computeBBox", &Ellipse::computeBBox);
96 
97  return mod.ptr();
98 }
def normalize(v)
Definition: geometry.py:99
def scale(algorithm, min, max=None, frame=None)
Definition: ds9.py:115
Transformer transform(AffineTransform const &transform)
Definition: Transformer.h:122
Point< double, 2 > Point2D
Definition: Point.h:304
An affine coordinate transformation consisting of a linear transformation and an offset.
An ellipse defined by an arbitrary BaseCore and a center point.
Definition: Ellipse.h:51
PYBIND11_PLUGIN(_ellipse)
Definition: ellipse.cc:44
std::shared_ptr< BaseCore const > getCorePtr() const
Return the ellipse core.
Definition: Ellipse.h:77