lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
include
lsst
afw
coord
Observatory.h
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 2008-2016 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
#if !defined(LSST_AFW_COORD_OBSERVATORY_H)
26
#define LSST_AFW_COORD_OBSERVATORY_H
27
/*
28
* Class to hold observatory/telescope location
29
*/
30
31
#include <iostream>
32
33
#include "
lsst/cpputils/hashCombine.h
"
34
#include "
lsst/geom/Angle.h
"
35
36
namespace
lsst
{
37
namespace
afw
{
38
namespace
coord
{
39
43
class
Observatory
final {
44
public
:
52
Observatory
(
lsst::geom::Angle
const
longitude,
lsst::geom::Angle
const
latitude,
double
const
elevation);
53
62
Observatory
(
std::string
const
& longitude,
std::string
const
& latitude,
double
const
elevation);
63
64
~Observatory
() noexcept;
65
Observatory
(
Observatory
const&) noexcept;
66
Observatory
(
Observatory
&&) noexcept;
67
Observatory
& operator=(
Observatory
const&) noexcept;
68
Observatory
& operator=(
Observatory
&&) noexcept;
69
71
void
setLongitude
(
lsst
::
geom
::Angle const longitude);
73
void
setLatitude
(
lsst
::
geom
::Angle const latitude);
75
void
setElevation
(
double
const elevation);
76
78
lsst
::
geom
::Angle
getLongitude
() const noexcept;
80
lsst
::
geom
::Angle
getLatitude
() const noexcept;
82
double
getElevation
() const noexcept {
return
_elevation; }
83
85
std::string
toString
()
const
;
86
87
bool
operator==
(
Observatory
const
& rhs)
const
noexcept
{
88
// Observatory may be initialized to NaN values as a placeholder, or to indicate "unknown".
89
auto
deltaLongitude =
std::isnan
(_latitude.asRadians()) &&
std::isnan
(rhs._latitude.asRadians())
90
? 0.0 *
lsst::geom::degrees
91
: (_latitude - rhs._latitude).wrapCtr();
92
auto
deltaLatitude =
std::isnan
(_longitude.asRadians()) &&
std::isnan
(rhs._longitude.asRadians())
93
? 0.0 *
lsst::geom::degrees
94
: (_longitude - rhs._longitude).wrapCtr();
95
return
(deltaLongitude == 0.0 *
lsst::geom::degrees
) &&
96
(deltaLatitude == 0.0 *
lsst::geom::degrees
) &&
97
((
std::isnan
(_elevation) &&
std::isnan
(rhs._elevation)) ||
98
(_elevation - rhs._elevation) == 0.0);
99
}
100
bool
operator!=
(
Observatory
const
& rhs)
const
noexcept
{
return
!(*
this
== rhs); }
101
103
std::size_t
hash_value
() const noexcept {
104
// Completely arbitrary seed
105
return
cpputils::hashCombine
(17, _latitude.wrapCtr(), _longitude.wrapCtr(), _elevation);
106
}
107
108
private
:
109
lsst::geom::Angle
_latitude;
110
lsst::geom::Angle
_longitude;
111
double
_elevation;
112
};
113
120
std::ostream
&
operator<<
(
std::ostream
& os, Observatory
const
& obs);
121
}
// namespace coord
122
}
// namespace afw
123
}
// namespace lsst
124
125
namespace
std
{
126
template
<>
127
struct
hash
<
lsst
::afw::coord::Observatory> {
128
using
argument_type
=
lsst::afw::coord::Observatory
;
129
using
result_type
=
size_t
;
130
size_t
operator()
(
argument_type
const
& obj)
const
noexcept
{
return
obj.hash_value(); }
131
};
132
}
// namespace std
133
134
#endif
Angle.h
std::ostream
std::string
lsst::afw::coord::Observatory
Hold the location of an observatory.
Definition
Observatory.h:43
lsst::afw::coord::Observatory::setLatitude
void setLatitude(lsst::geom::Angle const latitude)
set telescope latitude (positive values are E of Greenwich)
Definition
Observatory.cc:54
lsst::afw::coord::Observatory::toString
std::string toString() const
get string representation
Definition
Observatory.cc:60
lsst::afw::coord::Observatory::getElevation
double getElevation() const noexcept
get telescope elevation (meters above reference spheroid)
Definition
Observatory.h:82
lsst::afw::coord::Observatory::hash_value
std::size_t hash_value() const noexcept
Return a hash of this object.
Definition
Observatory.h:103
lsst::afw::coord::Observatory::Observatory
Observatory(std::string const &longitude, std::string const &latitude, double const elevation)
Construct an Observatory with longitude and latitude specified as sexagesimal strings.
lsst::afw::coord::Observatory::setElevation
void setElevation(double const elevation)
set telescope elevation (meters above reference spheroid)
Definition
Observatory.cc:58
lsst::afw::coord::Observatory::~Observatory
~Observatory() noexcept
lsst::afw::coord::Observatory::operator!=
bool operator!=(Observatory const &rhs) const noexcept
Definition
Observatory.h:100
lsst::afw::coord::Observatory::setLongitude
void setLongitude(lsst::geom::Angle const longitude)
set telescope longitude
Definition
Observatory.cc:56
lsst::afw::coord::Observatory::operator==
bool operator==(Observatory const &rhs) const noexcept
Definition
Observatory.h:87
lsst::afw::coord::Observatory::getLatitude
lsst::geom::Angle getLatitude() const noexcept
get telescope latitude
Definition
Observatory.cc:52
lsst::afw::coord::Observatory::Observatory
Observatory(lsst::geom::Angle const longitude, lsst::geom::Angle const latitude, double const elevation)
Construct an Observatory with longitude and latitude specified as lsst::geom::Angle.
Definition
Observatory.cc:39
lsst::afw::coord::Observatory::getLongitude
lsst::geom::Angle getLongitude() const noexcept
get telescope longitude (positive values are E of Greenwich)
Definition
Observatory.cc:50
lsst::geom::Angle
hashCombine.h
std::hash< lsst::afw::coord::Observatory >::hash
T hash(T... args)
std::isnan
T isnan(T... args)
lsst::afw::coord
Definition
Observatory.h:38
lsst::afw::coord::operator<<
std::ostream & operator<<(std::ostream &os, Observatory const &obs)
Print an Observatory to the stream.
Definition
Observatory.cc:67
lsst::afw
Definition
imageAlgorithm.dox:1
lsst::cpputils::hashCombine
std::size_t hashCombine(std::size_t seed) noexcept
lsst::geom
lsst::geom::degrees
AngleUnit constexpr degrees
lsst
std
STL namespace.
std::size_t
std::hash< lsst::afw::coord::Observatory >::operator()
size_t operator()(argument_type const &obj) const noexcept
Definition
Observatory.h:130
std::hash< lsst::afw::coord::Observatory >::argument_type
lsst::afw::coord::Observatory argument_type
Definition
Observatory.h:128
std::hash< lsst::afw::coord::Observatory >::result_type
size_t result_type
Definition
Observatory.h:129
Generated on
for lsst.afw by
1.17.0