LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
|
Mq3cPixelization
provides modified Q3C indexing of points and regions.
More...
#include <Mq3cPixelization.h>
Public Member Functions | |
Mq3cPixelization (int level) | |
This constructor creates a modified Q3C pixelization of the sphere with the given subdivision level. | |
int | getLevel () const |
getLevel returns the subdivision level of this pixelization. | |
RangeSet | universe () const override |
universe returns the set of all pixel indexes for this pixelization. | |
std::unique_ptr< Region > | pixel (std::uint64_t i) const override |
pixel returns the spherical region corresponding to the pixel with index i. | |
std::uint64_t | index (UnitVector3d const &v) const override |
index computes the index of the pixel for v. | |
std::string | toString (std::uint64_t i) const override |
toString converts the given pixel index to a human-readable string. | |
RangeSet | envelope (Region const &r, size_t maxRanges=0) const |
envelope returns the indexes of the pixels intersecting the spherical region r. | |
RangeSet | interior (Region const &r, size_t maxRanges=0) const |
interior returns the indexes of the pixels within the spherical region r. | |
Static Public Member Functions | |
static int | level (std::uint64_t i) |
level returns the subdivision level of the given modified Q3C index. | |
static ConvexPolygon | quad (std::uint64_t i) |
quad returns the quadrilateral corresponding to the modified Q3C pixel with index i . | |
static std::vector< std::uint64_t > | neighborhood (std::uint64_t i) |
neighborhood returns the indexes of all pixels that share a vertex with pixel i (including i itself). | |
static std::string | asString (std::uint64_t i) |
toString converts the given modified-Q3C index to a human readable string. | |
Static Public Attributes | |
static constexpr int | MAX_LEVEL = 30 |
The maximum supported cube-face grid resolution is 2^30 by 2^30. | |
Private Member Functions | |
RangeSet | _envelope (Region const &r, size_t maxRanges) const override |
RangeSet | _interior (Region const &r, size_t maxRanges) const override |
Mq3cPixelization
provides modified Q3C indexing of points and regions.
Instances of this class are immutable and very cheap to copy.
maxRanges
argument for envelope() or interior() to a non-zero value below 4 can result in very poor region pixelizations regardless of region size. For instance, if maxRanges
is 1, a non-empty circle centered on an axis will be approximated by the indexes for an entire cube face, even as the circle radius tends to 0. Definition at line 57 of file Mq3cPixelization.h.
|
explicit |
This constructor creates a modified Q3C pixelization of the sphere with the given subdivision level.
If level
∉ [0, MAX_LEVEL], a std::invalid_argument is thrown.
Definition at line 299 of file Mq3cPixelization.cc.
|
overrideprivatevirtual |
Implements lsst::sphgeom::Pixelization.
Definition at line 345 of file Mq3cPixelization.cc.
|
overrideprivatevirtual |
Implements lsst::sphgeom::Pixelization.
Definition at line 349 of file Mq3cPixelization.cc.
|
static |
toString
converts the given modified-Q3C index to a human readable string.
The first two characters in the return value are always '+X', '+Y', '+Z', '-X', '-Y', or '-Z'. They give the normal vector of the cube face F containing i
. Each subsequent character is a digit in [0-3] corresponding to a child pixel index, so that reading the string from left to right corresponds to descent of the quad-tree overlaid on F.
If i is not a valid modified-Q3C index, a std::invalid_argument is thrown.
Definition at line 277 of file Mq3cPixelization.cc.
|
inlineinherited |
envelope
returns the indexes of the pixels intersecting the spherical region r.
For hierarchical pixelizations, a good way to implement this is by top down tree traversal. Starting with the root pixels (e.g. Q3C cube faces, or HTM root triangles), a pixel P is tested for intersection with the region r. If P is already at the desired subdivision level and intersects r, its index is added to the output. If r contains P, the indexes of all children of P at the target subdivision level are output. Finally, if P intersects r, then P is subdivided and the algorithm recurses on its child pixels.
Using higher subdivision levels allows a region to be more closely approximated by smaller pixels, but for large input regions the cost of computing and storing their indexes can quickly become prohibitive.
The maxRanges
parameter can be used to limit both these costs - setting it to a non-zero value sets a cap on the number of ranges returned by this method. To meet this constraint, implementations are allowed to return pixels that do not intersect r along with those that do. This allows two ranges [a, b) and [c, d), a < b < c < d, to be merged into one range [a, d) (by adding in the pixels [b, c)). Since simplification proceeds by adding pixels, the return value will always be a superset of the intersecting pixels.
In practice, the implementation of this method for a hierarchical pixelization like Q3C or HTM will lower the subdivision level when too many ranges have been found. Each coarse pixel I at level L - n corresponds to pixels [I*4ⁿ, (I + 1)*4ⁿ) at level L.
Definition at line 138 of file Pixelization.h.
|
inline |
getLevel
returns the subdivision level of this pixelization.
Definition at line 103 of file Mq3cPixelization.h.
|
overridevirtual |
index
computes the index of the pixel for v.
Implements lsst::sphgeom::Pixelization.
Definition at line 318 of file Mq3cPixelization.cc.
|
inlineinherited |
interior
returns the indexes of the pixels within the spherical region r.
The maxRanges
argument is analogous to the identically named envelope() argument. The only difference is that implementations must remove interior pixels to keep the number of ranges at or below the maximum. The return value is therefore always a subset of the interior pixels.
Definition at line 150 of file Pixelization.h.
|
static |
level
returns the subdivision level of the given modified Q3C index.
If i is not a valid modified Q3C index, -1 is returned.
Definition at line 243 of file Mq3cPixelization.cc.
|
static |
neighborhood
returns the indexes of all pixels that share a vertex with pixel i
(including i
itself).
A Q3C pixel has 8 - k adjacent pixels, where k is the number of vertices that are also root pixel vertices (0, 1, or 4).
If i
is not a valid modified Q3C index, a std::invalid_argument is thrown.
Definition at line 267 of file Mq3cPixelization.cc.
|
overridevirtual |
pixel
returns the spherical region corresponding to the pixel with index i.
This region will contain all unit vectors v with index(v) == i
. But it may also contain points with index not equal to i. To see why, consider a point that lies on the edge of a polygonal pixel - it is inside the polygons for both pixels sharing the edge, but must be assigned to exactly one pixel by the pixelization.
If i is not a valid pixel index, a std::invalid_argument is thrown.
Implements lsst::sphgeom::Pixelization.
Definition at line 306 of file Mq3cPixelization.cc.
|
static |
quad
returns the quadrilateral corresponding to the modified Q3C pixel with index i
.
If i
is not a valid modified Q3C index, a std::invalid_argument is thrown.
Definition at line 257 of file Mq3cPixelization.cc.
|
inlineoverridevirtual |
toString
converts the given pixel index to a human-readable string.
Implements lsst::sphgeom::Pixelization.
Definition at line 114 of file Mq3cPixelization.h.
|
inlineoverridevirtual |
universe
returns the set of all pixel indexes for this pixelization.
Implements lsst::sphgeom::Pixelization.
Definition at line 105 of file Mq3cPixelization.h.
|
staticconstexpr |
The maximum supported cube-face grid resolution is 2^30 by 2^30.
Definition at line 60 of file Mq3cPixelization.h.