LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
sipTransform.cc
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 *
4 * This product includes software developed by the
5 * LSST Project (http://www.lsst.org/).
6 * See the COPYRIGHT file
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#include "pybind11/pybind11.h"
23#include "pybind11/stl.h"
24
25#include "lsst/geom/Point.h"
29
30namespace py = pybind11;
31using namespace pybind11::literals;
32
33namespace lsst {
34namespace meas {
35namespace astrom {
36namespace {
37
38static void declareSipTransformBase(py::module &mod) {
39 py::class_<SipTransformBase, std::shared_ptr<SipTransformBase>> cls(mod, "_SipTransformBase");
40
41 cls.def("getPixelOrigin", &SipTransformBase::getPixelOrigin, py::return_value_policy::copy);
42 cls.def("getCdMatrix", &SipTransformBase::getCdMatrix, py::return_value_policy::copy);
43 cls.def("getPoly", &SipTransformBase::getPoly, py::return_value_policy::copy);
44}
45
46static void declareSipForwardTransform(py::module &mod) {
47 py::class_<SipForwardTransform, std::shared_ptr<SipForwardTransform>, SipTransformBase> cls(
48 mod, "SipForwardTransform");
49
50 cls.def(py::init<geom::Point2D const &, geom::LinearTransform const &, PolynomialTransform const &>(),
51 "pixelOrigin"_a, "cdMatrix"_a, "forwardSipPoly"_a);
52 cls.def(py::init<SipForwardTransform const &>(), "other"_a);
53
54 cls.def_static("convert",
55 (SipForwardTransform(*)(PolynomialTransform const &, geom::Point2D const &,
56 geom::LinearTransform const &)) &
58 "poly"_a, "pixelOrigin"_a, "cdMatrix"_a);
59 cls.def_static("convert",
60 (SipForwardTransform(*)(ScaledPolynomialTransform const &, geom::Point2D const &,
61 geom::LinearTransform const &)) &
63 "scaled"_a, "pixelOrigin"_a, "cdMatrix"_a);
64 cls.def_static("convert",
65 (SipForwardTransform(*)(ScaledPolynomialTransform const &)) & SipForwardTransform::convert,
66 "scaled"_a);
67
68 cls.def("__call__", &SipForwardTransform::operator(), "in"_a);
69 cls.def("transformPixels", &SipForwardTransform::transformPixels, "s"_a);
70
71 cls.def("linearize", &SipForwardTransform::linearize);
72}
73
74static void declareSipReverseTransform(py::module &mod) {
75 py::class_<SipReverseTransform, std::shared_ptr<SipReverseTransform>, SipTransformBase> cls(
76 mod, "SipReverseTransform");
77
78 cls.def(py::init<geom::Point2D const &, geom::LinearTransform const &, PolynomialTransform const &>(),
79 "pixelOrigin"_a, "cdMatrix"_a, "reverseSipPoly"_a);
80 cls.def(py::init<SipReverseTransform const &>(), "other"_a);
81
82 cls.def_static("convert",
83 (SipReverseTransform(*)(PolynomialTransform const &, geom::Point2D const &,
84 geom::LinearTransform const &)) &
86 "poly"_a, "pixelOrigin"_a, "cdMatrix"_a);
87 cls.def_static("convert",
88 (SipReverseTransform(*)(ScaledPolynomialTransform const &, geom::Point2D const &,
89 geom::LinearTransform const &)) &
91 "scaled"_a, "pixelOrigin"_a, "cdMatrix"_a);
92 cls.def_static("convert",
93 (SipReverseTransform(*)(ScaledPolynomialTransform const &)) & SipReverseTransform::convert,
94 "scaled"_a);
95
96 cls.def("__call__", &SipReverseTransform::operator(), "in"_a);
97 cls.def("transformPixels", &SipReverseTransform::transformPixels, "s"_a);
98
99 cls.def("linearize", &SipReverseTransform::linearize);
100}
101
102} // namespace
103
104PYBIND11_MODULE(sipTransform, mod) {
105 declareSipTransformBase(mod);
106 declareSipForwardTransform(mod);
107 declareSipReverseTransform(mod);
108
109 mod.def("makeWcs", makeWcs, "sipForward"_a, "sipReverse"_a, "skyOrigin"_a);
110 mod.def("transformWcsPixels", transformWcsPixels, "wcs"_a, "s"_a);
111 mod.def("rotateWcsPixelsBy90", rotateWcsPixelsBy90, "wcs"_a, "nQuarter"_a, "dimensions"_a);
112}
113
114} // namespace astrom
115} // namespace meas
116} // namespace lsst
A 2D linear coordinate transformation.
SipForwardTransform transformPixels(geom::AffineTransform const &s) const
Return a new forward SIP transform that includes a transformation of the pixel coordinate system by t...
Definition: SipTransform.cc:95
geom::AffineTransform linearize(geom::Point2D const &in) const
Return an approximate affine transform at the given point.
Definition: SipTransform.cc:85
static SipForwardTransform convert(PolynomialTransform const &poly, geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix)
Convert a PolynomialTransform to an equivalent SipForwardTransform.
Definition: SipTransform.cc:52
SipReverseTransform transformPixels(geom::AffineTransform const &s) const
Return a new reverse SIP transform that includes a transformation of the pixel coordinate system by t...
geom::AffineTransform linearize(geom::Point2D const &in) const
Return an approximate affine transform at the given point.
static SipReverseTransform convert(PolynomialTransform const &poly, geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix)
Convert a PolynomialTransform to an equivalent SipReverseTransform.
geom::Point2D const & getPixelOrigin() const
Return the pixel origin (CRPIX, but zero-indexed) of the transform.
Definition: SipTransform.h:51
PolynomialTransform const & getPoly() const
Return the polynomial component of the transform (A,B) or (AP,BP).
Definition: SipTransform.h:61
geom::LinearTransform const & getCdMatrix() const
Return the CD matrix of the transform.
Definition: SipTransform.h:56
std::shared_ptr< afw::geom::SkyWcs > transformWcsPixels(afw::geom::SkyWcs const &wcs, geom::AffineTransform const &s)
Create a new SkyWcs whose pixel coordinate system has been transformed via an affine transform.
PYBIND11_MODULE(makeMatchStatistics, mod)
std::shared_ptr< afw::geom::SkyWcs > rotateWcsPixelsBy90(afw::geom::SkyWcs const &wcs, int nQuarter, geom::Extent2I const &dimensions)
Return a new SkyWcs that represents a rotation of the image it corresponds to about the image's cente...
std::shared_ptr< afw::geom::SkyWcs > makeWcs(SipForwardTransform const &sipForward, SipReverseTransform const &sipReverse, geom::SpherePoint const &skyOrigin)
Create a new TAN SIP Wcs from a pair of SIP transforms and the sky origin.
A base class for image defects.