Coverage for python/lsst/afw/geom/calculateSipWcsHeader.py : 28%

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
1from lsst.geom import Extent2I, Box2D
2from lsst.afw.geom import SipApproximation, getPixelToIntermediateWorldCoords
3from lsst.afw.geom.wcsUtils import makeTanSipMetadata
5__all__ = ("calculateSipWcsHeader",)
8def calculateSipWcsHeader(wcs, order, bbox, spacing, header=None):
9 """Generate a SIP WCS header approximating a given ``SkyWcs``
11 Parameters
12 ----------
13 wcs : `lsst.afw.geom.SkyWcs`
14 World Coordinate System to approximate as SIP.
15 order : `int`
16 SIP order (equal to the maximum sum of the polynomial exponents).
17 bbox : `lsst.geom.Box2I`
18 Bounding box over which to approximate the ``wcs``.
19 spacing : `float`
20 Spacing between sample points.
21 header : `lsst.daf.base.PropertyList`, optional
22 Header to which to add SIP WCS keywords.
24 Returns
25 -------
26 header : `lsst.daf.base.PropertyList`
27 Header including SIP WCS keywords.
29 Examples
30 --------
31 >>> header = calculateSipWcsHeader(exposure.getWcs(), 3, exposure.getBBox(), 20)
32 >>> sipWcs = SkyWcs(header)
33 """
34 transform = getPixelToIntermediateWorldCoords(wcs)
35 crpix = wcs.getPixelOrigin()
36 cdMatrix = wcs.getCdMatrix()
37 crval = wcs.getSkyOrigin()
38 gridNum = Extent2I(int(bbox.getWidth()/spacing + 0.5), int(bbox.getHeight()/spacing + 0.5))
40 sip = SipApproximation(transform, crpix, cdMatrix, Box2D(bbox), gridNum, order)
42 md = makeTanSipMetadata(sip.getPixelOrigin(), crval, sip.getCdMatrix(), sip.getA(), sip.getB(),
43 sip.getAP(), sip.getBP())
45 if header is not None:
46 header.combine(md)
47 else:
48 header = md
50 return header