LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
29#include "lsst/pex/exceptions.h"
31
32namespace lsst {
33namespace afw {
34namespace coord {
35
37 : _airTemperature(airTemperature), _airPressure(airPressure), _humidity(humidity) {
38 validate();
39}
40
41bool 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
53 // Completely arbitrary seed
54 return utils::hashCombine(17, _airTemperature, _airPressure, _humidity);
55}
56
57void Weather::validate() const {
58 if (_humidity < 0.0) { // allow > 100 even though supersaturation is most unlikely
60 os << "Relative humidity = " << _humidity << " must not be negative";
62 }
63}
64
66 return os << "Weather(" << weath.getAirTemperature() << ", " << weath.getAirPressure() << ", "
67 << weath.getHumidity() << ")";
68}
69} // namespace coord
70} // namespace afw
71} // namespace lsst
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
std::ostream * os
Definition Schema.cc:557
table::Key< double > airPressure
Definition VisitInfo.cc:219
table::Key< double > airTemperature
Definition VisitInfo.cc:218
table::Key< double > humidity
Definition VisitInfo.cc:220
Basic weather information sufficient for a simple model for air mass or refraction.
Definition Weather.h:38
bool operator==(Weather const &other) const noexcept
Definition Weather.cc:41
double getHumidity() const noexcept
get outside relative humidity (%)
Definition Weather.h:70
double getAirPressure() const noexcept
get outside air pressure (Pascal)
Definition Weather.h:67
double getAirTemperature() const noexcept
get outside air temperature (C)
Definition Weather.h:64
Weather(double airTemperature, double airPressure, double humidity)
Construct a Weather.
Definition Weather.cc:36
std::size_t hash_value() const noexcept
Return a hash of this object.
Definition Weather.cc:52
Reports invalid arguments.
Definition Runtime.h:66
T isnan(T... args)
std::ostream & operator<<(std::ostream &os, Observatory const &obs)
Print an Observatory to the stream.
std::size_t hashCombine(std::size_t seed) noexcept
Combine hashes.
Definition hashCombine.h:35