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
RectangularRegion.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 
25 
33 #include "lsst/pex/exceptions.h"
34 
35 #include "lsst/ap/CircularRegion.h"
37 #include "lsst/ap/SpatialUtil.h"
38 
39 
40 namespace ex = lsst::pex::exceptions;
41 
43  double const minRa,
44  double const maxRa,
45  double const minDec,
46  double const maxDec
47 ) :
48  _minRa(minRa),
49  _maxRa(maxRa),
50  _minDec(minDec),
51  _maxDec(maxDec)
52 {
53  if (minRa < 0.0 || minRa >= 360.0 || maxRa < 0.0 || maxRa >= 360.0) {
54  throw LSST_EXCEPT(ex::RangeError,
55  "right ascension must be in range [0, 360) degrees");
56  }
57  if (minDec < -90.0 || minDec > 90.0 || maxDec < -90.0 || maxDec > 90.0) {
58  throw LSST_EXCEPT(ex::RangeError,
59  "declination must be in range [-90, 90] degrees");
60  }
61  if (maxDec < minDec) {
62  throw LSST_EXCEPT(ex::InvalidParameterError,
63  "minimum declination greater than maximum declination");
64  }
65 }
66 
67 
69  double const centerRa,
70  double const centerDec,
71  double const radius
72 ) {
73  fromCircle(centerRa, centerDec, radius);
74 }
75 
76 
78  fromCircle(region.getCenterRa(), region.getCenterDec(), region.getRadius());
79 }
80 
81 
83  double const ra,
84  double const dec,
85  double const radius
86 ) {
87  if (ra < 0.0 || ra >= 360.0) {
88  throw LSST_EXCEPT(ex::RangeError,
89  "right ascension must be in range [0, 360) degrees");
90  }
91  if (dec < -90.0 || dec > 90.0) {
92  throw LSST_EXCEPT(ex::RangeError,
93  "declination must be in range [-90, 90] degrees");
94  }
95  if (radius < 0.0 || radius > 90.0) {
96  throw LSST_EXCEPT(ex::RangeError,
97  "circle radius must be in range [0, 90] degrees");
98  }
99  double alpha = maxAlpha(radius, dec);
100  _minRa = ra - alpha;
101  if (_minRa < 0.0) {
102  _minRa += 360.0;
103  }
104  _maxRa = ra + alpha;
105  if (_maxRa >= 360.0) {
106  _maxRa -= 360.0;
107  }
108  _minDec = dec - radius;
109  if (_minDec < -90.0) {
110  _minDec = -90.0;
111  }
112  _maxDec = dec + radius;
113  if (_maxDec > 90.0) {
114  _maxDec = 90.0;
115  }
116 }
117 
A circular region of the unit sphere (sky).
double getRadius() const
Returns the radius of the circle.
double getCenterDec() const
Returns the declination of the circle center.
void fromCircle(double const centerRa, double const centerDec, double const radius)
double getCenterRa() const
Returns the right ascension of the circle center.
double maxAlpha(double const theta, double const centerDec)
Definition: SpatialUtil.cc:279
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
double alpha(double const theta, double const centerDec, double const dec)
Definition: SpatialUtil.cc:248
Class describing a circular region on the sky.
Class describing a rectangular (in ra and dec) region on the sky.
Include files required for standard LSST Exception handling.
Class and helper functions related to spatial partitioning.