lsst.skymap g037fbe16b5+d85c0663ba
patchInfo.py
Go to the documentation of this file.
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
30 """Make an on-sky polygon from a bbox and a SkyWcs
31
32 Parameters
33 ----------
35 Bounding box of region, in pixel coordinates
37 Celestial WCS
38
39 Returns
40 -------
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
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 = index
66 self._innerBBox_innerBBox = innerBBox
67 self._outerBBox_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_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_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_outerBBox
100
101 def getInnerSkyPolygon(self, tractWcs):
102 """Get the inner on-sky region.
103
104 Returns
105 -------
107 The inner sky region.
108 """
109 return makeSkyPolygonFromBBox(bbox=self.getInnerBBoxgetInnerBBox(), wcs=tractWcs)
110
111 def getOuterSkyPolygon(self, tractWcs):
112 """Get the outer on-sky region.
113
114 Returns
115 -------
117 The outer sky region.
118 """
119 return makeSkyPolygonFromBBox(bbox=self.getOuterBBoxgetOuterBBox(), wcs=tractWcs)
120
121 def __eq__(self, rhs):
122 return (self.getIndexgetIndex() == rhs.getIndex()) \
123 and (self.getInnerBBoxgetInnerBBox() == rhs.getInnerBBox()) \
124 and (self.getOuterBBoxgetOuterBBox() == rhs.getOuterBBox())
125
126 def __ne__(self, rhs):
127 return not self.__eq____eq__(rhs)
128
129 def __str__(self):
130 return "PatchInfo(index=%s)" % (self.getIndexgetIndex(),)
131
132 def __repr__(self):
133 return "PatchInfo(index=%s, innerBBox=%s, outerBBox=%s)" % \
134 (self.getIndexgetIndex(), self.getInnerBBoxgetInnerBBox(), self.getOuterBBoxgetOuterBBox())
def getInnerSkyPolygon(self, tractWcs)
Definition: patchInfo.py:101
def getOuterSkyPolygon(self, tractWcs)
Definition: patchInfo.py:111
def __init__(self, index, innerBBox, outerBBox)
Definition: patchInfo.py:64
def makeSkyPolygonFromBBox(bbox, wcs)
Definition: patchInfo.py:29