lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
coord
Weather.cc
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 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
#include <cmath>
26
#include <sstream>
27
28
#include "
lsst/cpputils/hashCombine.h
"
29
#include "
lsst/pex/exceptions.h
"
30
#include "
lsst/afw/coord/Weather.h
"
31
32
namespace
lsst
{
33
namespace
afw
{
34
namespace
coord
{
35
36
Weather::Weather
(
double
airTemperature,
double
airPressure,
double
humidity)
37
: _airTemperature(airTemperature), _airPressure(airPressure), _humidity(humidity) {
38
validate();
39
}
40
41
bool
Weather::operator==
(
Weather
const
& other)
const
noexcept
{
42
// Weather may be initialized to NaN values as a placeholder, or to indicate "unknown".
43
bool
tempMatch = (
std::isnan
(_airTemperature) &&
std::isnan
(other.getAirTemperature())) ||
44
_airTemperature == other.getAirTemperature();
45
bool
presMatch = (
std::isnan
(_airPressure) &&
std::isnan
(other.getAirPressure())) ||
46
_airPressure == other.getAirPressure();
47
bool
humiMatch =
48
(
std::isnan
(_humidity) &&
std::isnan
(other.getHumidity())) || _humidity == other.getHumidity();
49
return
(tempMatch && presMatch && humiMatch);
50
}
51
52
std::size_t
Weather::hash_value
() const noexcept {
53
// Completely arbitrary seed
54
return
cpputils::hashCombine
(17, _airTemperature, _airPressure, _humidity);
55
}
56
57
void
Weather::validate()
const
{
58
if
(_humidity < 0.0) {
// allow > 100 even though supersaturation is most unlikely
59
std::ostringstream
os;
60
os <<
"Relative humidity = "
<< _humidity <<
" must not be negative"
;
61
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
, os.
str
());
62
}
63
}
64
65
std::ostream
&
operator<<
(
std::ostream
& os,
Weather
const
& weath) {
66
return
os <<
"Weather("
<< weath.
getAirTemperature
() <<
", "
<< weath.
getAirPressure
() <<
", "
67
<< weath.
getHumidity
() <<
")"
;
68
}
69
}
// namespace coord
70
}
// namespace afw
71
}
// namespace lsst
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Weather.h
std::ostream
std::ostringstream
lsst::afw::coord::Weather
Basic weather information sufficient for a simple model for air mass or refraction.
Definition
Weather.h:38
lsst::afw::coord::Weather::operator==
bool operator==(Weather const &other) const noexcept
Definition
Weather.cc:41
lsst::afw::coord::Weather::getHumidity
double getHumidity() const noexcept
get outside relative humidity (%)
Definition
Weather.h:70
lsst::afw::coord::Weather::getAirPressure
double getAirPressure() const noexcept
get outside air pressure (Pascal)
Definition
Weather.h:67
lsst::afw::coord::Weather::getAirTemperature
double getAirTemperature() const noexcept
get outside air temperature (C)
Definition
Weather.h:64
lsst::afw::coord::Weather::Weather
Weather(double airTemperature, double airPressure, double humidity)
Construct a Weather.
Definition
Weather.cc:36
lsst::afw::coord::Weather::hash_value
std::size_t hash_value() const noexcept
Return a hash of this object.
Definition
Weather.cc:52
lsst::pex::exceptions::InvalidParameterError
exceptions.h
hashCombine.h
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
std::size_t
std::ostringstream::str
T str(T... args)
Generated on
for lsst.afw by
1.17.0