Coverage for python/lsst/skymap/patchInfo.py: 42%

Shortcuts 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

32 statements  

1# 

2# LSST Data Management System 

3# Copyright 2008, 2009, 2010 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# 

22 

23__all__ = ["PatchInfo", "makeSkyPolygonFromBBox"] 

24 

25from lsst.sphgeom import ConvexPolygon 

26from lsst.geom import Box2D 

27 

28 

29def makeSkyPolygonFromBBox(bbox, wcs): 

30 """Make an on-sky polygon from a bbox and a SkyWcs 

31 

32 Parameters 

33 ---------- 

34 bbox : `lsst.geom.Box2I` or `lsst.geom.Box2D` 

35 Bounding box of region, in pixel coordinates 

36 wcs : `lsst.afw.geom.SkyWcs` 

37 Celestial WCS 

38 

39 Returns 

40 ------- 

41 polygon : `lsst.sphgeom.ConvexPolygon` 

42 On-sky region 

43 """ 

44 pixelPoints = Box2D(bbox).getCorners() 

45 skyPoints = wcs.pixelToSky(pixelPoints) 

46 return ConvexPolygon.convexHull([sp.getVector() for sp in skyPoints]) 

47 

48 

49class PatchInfo: 

50 """Information about a patch within a tract of a sky map. 

51 

52 See `TractInfo` for more information. 

53 

54 Parameters 

55 ---------- 

56 index : `tuple` of `int` 

57 x,y index of patch (a pair of ints) 

58 innerBBox : `lsst.geom.Box2I` 

59 inner bounding box 

60 outerBBox : `lsst.geom.Box2I` 

61 inner bounding box 

62 """ 

63 

64 def __init__(self, index, innerBBox, outerBBox): 

65 self._index = index 

66 self._innerBBox = innerBBox 

67 self._outerBBox = outerBBox 

68 if not outerBBox.contains(innerBBox): 

69 raise RuntimeError("outerBBox=%s does not contain innerBBox=%s" % (outerBBox, innerBBox)) 

70 

71 def getIndex(self): 

72 """Return patch index: a tuple of (x, y) 

73 

74 Returns 

75 ------- 

76 result : `tuple` of `int` 

77 Patch index (x, y). 

78 """ 

79 return self._index 

80 

81 def getInnerBBox(self): 

82 """Get inner bounding box. 

83 

84 Returns 

85 ------- 

86 bbox : `lsst.geom.Box2I` 

87 The inner bounding Box. 

88 """ 

89 return self._innerBBox 

90 

91 def getOuterBBox(self): 

92 """Get outer bounding box. 

93 

94 Returns 

95 ------- 

96 bbox : `lsst.geom.Box2I` 

97 The outer bounding Box. 

98 """ 

99 return self._outerBBox 

100 

101 def getInnerSkyPolygon(self, tractWcs): 

102 """Get the inner on-sky region. 

103 

104 Returns 

105 ------- 

106 result : `lsst.sphgeom.ConvexPolygon` 

107 The inner sky region. 

108 """ 

109 return makeSkyPolygonFromBBox(bbox=self.getInnerBBox(), wcs=tractWcs) 

110 

111 def getOuterSkyPolygon(self, tractWcs): 

112 """Get the outer on-sky region. 

113 

114 Returns 

115 ------- 

116 result : `lsst.sphgeom.ConvexPolygon` 

117 The outer sky region. 

118 """ 

119 return makeSkyPolygonFromBBox(bbox=self.getOuterBBox(), wcs=tractWcs) 

120 

121 def __eq__(self, rhs): 

122 return (self.getIndex() == rhs.getIndex()) \ 

123 and (self.getInnerBBox() == rhs.getInnerBBox()) \ 

124 and (self.getOuterBBox() == rhs.getOuterBBox()) 

125 

126 def __ne__(self, rhs): 

127 return not self.__eq__(rhs) 

128 

129 def __str__(self): 

130 return "PatchInfo(index=%s)" % (self.getIndex(),) 

131 

132 def __repr__(self): 

133 return "PatchInfo(index=%s, innerBBox=%s, outerBBox=%s)" % \ 

134 (self.getIndex(), self.getInnerBBox(), self.getOuterBBox())