8 #ifndef TEST_UFO_LINEAROBSBIASOPERATOR_H_
9 #define TEST_UFO_LINEAROBSBIASOPERATOR_H_
16 #include "eckit/config/LocalConfiguration.h"
17 #include "eckit/testing/Test.h"
18 #include "ioda/ObsSpace.h"
19 #include "ioda/ObsVector.h"
20 #include "oops/mpi/mpi.h"
21 #include "oops/runs/Test.h"
22 #include "test/interface/ObsTestsFixture.h"
23 #include "test/TestEnvironment.h"
25 #include "ufo/GeoVaLs.h"
26 #include "ufo/LinearObsBiasOperator.h"
27 #include "ufo/ObsBias.h"
29 #include "ufo/ObsDiagnostics.h"
39 CASE(
"ufo/LinearObsBiasOperator/testLinearObsBiasOperator") {
40 typedef ::test::ObsTestsFixture<ObsTraits> Test_;
42 std::vector<eckit::LocalConfiguration> typeconfs;
43 ::test::TestEnvironment::config().get(
"observations", typeconfs);
45 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
46 ioda::ObsSpace &odb = Test_::obspace()[jj].obsspace();
47 const eckit::Configuration &conf = typeconfs[jj];
50 eckit::LocalConfiguration biasConf = conf.getSubConfiguration(
"obs bias");
51 eckit::LocalConfiguration targetBiasConf = conf.getSubConfiguration(
"target obs bias");
54 biasParams.validateAndDeserialize(biasConf);
55 targetBiasParams.validateAndDeserialize(targetBiasConf);
56 const ObsBias bias(odb, biasParams);
57 const ObsBias targetBias(odb, targetBiasParams);
60 const eckit::LocalConfiguration gconf(conf,
"geovals");
61 oops::Variables requiredVars = odb.obsvariables();
62 requiredVars += bias.requiredVars();
63 requiredVars += targetBias.requiredVars();
64 const GeoVaLs geovals(gconf, odb, requiredVars);
67 oops::Variables requiredHdiagnostics;
68 requiredHdiagnostics += bias.requiredHdiagnostics();
69 std::vector<float> lons(odb.nlocs());
70 std::vector<float> lats(odb.nlocs());
71 std::vector<util::DateTime> times(odb.nlocs());
72 odb.get_db(
"MetaData",
"latitude", lats);
73 odb.get_db(
"MetaData",
"longitude", lons);
74 odb.get_db(
"MetaData",
"datetime", times);
76 requiredHdiagnostics);
80 biasOperator.setTrajectory(geovals, bias, ydiags);
84 biasInc.
diff(targetBias, bias);
87 ioda::ObsVector dy(odb);
88 biasOperator.computeObsBiasTL(geovals, biasInc, dy);
91 const double dy_rms = dy.rms();
92 const double expected_dy_rms = conf.getDouble(
"rms ref");
93 const double tol = conf.getDouble(
"relative tolerance");
94 EXPECT(oops::is_close_relative(dy_rms, expected_dy_rms, tol));
102 std::string
testid()
const override {
return "ufo::test::LinearObsBiasOperator";}
Contains increments to bias correction coefficients.
void diff(const ObsBias &, const ObsBias &)
Parameters influencing the bias correction process.
std::string testid() const override
void register_tests() const override
void clear() const override
CASE("ufo/DataExtractor/bilinearinterp/float_linear")