Hide keyboard shortcuts

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 

4 

5__all__ = ("calculateSipWcsHeader",) 

6 

7 

8def calculateSipWcsHeader(wcs, order, bbox, spacing, header=None): 

9 """Generate a SIP WCS header approximating a given ``SkyWcs`` 

10 

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. 

23 

24 Returns 

25 ------- 

26 header : `lsst.daf.base.PropertyList` 

27 Header including SIP WCS keywords. 

28 

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)) 

39 

40 sip = SipApproximation(transform, crpix, cdMatrix, Box2D(bbox), gridNum, order) 

41 

42 md = makeTanSipMetadata(sip.getPixelOrigin(), crval, sip.getCdMatrix(), sip.getA(), sip.getB(), 

43 sip.getAP(), sip.getBP()) 

44 

45 if header is not None: 

46 header.combine(md) 

47 else: 

48 header = md 

49 

50 return header