LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
pixelization_abc.py
Go to the documentation of this file.
1 # This file is part of sphgeom.
2 #
3 # Developed for the LSST Data Management System.
4 # This product includes software developed by the LSST Project
5 # (http://www.lsst.org).
6 # See the COPYRIGHT file at the top-level directory of this distribution
7 # for details of code ownership.
8 #
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 __all__ = ["PixelizationABC"]
22 
23 import abc
24 from ._sphgeom import RangeSet, Region, UnitVector3d
25 
26 
27 class PixelizationABC(abc.ABC):
28  """Pixelization ABC class that should be a base for
29  Python implementations of pixelization.
30  """
31 
32  @abc.abstractmethod
33  def universe(self) -> RangeSet:
34  """Return the set of all pixel indexes for this pixelization.
35 
36  Returns
37  -------
38  rangeSet : `lsst.sphgeom.RangeSet`
39  """
40  pass
41 
42  @abc.abstractmethod
43  def pixel(self, i) -> Region:
44  """Return the spherical region corresponding to the pixel index ``i``.
45 
46  This region will contain all unit vectors v with ``index(v) == i``.
47  But it may also contain points with index not equal to ``i``.
48  To see why, consider a point that lies on the edge of a polygonal
49  pixel - it is inside the polygons for both pixels sharing the edge,
50  but must be assigned to exactly one pixel by the pixelization.
51 
52  Parameters
53  ----------
54  i : `int`
55  Pixel index.
56 
57  Returns
58  -------
59  region : `lsst.sphgeom.Region`
60  The spherical region corresponding to the pixel with index ``i``
61 
62  Raises
63  ------
64  `InvalidArgumentException`
65  Raised if ``i`` is not a valid pixel index.
66  """
67  pass
68 
69  @abc.abstractmethod
70  def index(self, v: UnitVector3d) -> int:
71  """ Compute the index of the pixel.
72 
73  Parameters
74  ----------
75  v : `lsst.sphgeom.UnitVector3d`
76 
77  Returns
78  -------
79  i : `int`
80  The index of the pixel.
81  """
82  pass
83 
84  @abc.abstractmethod
85  def toString(self, i: int) -> str:
86  """Convert the given pixel index to a human-readable string.
87 
88  Parameters
89  ----------
90  i : `int`
91 
92  Returns
93  -------
94  s : `str`
95  """
96  pass
97 
98  @abc.abstractmethod
99  def envelope(self, region: Region, maxRanges: int = 0):
100  """Return the indexes of the pixels intersecting the spherical region.
101 
102  The ``maxRanges`` parameter can be used to limit both these costs -
103  setting it to a non-zero value sets a cap on the number of ranges
104  returned by this method. To meet this constraint, implementations are
105  allowed to return pixels that do not intersect the region along with
106  those, that do.
107  This allows two ranges [a, b) and [c, d), a < b < c < d, to be
108  merged into one range [a, d) (by adding in the pixels [b, c)). Since
109  simplification proceeds by adding pixels, the return value will always
110  be a superset of the intersecting pixels.
111 
112  Parameters
113  ----------
114  region : `lsst.sphgeom.Region`
115  maxRanges : `int`
116 
117  Returns
118  -------
119  rangeSet : `lsst.sphgeom.RangeSet`
120  """
121  pass
122 
123  @abc.abstractmethod
124  def interior(self, region: Region, maxRanges: int = 0):
125  """Return the indexes of the pixels within the spherical region.
126 
127  The ``maxRanges`` argument is analogous to the identically named
128  envelope() argument. The only difference is that implementations must
129  remove interior pixels to keep the number of ranges at or below the
130  maximum. The return value is therefore always a subset of the interior
131  pixels.
132 
133  Parameters
134  ----------
135  region : `lsst.sphgeom.Region`
136  maxRanges : `int`
137 
138  Returns
139  -------
140  rangeSet : `lsst.sphgeom.RangeSet`
141  """
142  pass
def envelope(self, Region region, int maxRanges=0)
def interior(self, Region region, int maxRanges=0)