LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+ae94e5adf4,21.0.0-10-g2408eff+ad7fe00a3b,21.0.0-10-g560fb7b+5d30037bff,21.0.0-10-gcf60f90+7fd8e8fd04,21.0.0-11-g25eff31+491f1498e8,21.0.0-11-gd78879e+d13a45ff19,21.0.0-12-g1e69a3f+69d54d99d8,21.0.0-17-g6590b197+c8c705a94e,21.0.0-2-g103fe59+29086b68f8,21.0.0-2-g1367e85+d793a9824f,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+d793a9824f,21.0.0-2-g7f82c8f+7178d1fb8b,21.0.0-2-g8f08a60+fd0b970de5,21.0.0-2-g8faa9b5+3b24369756,21.0.0-2-ga326454+7178d1fb8b,21.0.0-2-gde069b7+ca45a81b40,21.0.0-2-gecfae73+3609a557ba,21.0.0-2-gfc62afb+d793a9824f,21.0.0-22-g2a5702db6+f385fa6f38,21.0.0-3-g357aad2+673ab9f056,21.0.0-3-g4be5c26+d793a9824f,21.0.0-3-g65f322c+45176dc65e,21.0.0-3-g7d9da8d+3b24369756,21.0.0-3-ge02ed75+d05e6d1be4,21.0.0-4-g591bb35+d05e6d1be4,21.0.0-4-g65b4814+5d30037bff,21.0.0-4-gccdca77+a631590478,21.0.0-4-ge8a399c+7f1b116a8b,21.0.0-5-gb7b9a9f+d793a9824f,21.0.0-5-gd00fb1e+de3bd29da1,21.0.0-55-g0be6b205+66ae927d20,21.0.0-6-g2d4f3f3+04719a4bac,21.0.0-7-g04766d7+510a52a951,21.0.0-7-g98eecf7+adb4d61a8d,21.0.0-9-g39e06b5+d05e6d1be4,master-gac4afde19b+d05e6d1be4,w.2021.12
LSST Data Management Base Package
camera.cc
Go to the documentation of this file.
1 /*
2  * Developed for the LSST Data Management System.
3  * This product includes software developed by the LSST Project
4  * (https://www.lsst.org).
5  * See the COPYRIGHT file at the top-level directory of this distribution
6  * for details of code ownership.
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 GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #include "pybind11/pybind11.h"
23 #include "pybind11/stl.h"
24 
25 #include "lsst/utils/python.h"
28 
29 namespace py = pybind11;
30 using namespace py::literals;
31 
32 namespace lsst {
33 namespace afw {
34 namespace cameraGeom {
35 
36 using PyCamera = py::class_<Camera, DetectorCollection, std::shared_ptr<Camera>>;
37 using PyCameraBuilder = py::class_<Camera::Builder, DetectorCollectionBase<Detector::InCameraBuilder>,
39 
40 // Bindings here are ordered to match the order of the declarations in
41 // Camera.h to the greatest extent possible; modifications to this file should
42 // attempt to preserve this.
43 
44 void declareCameraBuilder(PyCamera & parent);
45 
47  PyCamera cls(mod, "Camera");
49  cls.def("rebuild", &Camera::rebuild);
50  cls.def("getName", &Camera::getName);
51  cls.def("getPupilFactoryName", &Camera::getPupilFactoryName);
52  cls.def("findDetectors", &Camera::findDetectors, "point"_a, "cameraSys"_a);
53  cls.def("findDetectorsList", &Camera::findDetectorsList, "pointList"_a, "cameraSys"_a);
54  // transform methods are wrapped with lambdas that translate exceptions for backwards compatibility
55  cls.def(
56  "getTransform",
57  [](Camera const & self, CameraSys const & fromSys, CameraSys const & toSys) {
58  try {
59  return self.getTransform(fromSys, toSys);
60  } catch (pex::exceptions::NotFoundError & err) {
61  PyErr_SetString(PyExc_KeyError, err.what());
62  throw py::error_already_set();
63  }
64  },
65  "fromSys"_a, "toSys"_a
66  );
67  cls.def("getTransformMap", &Camera::getTransformMap);
68  cls.def(
69  "transform",
70  [](
71  Camera const & self,
72  lsst::geom::Point2D const & point,
73  CameraSys const & fromSys,
74  CameraSys const & toSys
75  ) {
76  try {
77  return self.transform(point, fromSys, toSys);
78  } catch (pex::exceptions::NotFoundError & err) {
79  PyErr_SetString(PyExc_KeyError, err.what());
80  throw py::error_already_set();
81  }
82  },
83  "point"_a, "fromSys"_a, "toSys"_a
84  );
85  cls.def(
86  "transform",
87  [](
88  Camera const & self,
89  std::vector<lsst::geom::Point2D> const & points,
90  CameraSys const & fromSys,
91  CameraSys const & toSys
92  ) {
93  try {
94  return self.transform(points, fromSys, toSys);
95  } catch (pex::exceptions::NotFoundError & err) {
96  PyErr_SetString(PyExc_KeyError, err.what());
97  throw py::error_already_set();
98  }
99  },
100  "points"_a, "fromSys"_a, "toSys"_a
101  );
103 }
104 
106  PyCameraBuilder cls(parent, "Builder");
107  cls.def(py::init<std::string const &>(), "name"_a);
108  cls.def(py::init<Camera const &>(), "camera"_a);
109  cls.def("finish", &Camera::Builder::finish);
110  cls.def("getName", &Camera::Builder::getName);
111  cls.def("setName", &Camera::Builder::setName);
112  cls.def("getPupilFactoryName", &Camera::Builder::getPupilFactoryName);
113  cls.def("setPupilFactoryName", &Camera::Builder::setPupilFactoryName);
114  cls.def("setPupilFactoryClass",
115  [](Camera::Builder & self, py::object pupilFactoryClass) {
116  std::string pupilFactoryName = "lsst.afw.cameraGeom.pupil.PupilFactory";
117  if (!pupilFactoryClass.is(py::none())) {
118  pupilFactoryName = py::str("{}.{}").format(
119  pupilFactoryClass.attr("__module__"),
120  pupilFactoryClass.attr("__name__")
121  );
122  }
123  self.setPupilFactoryName(pupilFactoryName);
124  });
125  cls.def("setTransformFromFocalPlaneTo", &Camera::Builder::setTransformFromFocalPlaneTo,
126  "toSys"_a, "transform"_a);
127  cls.def("discardTransformFromFocalPlaneTo",&Camera::Builder::discardTransformFromFocalPlaneTo);
128  cls.def("add", &Camera::Builder::add);
129  cls.def("__delitem__", py::overload_cast<int>(&Camera::Builder::remove));
130  cls.def("__delitem__", py::overload_cast<std::string const &>(&Camera::Builder::remove));
131 }
132 
133 PYBIND11_MODULE(camera, mod){
134  py::module::import("lsst.afw.cameraGeom.detectorCollection");
135  py::module::import("lsst.afw.cameraGeom.detector");
136  py::module::import("lsst.afw.cameraGeom.transformMap");
137 
138  declareCamera(mod);
139 }
140 
141 } // cameraGeom
142 } // afw
143 } // lsst
A helper class for creating and modifying cameras.
Definition: Camera.h:208
An immutable representation of a camera.
Definition: Camera.h:43
Camera coordinate system; used as a key in in TransformMap.
Definition: CameraSys.h:83
virtual char const * what(void) const noexcept
Return a character string summarizing this exception.
Definition: Exception.cc:99
Reports attempts to access elements using an invalid key.
Definition: Runtime.h:151
py::class_< Camera, DetectorCollection, std::shared_ptr< Camera > > PyCamera
Definition: camera.cc:36
void declareCameraBuilder(PyCamera &parent)
Definition: camera.cc:105
void declareCamera(py::module &mod)
Definition: camera.cc:46
PYBIND11_MODULE(camera, mod)
Definition: camera.cc:133
py::class_< Camera::Builder, DetectorCollectionBase< Detector::InCameraBuilder >, std::shared_ptr< Camera::Builder > > PyCameraBuilder
Definition: camera.cc:38
std::string const & getName() const noexcept
Return a filter's name.
Definition: Filter.h:78
void addPersistableMethods(pybind11::class_< Class, Args... > &cls)
Add table::io::Persistable and PersistableFacade methods to the pybind11 wrapper for a class.
Definition: python.h:55
A base class for image defects.
table::Key< std::string > pupilFactoryName
Definition: Camera.cc:124