LSSTApplications  1.1.2+25,10.0+13,10.0+132,10.0+133,10.0+224,10.0+41,10.0+8,10.0-1-g0f53050+14,10.0-1-g4b7b172+19,10.0-1-g61a5bae+98,10.0-1-g7408a83+3,10.0-1-gc1e0f5a+19,10.0-1-gdb4482e+14,10.0-11-g3947115+2,10.0-12-g8719d8b+2,10.0-15-ga3f480f+1,10.0-2-g4f67435,10.0-2-gcb4bc6c+26,10.0-28-gf7f57a9+1,10.0-3-g1bbe32c+14,10.0-3-g5b46d21,10.0-4-g027f45f+5,10.0-4-g86f66b5+2,10.0-4-gc4fccf3+24,10.0-40-g4349866+2,10.0-5-g766159b,10.0-5-gca2295e+25,10.0-6-g462a451+1
LSSTDataManagementBasePackage
PT1SkyTile.cc
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008, 2009, 2010 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
32 
33 #include <cmath>
34 
35 #include "lsst/pex/exceptions.h"
36 #include "lsst/afw/geom/Angle.h"
37 
38 
39 namespace except = lsst::pex::exceptions;
40 
44 
45 namespace lsst { namespace ap { namespace utils {
46 
57 PT1SkyTile::PT1SkyTile(int resolution, int root, int x, int y, int id) :
58  _resolution(resolution),
59  _root(root),
60  _x(x),
61  _y(y),
62  _id(id)
63 {
64  if (resolution < 3) {
65  throw LSST_EXCEPT(except::InvalidParameterError,
66  "invalid quad-sphere resolution");
67  }
68  if (root < 0 || root > 5) {
69  throw LSST_EXCEPT(except::InvalidParameterError,
70  "quad-sphere root pixel number not in range [0, 6)");
71  }
72  if (x < 0 || x >= resolution || y < 0 || y >= resolution) {
73  throw LSST_EXCEPT(except::InvalidParameterError,
74  "quad sphere sky-pixel coordinates out of bounds");
75  }
76 }
77 
79 
80 bool PT1SkyTile::contains(Coord const & coord) const {
81  double theta = coord.getLongitude().asRadians();
82  double phi = coord.getLatitude().asRadians();
83  int root = static_cast<int>(std::fmod(0.5 + 2.0 * ONE_OVER_PI * theta, 4.0));
84  double theta1 = theta - 0.5 * PI * root;
85  double tanPhi = std::tan(phi);
86  double x, y = tanPhi / std::cos(theta1);
87  if (y > 1.0) {
88  if (_root != 0) {
89  return false;
90  }
91  x = -std::sin(theta) / tanPhi;
92  y = std::cos(theta) / tanPhi;
93  } else if (y < -1.0) {
94  if (_root != 5) {
95  return false;
96  }
97  x = std::sin(theta) / tanPhi;
98  y = std::cos(theta) / tanPhi;
99  } else {
100  if (_root != root + 1) {
101  return false;
102  }
103  x = std::tan(theta1);
104  }
105  int ix = static_cast<int>(std::floor(_resolution * 0.5 * (x + 1.0)));
106  int iy = static_cast<int>(std::floor(_resolution * 0.5 * (y + 1.0)));
107  if (ix >= _resolution) {
108  ix = _resolution - 1;
109  }
110  if (iy >= _resolution) {
111  iy = _resolution - 1;
112  }
113  return _x == ix && _y == iy;
114 }
115 
116 }}} // namespace lsst:ap::utils
int y
lsst::afw::coord::Coord Coord
Definition: misc.h:39
int64_t _id
PT1SkyTile(int resolution, int root, int x, int y, int id)
Definition: PT1SkyTile.cc:57
double asRadians() const
Definition: Angle.h:122
double _y
Definition: ImageUtils.cc:328
double const ONE_OVER_PI
Definition: Angle.h:21
int x
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
Extent< int, N > floor(Extent< double, N > const &input)
lsst::afw::geom::Angle getLongitude() const
The main access method for the longitudinal coordinate.
Definition: Coord.h:111
bool contains(lsst::afw::coord::Coord const &coord) const
Return true if the given coordinates lie inside the sky tile.
Definition: PT1SkyTile.cc:80
double const PI
The ratio of a circle&#39;s circumference to diameter.
Definition: Angle.h:18
lsst::afw::geom::Angle getLatitude() const
The main access method for the latitudinal coordinate.
Definition: Coord.h:118
Include files required for standard LSST Exception handling.
Class representing a PT1 sky tile.