8 #ifndef TEST_UFO_TRACKCHECK_H_
9 #define TEST_UFO_TRACKCHECK_H_
16 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
18 #include "eckit/config/LocalConfiguration.h"
19 #include "eckit/testing/Test.h"
20 #include "ioda/ObsSpace.h"
21 #include "ioda/ObsVector.h"
22 #include "oops/mpi/mpi.h"
23 #include "oops/runs/Test.h"
24 #include "oops/util/Expect.h"
25 #include "test/TestEnvironment.h"
33 util::DateTime bgn(conf.getString(
"window begin"));
34 util::DateTime end(conf.getString(
"window end"));
36 const eckit::LocalConfiguration obsSpaceConf(conf,
"obs space");
37 ioda::ObsTopLevelParameters obsParams;
38 obsParams.validateAndDeserialize(obsSpaceConf);
39 ioda::ObsSpace obsspace(obsParams, oops::mpi::world(), bgn, end, oops::mpi::myself());
41 if (conf.has(
"air_pressures")) {
42 const std::vector<float> airPressures = conf.getFloatVector(
"air_pressures");
43 obsspace.put_db(
"MetaData",
"air_pressure", airPressures);
44 const std::vector<float> airPressureObserrors(airPressures.size(), 1.0f);
45 obsspace.put_db(
"ObsError",
"air_pressure", airPressureObserrors);
48 if (conf.has(
"station_ids")) {
49 const std::vector<int> stationIds = conf.getIntVector(
"station_ids");
50 obsspace.put_db(
"MetaData",
"station_id", stationIds);
54 obsspace, obsspace.obsvariables(),
"ObsError"));
56 obsspace, obsspace.obsvariables()));
58 eckit::LocalConfiguration filterConf(conf,
"Track Check");
60 filterParameters.validateAndDeserialize(filterConf);
64 const std::vector<size_t> expectedRejectedObsIndices =
65 conf.getUnsignedVector(
"expected_rejected_obs_indices");
66 std::vector<size_t> rejectedObsIndices;
67 for (
size_t i = 0; i < qcflags->nlocs(); ++i)
69 rejectedObsIndices.push_back(i);
70 EXPECT_EQUAL(rejectedObsIndices, expectedRejectedObsIndices);
75 std::string
testid()
const override {
return "ufo::test::TrackCheck";}
78 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
80 const eckit::LocalConfiguration conf(::test::TestEnvironment::config());
81 for (
const std::string & testCaseName : conf.keys())
83 const eckit::LocalConfiguration testCaseConf(::test::TestEnvironment::config(), testCaseName);
84 ts.emplace_back(
CASE(
"ufo/TrackCheck/" + testCaseName, testCaseConf)
void preProcess() override
Checks tracks of mobile weather stations, rejecting observations inconsistent with the rest of the tr...
Options controlling the operation of the track check filter.
void clear() const override
void register_tests() const override
std::string testid() const override
void testTrackCheck(const eckit::LocalConfiguration &conf)
CASE("ufo/DataExtractor/bilinearinterp/float_linear")