UFO
TrackCheckUtils.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2020 Met Office UK
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #ifndef UFO_FILTERS_TRACKCHECKUTILS_H_
9 #define UFO_FILTERS_TRACKCHECKUTILS_H_
10 
11 #include <array>
12 #include <memory>
13 #include <vector>
14 
15 #include "eckit/config/Configuration.h"
16 #include "oops/util/DateTime.h"
17 #include "oops/util/Duration.h"
18 #include "ufo/filters/Variable.h"
19 
20 namespace eckit {
21 class Configuration;
22 }
23 
24 namespace ioda {
25 template <typename DATATYPE> class ObsDataVector;
26 class ObsSpace;
27 }
28 
29 namespace ufo {
30 
31 inline util::Duration abs(const util::Duration &duration) {
32  return duration.toSeconds() >= 0 ? duration : -duration;
33 }
34 
35 class RecursiveSplitter;
36 
37 namespace TrackCheckUtils {
38 typedef std::array<float, 3> Point;
39 float distance(const Point &a, const Point &b);
40 
41 enum class CheckResult : char
42 {
43  FAILED = false,
44  PASSED = true,
45  SKIPPED
46 };
47 
49 
50 /// \brief Locations/times of all observations processed by the track checking filter.
52  public:
53  std::vector<float> latitudes;
54  std::vector<float> longitudes;
55  std::vector<util::DateTime> datetimes;
56 };
57 
59  public:
60  ObsLocationTime(float latitude, float longitude,
61  const util::DateTime &time);
62  const Point &location() const { return location_; }
63  const util::DateTime &time() const { return time_; }
64  private:
66  util::DateTime time_;
67 };
68 
69 class CheckCounter {
70  public:
71  CheckCounter();
72 
73  float failedChecksFraction() const;
74  void registerCheckResult(const CheckResult &result);
75  void unregisterCheckResult(const CheckResult &result);
76  private:
79 };
80 
81 std::vector<size_t> getValidObservationIds(
82  const std::vector<bool> &apply,
83  const std::shared_ptr<ioda::ObsDataVector<int>> &flags);
84 
85 void groupObservationsByStation(const std::vector<size_t> &validObsIds,
86  RecursiveSplitter &splitter,
87  const eckit::Configuration &config,
88  const ioda::ObsSpace &obsdb);
89 
90 void groupObservationsByRecordNumber(const std::vector<size_t> &validObsIds,
91  RecursiveSplitter &splitter,
92  const ioda::ObsSpace &obsdb);
93 
94 void groupObservationsByVariable(const Variable &variable,
95  const std::vector<size_t> &validObsIds,
96  RecursiveSplitter &splitter, const ioda::ObsSpace &obsdb);
97 
98 template <typename VariableType>
99 void groupObservationsByTypedVariable(const Variable &variable,
100  const std::vector<size_t> &validObsIds,
101  RecursiveSplitter &splitter,
102  const ioda::ObsSpace &obsdb);
103 
104 void sortTracksChronologically(const std::vector<size_t> &validObsIds,
105  RecursiveSplitter &splitter,
106  const ioda::ObsSpace &obsdb);
107 
108 ObsGroupLocationTimes collectObservationsLocations(const ioda::ObsSpace &obsdb);
109 
110 void flagRejectedObservations(const std::vector<bool> &isRejected,
111  std::vector<std::vector<bool> > &flagged);
112 
113 } // namespace TrackCheckUtils
114 
115 } // namespace ufo
116 
117 #endif // UFO_FILTERS_TRACKCHECKUTILS_H_
ufo::TrackCheckUtils::SweepResult::ANOTHER_SWEEP_REQUIRED
@ ANOTHER_SWEEP_REQUIRED
ufo::TrackCheckUtils::ObsLocationTime::location_
Point location_
Definition: TrackCheckUtils.h:65
ufo::TrackCheckUtils::ObsLocationTime::ObsLocationTime
ObsLocationTime(float latitude, float longitude, const util::DateTime &time)
Definition: TrackCheckUtils.cc:169
ufo::TrackCheckUtils::CheckCounter::numFailedChecks_
int numFailedChecks_
Definition: TrackCheckUtils.h:77
ufo::TrackCheckUtils::CheckCounter::CheckCounter
CheckCounter()
Definition: TrackCheckUtils.cc:177
ufo::TrackCheckUtils::getValidObservationIds
std::vector< size_t > getValidObservationIds(const std::vector< bool > &apply, const std::shared_ptr< ioda::ObsDataVector< int >> &flags)
Definition: TrackCheckUtils.cc:66
ufo::TrackCheckUtils::ObsLocationTime::location
const Point & location() const
Definition: TrackCheckUtils.h:62
ufo::TrackCheckUtils::ObsLocationTime
Definition: TrackCheckUtils.h:58
ufo::TrackCheckUtils::groupObservationsByTypedVariable
void groupObservationsByTypedVariable(const Variable &variable, const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter, const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:123
ufo::TrackCheckUtils::CheckCounter
Definition: TrackCheckUtils.h:69
ufo::RecursiveSplitter
Partitions an array into groups of elements equivalent according to certain criteria.
Definition: src/ufo/utils/RecursiveSplitter.h:63
ufo::TrackCheckUtils::CheckCounter::failedChecksFraction
float failedChecksFraction() const
Definition: TrackCheckUtils.cc:174
ufo::TrackCheckUtils::CheckCounter::registerCheckResult
void registerCheckResult(const CheckResult &result)
Definition: TrackCheckUtils.cc:180
ufo::TrackCheckUtils::CheckResult::SKIPPED
@ SKIPPED
ufo::TrackCheckUtils::ObsGroupLocationTimes::datetimes
std::vector< util::DateTime > datetimes
Definition: TrackCheckUtils.h:55
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::TrackCheckUtils::SweepResult
SweepResult
Definition: TrackCheckUtils.h:48
ufo::TrackCheckUtils::ObsLocationTime::time_
util::DateTime time_
Definition: TrackCheckUtils.h:66
ufo::TrackCheckUtils::CheckCounter::unregisterCheckResult
void unregisterCheckResult(const CheckResult &result)
Definition: TrackCheckUtils.cc:190
ufo::TrackCheckUtils::groupObservationsByVariable
void groupObservationsByVariable(const Variable &variable, const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter, const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:104
ufo::TrackCheckUtils::Point
std::array< float, 3 > Point
Definition: TrackCheckUtils.h:38
eckit
Forward declarations.
Definition: ObsAtmSfcInterp.h:20
ufo::TrackCheckUtils::groupObservationsByStation
void groupObservationsByStation(const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter, const eckit::Configuration &config, const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:75
ufo::TrackCheckUtils::collectObservationsLocations
ObsGroupLocationTimes collectObservationsLocations(const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:145
ufo::TrackCheckUtils::ObsGroupLocationTimes::latitudes
std::vector< float > latitudes
Definition: TrackCheckUtils.h:53
ufo::abs
util::Duration abs(const util::Duration &duration)
Definition: TrackCheckUtils.h:31
ioda::ObsDataVector< int >
ufo::TrackCheckUtils::ObsLocationTime::time
const util::DateTime & time() const
Definition: TrackCheckUtils.h:63
ufo::TrackCheckUtils::SweepResult::NO_MORE_SWEEPS_REQUIRED
@ NO_MORE_SWEEPS_REQUIRED
ufo::TrackCheckUtils::ObsGroupLocationTimes
Locations/times of all observations processed by the track checking filter.
Definition: TrackCheckUtils.h:51
ufo::TrackCheckUtils::distance
float distance(const Point &a, const Point &b)
Returns the distance between the two cartesian-mapped Point arguments
Definition: TrackCheckUtils.cc:51
ufo::TrackCheckUtils::CheckCounter::numChecks_
int numChecks_
Definition: TrackCheckUtils.h:78
ufo::TrackCheckUtils::sortTracksChronologically
void sortTracksChronologically(const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter, const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:135
ufo::TrackCheckUtils::groupObservationsByRecordNumber
void groupObservationsByRecordNumber(const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter, const ioda::ObsSpace &obsdb)
Definition: TrackCheckUtils.cc:95
ufo::Variable
Definition: Variable.h:23
ufo::TrackCheckUtils::CheckResult::FAILED
@ FAILED
ufo::TrackCheckUtils::flagRejectedObservations
void flagRejectedObservations(const std::vector< bool > &isRejected, std::vector< std::vector< bool > > &flagged)
Definition: TrackCheckUtils.cc:160
ufo::TrackCheckUtils::ObsGroupLocationTimes::longitudes
std::vector< float > longitudes
Definition: TrackCheckUtils.h:54
ufo::TrackCheckUtils::CheckResult::PASSED
@ PASSED
ufo::TrackCheckUtils::CheckResult
CheckResult
Definition: TrackCheckUtils.h:42
Variable.h