Coverage for python/lsst/afw/geom/wcsUtils/wcsUtilsContinued.py : 43%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#
2# LSST Data Management System
3# Copyright 2017 LSST Corporation.
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 <http://www.lsstcorp.org/LegalNotices/>.
21#
23__all__ = ["getSipMatrixFromMetadata", "computePixelToDistortedPixel"]
25import lsst.geom
26from ..transformFactory import linearizeTransform, makeTransform
27from .wcsUtils import _getSipMatrixFromMetadata
30def getSipMatrixFromMetadata(metadata, name):
31 """Extract a SIP matrix from FITS TAN-SIP WCS metadata.
33 Omitted coefficients are set to 0 and all coefficients may be omitted.
35 Parameters
36 ----------
37 metadata : `lsst.daf.base.PropertySet`
38 FITS metadata.
39 name : `str`
40 Name of TAN-SIP matrix (``"A"``, ``"B"``, ``"Ap"``, or ``"Bp"``).
42 Returns
43 -------
44 `numpy.array`
45 The SIP matrix.
47 Raises
48 ------
49 TypeError
50 If the order keyword ``<name>_ORDER`` (e.g. ``AP_ORDER``) is not found,
51 the value of the order keyword cannot be read as an integer,
52 the value of the order keyword is negative,
53 or if a matrix parameter (e.g. ``AP_5_0``) cannot be read as a float.
54 """
55 arr = _getSipMatrixFromMetadata(metadata, name)
56 if arr.shape == (): # order=0
57 arr.shape = (1, 1)
58 return arr
61def computePixelToDistortedPixel(pixelToFocalPlane, focalPlaneToFieldAngle):
62 """Compute the transform ``pixelToDistortedPixel``, which applies optical
63 distortion specified by ``focalPlaneToFieldAngle``.
65 The resulting transform is designed to be used to convert a pure TAN WCS
66 to a WCS that includes a model for optical distortion. In detail,
67 the initial WCS will contain these frames and transforms::
69 PIXELS frame -> pixelToIwc -> IWC frame -> gridToIwc -> SkyFrame
71 To produce the WCS with distortion, replace ``pixelToIwc`` with::
73 pixelToDistortedPixel -> pixelToIwc
75 Parameters
76 ----------
77 pixelToFocalPlane : `lsst.afw.geom.TransformPoint2ToPoint2`
78 Transform parent pixel coordinates to focal plane coordinates
79 focalPlaneToFieldAngle : `lsst.afw.geom.TransformPoint2ToPoint2`
80 Transform focal plane coordinates to field angle coordinates
82 Returns
83 -------
84 pixelToDistortedPixel : `lsst.afw.geom.TransformPoint2ToPoint2`
85 A transform that applies the effect of the optical distortion model.
86 """
87 # return pixelToFocalPlane -> focalPlaneToFieldAngle -> tanFieldAngleToocalPlane -> focalPlaneToPixel
88 focalPlaneToTanFieldAngle = makeTransform(linearizeTransform(focalPlaneToFieldAngle,
89 lsst.geom.Point2D(0, 0)))
90 return pixelToFocalPlane.then(focalPlaneToFieldAngle) \
91 .then(focalPlaneToTanFieldAngle.inverted()) \
92 .then(pixelToFocalPlane.inverted())