8 #ifndef TEST_UFO_OBSERRORASSIGN_H_
9 #define TEST_UFO_OBSERRORASSIGN_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 std::vector<std::string> varnames {
"air_pressure",
"station_id",
"observation_type",
42 "latitude_band",
"channel_number",
"processing_center",
44 for (std::string varname : varnames) {
45 if (conf.has(varname)) {
46 const std::vector<int> dat = conf.getIntVector(varname);
47 obsspace.put_db(
"MetaData", varname, dat);
50 if (conf.has(
"StringVar")) {
51 const std::vector<std::string> dat = conf.getStringVector(
"StringVar");
52 obsspace.put_db(
"MetaData",
"StringVar", dat);
56 obsspace, obsspace.obsvariables(),
"ObsError"));
58 obsspace, obsspace.obsvariables()));
60 const eckit::LocalConfiguration filterConf(conf,
"ObsError assign");
62 bfparam.deserialize(filterConf);
65 if (conf.has(
"expectExceptionWithMessage")) {
66 const std::string msg = conf.getString(
"expectExceptionWithMessage");
67 EXPECT_THROWS_MSG(filter.
preProcess(), msg.c_str());
73 std::vector<float> expectedObsError;
74 if (conf.has(
"expected_obserror")) {
75 expectedObsError = conf.getFloatVector(
"expected_obserror");
77 expectedObsError = conf.getFloatVector(
"expected_obserror_variance");
78 for (
size_t ind=0; ind < expectedObsError.size(); ind++) {
79 expectedObsError[ind] = std::sqrt(expectedObsError[ind]);
83 for (
size_t varn = 0; varn < obserr->nvars(); ++varn) {
84 for (
size_t locn = 0; locn < obserr->nlocs(); ++locn) {
85 EXPECT(oops::is_close_absolute((*obserr)[varn][locn], expectedObsError[ind], 1e-4f, 0,
86 oops::TestVerbosity::LOG_SUCCESS_AND_FAILURE));
94 std::string
testid()
const override {
return "ufo::test::ObsErrorAssign";}
97 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
99 const eckit::LocalConfiguration conf(::test::TestEnvironment::config());
100 for (
const std::string & testCaseName : conf.keys())
102 const eckit::LocalConfiguration testCaseConf(::test::TestEnvironment::config(), testCaseName);
103 ts.emplace_back(
CASE(
"ufo/ObsErrorAssign/" + testCaseName, testCaseConf)
Generic black listing of observations.
void preProcess() override
void clear() const override
void register_tests() const override
std::string testid() const override
void testObsErrorAssign(const eckit::LocalConfiguration &conf)
CASE("ufo/DataExtractor/bilinearinterp/float_linear")