8 #ifndef TEST_UFO_METOFFICEBUDDYCHECK_H_
9 #define TEST_UFO_METOFFICEBUDDYCHECK_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"
28 #include "ufo/Locations.h"
29 #include "ufo/ObsDiagnostics.h"
36 util::DateTime bgn(
conf.getString(
"window begin"));
37 util::DateTime end(
conf.getString(
"window end"));
39 const eckit::LocalConfiguration obsSpaceConf(
conf,
"obs space");
40 ioda::ObsSpace obsSpace(obsSpaceConf, oops::mpi::world(), bgn, end, oops::mpi::myself());
42 const eckit::LocalConfiguration floatVarInitConf(
conf,
"FloatVariables");
43 for (
const std::string & varNameGroup : floatVarInitConf.keys()) {
44 std::string varName, varGroup;
46 const std::vector<float> values = floatVarInitConf.getFloatVector(varNameGroup);
47 obsSpace.put_db(varGroup, varName, values);
50 const eckit::LocalConfiguration intVarInitConf(
conf,
"IntVariables");
51 for (
const std::string & varNameGroup : intVarInitConf.keys()) {
52 std::string varName, varGroup;
54 const std::vector<int> values = intVarInitConf.getIntVector(varNameGroup);
55 obsSpace.put_db(varGroup, varName, values);
59 obsSpace, obsSpace.obsvariables(),
"ObsError"));
61 obsSpace, obsSpace.obsvariables()));
63 const eckit::LocalConfiguration filterConf(
conf,
"Met Office Buddy Check");
67 ioda::ObsVector hofx(obsSpace,
"HofX");
72 const eckit::LocalConfiguration pgeConf(
conf,
"ExpectedGrossErrorProbabilities");
73 for (
const std::string & varNameGroup : pgeConf.keys()) {
74 std::string varName, varGroup;
76 const std::vector<float> expectedPges = pgeConf.getFloatVector(varNameGroup);
77 std::vector<float> actualPges(obsSpace.nlocs());
78 obsSpace.get_db(varGroup, varName, actualPges);
79 EXPECT(oops::are_all_close_absolute(actualPges, expectedPges, 1e-6f));
85 std::string
testid()
const override {
return "ufo::test::MetOfficeBuddyCheck";}
88 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
90 const eckit::LocalConfiguration
conf(::test::TestEnvironment::config());
91 for (
const std::string & testCaseName :
conf.keys())
93 const eckit::LocalConfiguration testCaseConf(::test::TestEnvironment::config(), testCaseName);
94 ts.emplace_back(
CASE(
"ufo/MetOfficeBuddyCheck/" + testCaseName, testCaseConf)
107 #endif // TEST_UFO_METOFFICEBUDDYCHECK_H_