8 #ifndef UFO_FILTERS_TRACKCHECKUTILS_H_
9 #define UFO_FILTERS_TRACKCHECKUTILS_H_
15 #include <boost/optional.hpp>
17 #include "eckit/config/Configuration.h"
18 #include "oops/util/DateTime.h"
19 #include "oops/util/Duration.h"
27 template <
typename DATATYPE>
class ObsDataVector;
33 inline util::Duration
abs(
const util::Duration &duration) {
34 return duration.toSeconds() >= 0 ? duration : -duration;
38 class RecursiveSplitter;
40 namespace TrackCheckUtils {
41 typedef std::array<float, 3>
Point;
64 const util::DateTime &
time);
66 const util::DateTime &
time()
const {
return time_; }
99 const ioda::ObsSpace &obsdb);
This class provides access to observations that may be held on multiple MPI ranks.
Partitions an array into groups of elements equivalent according to certain criteria.
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
const Point & location() const
ObsLocationTime(float latitude, float longitude, const util::DateTime &time)
const util::DateTime & time() const
ObsGroupLocationTimes collectObservationsLocations(const ObsAccessor &obsAccessor)
@ NO_MORE_SWEEPS_REQUIRED
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
util::Duration abs(const util::Duration &duration)