13 #include "eckit/exception/Exceptions.h"
14 #include "eckit/geometry/Point2.h"
15 #include "eckit/geometry/Point3.h"
16 #include "eckit/geometry/Sphere.h"
17 #include "ioda/ObsSpace.h"
18 #include "oops/util/DateTime.h"
19 #include "oops/util/sqr.h"
32 for (
size_t i = 0; i < a.size(); ++i)
33 sum += util::sqr(a[i] - b[i]);
41 eckit::geometry::Point3 eckitPoint;
42 eckit::geometry::Sphere::convertSphericalToCartesian(
43 meanEarthRadius, eckit::geometry::Point2(longitude, latitude), eckitPoint);
45 std::copy(eckitPoint.begin(), eckitPoint.end(),
Point.begin());
56 const ioda::ObsSpace &obsdb) {
57 if (stationIdVariable != boost::none) {
59 obsdb, *stationIdVariable);
60 }
else if (!obsdb.obs_group_vars().empty()) {
74 "MetaData",
"datetime");
75 splitter.
sortGroupsBy([×, &validObsIds](
size_t obsIndex)
76 {
return times[validObsIds[obsIndex]]; });
91 const util::DateTime &time)
96 return numChecks_ != 0 ?
static_cast<float>(numFailedChecks_) / numChecks_ : 0.0f;
100 : numFailedChecks_(0), numChecks_(0)
108 assert(numChecks_ >= 0);
109 assert(numFailedChecks_ >= 0);
110 assert(numFailedChecks_ <= numChecks_);
118 assert(numChecks_ >= 0);
119 assert(numFailedChecks_ >= 0);
120 assert(numFailedChecks_ <= numChecks_);
This class provides access to observations that may be held on multiple MPI ranks.
static ObsAccessor toObservationsSplitIntoIndependentGroupsByRecordId(const ioda::ObsSpace &obsdb)
Create an accessor to the collection of observations held in obsdb, assuming that each record can be ...
static ObsAccessor toAllObservations(const ioda::ObsSpace &obsdb)
Create an accessor to observations from the observation space obsdb, assuming that the whole set of o...
static ObsAccessor toObservationsSplitIntoIndependentGroupsByVariable(const ioda::ObsSpace &obsdb, const Variable &variable)
Create an accessor to the collection of observations held in obsdb, assuming that observations with d...
std::vector< float > getFloatVariableFromObsSpace(const std::string &group, const std::string &variable) const
std::vector< util::DateTime > getDateTimeVariableFromObsSpace(const std::string &group, const std::string &variable) const
Partitions an array into groups of elements equivalent according to certain criteria.
void sortGroupsBy(const UnaryOperation &key)
Sort the elements in each equivalence class in ascending order.
float failedChecksFraction() const
void registerCheckResult(const CheckResult &result)
void unregisterCheckResult(const CheckResult &result)
Locations/times of all observations processed by the track checking filter.
std::vector< float > longitudes
std::vector< float > latitudes
std::vector< util::DateTime > datetimes
ObsLocationTime(float latitude, float longitude, const util::DateTime &time)
ObsGroupLocationTimes collectObservationsLocations(const ObsAccessor &obsAccessor)
ObsAccessor createObsAccessor(const boost::optional< Variable > &stationIdVariable, const ioda::ObsSpace &obsdb)
Create an ObsAccessor object providing access to observations that need to be checked by the current ...
void sortTracksChronologically(const std::vector< size_t > &validObsIds, const ObsAccessor &obsAccessor, RecursiveSplitter &splitter)
float distance(const Point &a, const Point &b)
Returns the distance between the two cartesian-mapped Point arguments
std::array< float, 3 > Point
float distance2(const TrackCheckUtils::Point &a, const TrackCheckUtils::Point &b)
Returns the square of the distance between the two Point arguments.
TrackCheckUtils::Point pointFromLatLon(float latitude, float longitude)
static constexpr double mean_earth_rad