8 #ifndef TEST_UFO_OBSBIAS_H_
9 #define TEST_UFO_OBSBIAS_H_
14 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
16 #include "eckit/config/LocalConfiguration.h"
17 #include "eckit/testing/Test.h"
18 #include "ioda/ObsSpace.h"
19 #include "oops/mpi/mpi.h"
20 #include "oops/runs/Test.h"
21 #include "oops/util/DateTime.h"
22 #include "oops/util/FloatCompare.h"
23 #include "oops/util/Logger.h"
24 #include "test/TestEnvironment.h"
25 #include "ufo/ObsBias.h"
35 eckit::LocalConfiguration conf(::test::TestEnvironment::config());
37 util::DateTime bgn(conf.getString(
"window begin"));
38 util::DateTime end(conf.getString(
"window end"));
39 std::vector<eckit::LocalConfiguration> obsconfs
40 = conf.getSubConfigurations(
"observations");
42 for (
auto & oconf : obsconfs) {
43 ioda::ObsTopLevelParameters obsparams;
44 obsparams.validateAndDeserialize(oconf.getSubConfiguration(
"obs space"));
45 ioda::ObsSpace odb(obsparams, oops::mpi::world(), bgn, end, oops::mpi::myself());
48 eckit::LocalConfiguration biasconf = oconf.getSubConfiguration(
"obs bias");
50 biasparams.validateAndDeserialize(biasconf);
53 eckit::LocalConfiguration biasconf_forread = biasconf;
54 biasconf_forread.set(
"input file", biasconf.getString(
"output file"));
56 biasparams_forread.validateAndDeserialize(biasconf_forread);
60 oops::Log::test() <<
"Initialized obs bias: " << ybias << std::endl;
62 const Eigen::VectorXd original_coeffs = ybias.data();
64 ybias.write(biasparams);
66 EXPECT_EQUAL(ybias.data().norm(), 0.0);
67 ybias.read(biasparams_forread);
68 oops::Log::test() <<
"Obs bias after write out; assign zero; read back in: "
69 << ybias << std::endl;
70 EXPECT_EQUAL((original_coeffs - ybias.data()).norm(), 0.0);
72 ObsBias ybias2(odb, biasparams_forread);
73 oops::Log::test() <<
"Obs bias initialized from the written out file: " << ybias2 << std::endl;
74 EXPECT_EQUAL((original_coeffs - ybias2.data()).norm(), 0.0);
86 std::string
testid()
const override {
return "ufo::test::ObsBias";}
89 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
91 ts.emplace_back(
CASE(
"ufo/ObsBias/testObsBiasReadWrite")
Parameters influencing the bias correction process.
void clear() const override
virtual ~ObsBias()=default
std::string testid() const override
void register_tests() const override
CASE("ufo/DataExtractor/bilinearinterp/float_linear")
void testObsBiasReadWrite()
Tests ObsBias::read and ObsBias::write methods.