LSSTApplications  16.0-10-g0ee56ad+5,16.0-11-ga33d1f2+5,16.0-12-g3ef5c14+3,16.0-12-g71e5ef5+18,16.0-12-gbdf3636+3,16.0-13-g118c103+3,16.0-13-g8f68b0a+3,16.0-15-gbf5c1cb+4,16.0-16-gfd17674+3,16.0-17-g7c01f5c+3,16.0-18-g0a50484+1,16.0-20-ga20f992+8,16.0-21-g0e05fd4+6,16.0-21-g15e2d33+4,16.0-22-g62d8060+4,16.0-22-g847a80f+4,16.0-25-gf00d9b8+1,16.0-28-g3990c221+4,16.0-3-gf928089+3,16.0-32-g88a4f23+5,16.0-34-gd7987ad+3,16.0-37-gc7333cb+2,16.0-4-g10fc685+2,16.0-4-g18f3627+26,16.0-4-g5f3a788+26,16.0-5-gaf5c3d7+4,16.0-5-gcc1f4bb+1,16.0-6-g3b92700+4,16.0-6-g4412fcd+3,16.0-6-g7235603+4,16.0-69-g2562ce1b+2,16.0-8-g14ebd58+4,16.0-8-g2df868b+1,16.0-8-g4cec79c+6,16.0-8-gadf6c7a+1,16.0-8-gfc7ad86,16.0-82-g59ec2a54a+1,16.0-9-g5400cdc+2,16.0-9-ge6233d7+5,master-g2880f2d8cf+3,v17.0.rc1
LSSTDataManagementBasePackage
Mq3cPixelization.h
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2016 AURA/LSST.
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 <https://www.lsstcorp.org/LegalNotices/>.
21  */
22 
23 #ifndef LSST_SPHGEOM_MQ3CPIXELIZATION_H_
24 #define LSST_SPHGEOM_MQ3CPIXELIZATION_H_
25 
29 
30 #include <cstdint>
31 #include <vector>
32 
33 #include "ConvexPolygon.h"
34 #include "Pixelization.h"
35 
36 
37 namespace lsst {
38 namespace sphgeom {
39 
51 public:
53  static constexpr int MAX_LEVEL = 30;
54 
58  static int level(uint64_t i);
59 
65  static ConvexPolygon quad(uint64_t i);
66 
74  static std::vector<uint64_t> neighborhood(uint64_t i);
75 
88  static std::string asString(uint64_t i);
89 
93  explicit Mq3cPixelization(int level);
94 
96  int getLevel() const { return _level; }
97 
98  RangeSet universe() const override {
99  return RangeSet(static_cast<uint64_t>(10) << 2 * _level,
100  static_cast<uint64_t>(16) << 2 * _level);
101  }
102 
103  std::unique_ptr<Region> pixel(uint64_t i) const override;
104 
105  uint64_t index(UnitVector3d const & v) const override;
106 
107  std::string toString(uint64_t i) const override { return asString(i); }
108 
109 private:
110  int _level;
111 
112  RangeSet _envelope(Region const & r, size_t maxRanges) const override;
113  RangeSet _interior(Region const & r, size_t maxRanges) const override;
114 };
115 
116 }} // namespace lsst::sphgeom
117 
118 #endif // LSST_SPHGEOM_MQ3CPIXELIZATION_H_
uint64_t index(UnitVector3d const &v) const override
index computes the index of the pixel for v.
static int level(uint64_t i)
level returns the subdivision level of the given modified Q3C index.
STL class.
A base class for image defects.
static std::string asString(uint64_t i)
toString converts the given modified-Q3C index to a human readable string.
Region is a minimal interface for 2-dimensional regions on the unit sphere.
Definition: Region.h:79
static ConvexPolygon quad(uint64_t i)
quad returns the quadrilateral corresponding to the modified Q3C pixel with index i...
RangeSet universe() const override
universe returns the set of all pixel indexes for this pixelization.
static std::vector< uint64_t > neighborhood(uint64_t i)
neighborhood returns the indexes of all pixels that share a vertex with pixel i (including i itself)...
A Pixelization (or partitioning) of the sphere is a mapping between points on the sphere and a set of...
Definition: Pixelization.h:77
ConvexPolygon is a closed convex polygon on the unit sphere.
Definition: ConvexPolygon.h:57
std::string toString(uint64_t i) const override
toString converts the given pixel index to a human-readable string.
Mq3cPixelization(int level)
This constructor creates a modified Q3C pixelization of the sphere with the given subdivision level...
STL class.
A RangeSet is a set of unsigned 64 bit integers.
Definition: RangeSet.h:99
UnitVector3d is a unit vector in ℝ³ with components stored in double precision.
Definition: UnitVector3d.h:55
This file defines an interface for pixelizations of the sphere.
static constexpr int MAX_LEVEL
The maximum supported cube-face grid resolution is 2^30 by 2^30.
int getLevel() const
getLevel returns the subdivision level of this pixelization.
This file declares a class for representing convex polygons with great circle edges on the unit spher...
Mq3cPixelization provides modified Q3C indexing of points and regions.
std::unique_ptr< Region > pixel(uint64_t i) const override
pixel returns the spherical region corresponding to the pixel with index i.