8 #ifndef TEST_UFO_OBSBIASCOVARIANCEDETAILS_H_
9 #define TEST_UFO_OBSBIASCOVARIANCEDETAILS_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/Duration.h"
23 #include "oops/util/Logger.h"
24 #include "test/TestEnvironment.h"
25 #include "ufo/ObsBias.h"
34 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);
54 eckit::LocalConfiguration biaserrconf = biasconf.getSubConfiguration(
"covariance");
68 biaserrconf.set(
"iteration", 0);
72 biaserrconf.set(
"iteration", 1);
73 EXPECT_THROWS(ybias_cov.
linearize(ybias, biaserrconf));
76 const std::vector<int> qc_flags(odb.nlocs(), 50);
77 const std::vector<std::string> vars = odb.obsvariables().variables();
78 for (
const auto & var : vars)
79 odb.put_db(
"EffectiveQC0", var , qc_flags);
82 const std::vector<float> errs(odb.nlocs(), 1.0);
83 for (
const auto & var : vars)
84 odb.put_db(
"EffectiveError0", var , errs);
87 ioda::ObsVector predx(odb);
88 for (std::size_t jj = 0; jj < predx.size(); ++jj)
91 predx.save(pred +
"Predictor");
101 ybias_cov.
multiply(ybias_inc, ybias_inc_2);
103 EXPECT(ybias_inc.
norm() != ybias_inc_2.
norm());
104 oops::Log::test() <<
"ufo::testObsBiasCovarianceDetails multiply is verified" << std::endl;
110 const double tolerance = oconf.getDouble(
"tolerance");
111 EXPECT(ybias_inc.
norm() - ybias_inc_3.
norm() < tolerance);
112 oops::Log::test() <<
"ufo::testObsBiasCovarianceDetails inverseMultiply is verified"
124 std::string
testid()
const override {
return "ufo::test::ObsBiasCovarianceDetails";}
127 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
129 ts.emplace_back(
CASE(
"ufo/ObsBias/testObsBiasCovarianceDetails")
void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
void randomize(ObsBiasIncrement &) const
void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
void linearize(const ObsBias &, const eckit::Configuration &)
const std::vector< std::string > predictorNames() const
Contains increments to bias correction coefficients.
Parameters influencing the bias correction process.
std::string testid() const override
void clear() const override
virtual ~ObsBiasCovarianceDetails()
void register_tests() const override
ObsBiasCovarianceDetails()
CASE("ufo/DataExtractor/bilinearinterp/float_linear")
void testObsBiasCovarianceDetails()