lsst.skymap  22.0.1-6-g50866e6+11a9473f92
cellInfo.py
Go to the documentation of this file.
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__ = ["CellInfo"]
24 
25 from .detail import makeSkyPolygonFromBBox
26 
27 
28 class CellInfo:
29  """Information about a cell within a patch of a tract of a sky map.
30 
31  See `PatchInfo` and `TractInfo` for more information.
32 
33  Parameters
34  ----------
35  index : `lsst.skymap.Index2D`
36  x,y index of a cell (a pair of ints)
37  innerBBox : `lsst.geom.Box2I`
38  Inner bounding box.
39  outerBBox : `lsst.geom.Box2I`
40  Outer bounding box.
41  sequentialIndex : `int`
42  Cell sequential index.
43  tractWcs : `lsst.afw.geom.SkyWcs`
44  Tract WCS object.
45  """
46  def __init__(self, index, innerBBox, outerBBox, sequentialIndex, tractWcs):
47  self._index_index = index
48  self._sequentialIndex_sequentialIndex = sequentialIndex
49  self._innerBBox_innerBBox = innerBBox
50  self._outerBBox_outerBBox = outerBBox
51  self._wcs_wcs = tractWcs
52  if not outerBBox.contains(innerBBox):
53  raise RuntimeError("outerBBox=%s does not contain innerBBox=%s" % (outerBBox, innerBBox))
54 
55  def getIndex(self):
56  """Return cell index: a tuple of (x, y)
57 
58  Returns
59  -------
60  result : `lsst.skymap.Index2D`
61  Patch index (x, y).
62  """
63  return self._index_index
64 
65  index = property(getIndex)
66 
67  def getSequentialIndex(self):
68  """Return cell sequential index.
69 
70  Returns
71  -------
72  result : `int`
73  Sequential cell index.
74  """
75  return self._sequentialIndex_sequentialIndex
76 
77  sequential_index = property(getSequentialIndex)
78 
79  def getWcs(self):
80  """Return the associated tract wcs
81 
82  Returns
83  -------
84  wcs : `lsst.afw.geom.SkyWcs`
85  Tract WCS.
86  """
87  return self._wcs_wcs
88 
89  wcs = property(getWcs)
90 
91  def getInnerBBox(self):
92  """Get inner bounding box.
93 
94  Returns
95  -------
96  bbox : `lsst.geom.Box2I`
97  The inner bounding Box.
98  """
99  return self._innerBBox_innerBBox
100 
101  inner_bbox = property(getInnerBBox)
102 
103  def getOuterBBox(self):
104  """Get outer bounding box.
105 
106  Returns
107  -------
108  bbox : `lsst.geom.Box2I`
109  The outer bounding Box.
110  """
111  return self._outerBBox_outerBBox
112 
113  outer_bbox = property(getOuterBBox)
114 
115  def getInnerSkyPolygon(self, tractWcs=None):
116  """Get the inner on-sky region.
117 
118  Parameters
119  ----------
120  tractWcs : `lsst.afw.image.SkyWcs`, optional
121  WCS for the associated tract.
122 
123  Returns
124  -------
125  result : `lsst.sphgeom.ConvexPolygon`
126  The inner sky region.
127  """
128  _tractWcs = tractWcs if tractWcs is not None else self._wcs_wcs
129  return makeSkyPolygonFromBBox(bbox=self.getInnerBBoxgetInnerBBox(), wcs=_tractWcs)
130 
131  @property
132  def inner_sky_polygon(self):
133  return self.getInnerSkyPolygongetInnerSkyPolygon()
134 
135  def getOuterSkyPolygon(self, tractWcs=None):
136  """Get the outer on-sky region.
137 
138  Parameters
139  ----------
140  tractWcs : `lsst.afw.image.SkyWcs`, optional
141  WCS for the associated tract.
142 
143  Returns
144  -------
145  result : `lsst.sphgeom.ConvexPolygon`
146  The outer sky region.
147  """
148  _tractWcs = tractWcs if tractWcs is not None else self._wcs_wcs
149  return makeSkyPolygonFromBBox(bbox=self.getOuterBBoxgetOuterBBox(), wcs=_tractWcs)
150 
151  @property
152  def outer_sky_polygon(self):
153  return self.getOuterSkyPolygongetOuterSkyPolygon()
154 
155  def __eq__(self, rhs):
156  return (self.getIndexgetIndex() == rhs.getIndex()) \
157  and (self.getInnerBBoxgetInnerBBox() == rhs.getInnerBBox()) \
158  and (self.getOuterBBoxgetOuterBBox() == rhs.getOuterBBox())
159 
160  def __ne__(self, rhs):
161  return not self.__eq____eq__(rhs)
162 
163  def __str__(self):
164  return "CellInfo(index=%s)" % (self.getIndexgetIndex(),)
165 
166  def __repr__(self):
167  return "CellInfo(index=%s, innerBBox=%s, outerBBox=%s)" % \
168  (self.getIndexgetIndex(), self.getInnerBBoxgetInnerBBox(), self.getOuterBBoxgetOuterBBox())
def __init__(self, index, innerBBox, outerBBox, sequentialIndex, tractWcs)
Definition: cellInfo.py:46
def getInnerSkyPolygon(self, tractWcs=None)
Definition: cellInfo.py:115
def getOuterSkyPolygon(self, tractWcs=None)
Definition: cellInfo.py:135
def makeSkyPolygonFromBBox(bbox, wcs)
Definition: utils.py:61