LSSTApplications  21.0.0+75b29a8a7f,21.0.0+e70536a077,21.0.0-1-ga51b5d4+62c747d40b,21.0.0-11-ga6ea59e8e+47cba9fc36,21.0.0-2-g103fe59+914993bf7c,21.0.0-2-g1367e85+e2614ded12,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g4bc9b9f+7b2b5f8678,21.0.0-2-g5242d73+e2614ded12,21.0.0-2-g54e2caa+6403186824,21.0.0-2-g7f82c8f+3ac4acbffc,21.0.0-2-g8dde007+04a6aea1af,21.0.0-2-g8f08a60+9402881886,21.0.0-2-ga326454+3ac4acbffc,21.0.0-2-ga63a54e+81dd751046,21.0.0-2-gc738bc1+5f65c6e7a9,21.0.0-2-gde069b7+26c92b3210,21.0.0-2-gecfae73+0993ddc9bd,21.0.0-2-gfc62afb+e2614ded12,21.0.0-21-gba890a8+5a4f502a26,21.0.0-23-g9966ff26+03098d1af8,21.0.0-3-g357aad2+8ad216c477,21.0.0-3-g4be5c26+e2614ded12,21.0.0-3-g6d51c4a+4d2fe0280d,21.0.0-3-g7d9da8d+75b29a8a7f,21.0.0-3-gaa929c8+522e0f12c2,21.0.0-3-ge02ed75+4d2fe0280d,21.0.0-4-g3300ddd+e70536a077,21.0.0-4-gc004bbf+eac6615e82,21.0.0-4-gccdca77+f94adcd104,21.0.0-4-gd1c1571+18b81799f9,21.0.0-5-g7b47fff+4d2fe0280d,21.0.0-5-gb155db7+d2632f662b,21.0.0-5-gdf36809+637e4641ee,21.0.0-6-g722ad07+28c848f42a,21.0.0-7-g959bb79+522e0f12c2,21.0.0-7-gfd72ab2+cf01990774,21.0.0-9-g87fb7b8d+e2ab11cdd6,w.2021.04
LSSTDataManagementBasePackage
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
lsst::afw::cameraGeom::Camera
An immutable representation of a camera.
Definition: Camera.h:43
std::string
STL class.
std::shared_ptr
STL class.
lsst::afw::table::io::python::addPersistableMethods
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
std::vector
STL class.
lsst.pex::exceptions::NotFoundError
Reports attempts to access elements using an invalid key.
Definition: Runtime.h:151
lsst::afw
Definition: imageAlgorithm.dox:1
lsst::afw::geom.transform.transformContinued.cls
cls
Definition: transformContinued.py:33
lsst::afw::cameraGeom::declareCamera
void declareCamera(py::module &mod)
Definition: camera.cc:46
pupilFactoryName
table::Key< std::string > pupilFactoryName
Definition: Camera.cc:124
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
lsst::afw::cameraGeom::PyCameraBuilder
py::class_< Camera::Builder, DetectorCollectionBase< Detector::InCameraBuilder >, std::shared_ptr< Camera::Builder > > PyCameraBuilder
Definition: camera.cc:38
lsst::afw::cameraGeom::declareCameraBuilder
void declareCameraBuilder(PyCamera &parent)
Definition: camera.cc:105
python.h
Camera.h
lsst::afw::cameraGeom::PyCamera
py::class_< Camera, DetectorCollection, std::shared_ptr< Camera > > PyCamera
Definition: camera.cc:36
lsst::geom::Point< double, 2 >
lsst::afw::cameraGeom::Camera::Builder
A helper class for creating and modifying cameras.
Definition: Camera.h:208
pybind11
Definition: _GenericMap.cc:40
lsst.pex::exceptions::Exception::what
virtual char const * what(void) const noexcept
Return a character string summarizing this exception.
Definition: Exception.cc:99
lsst::meas::modelfit.psf.psfContinued.module
module
Definition: psfContinued.py:42
python.h
lsst::afw::cameraGeom::PYBIND11_MODULE
PYBIND11_MODULE(camera, mod)
Definition: camera.cc:133
lsst::afw::cameraGeom::CameraSys
Camera coordinate system; used as a key in in TransformMap.
Definition: CameraSys.h:83