8 #ifndef TEST_UFO_METOFFICERADIANCEERRORMATRICES_H_
9 #define TEST_UFO_METOFFICERADIANCEERRORMATRICES_H_
11 #include <Eigen/Dense>
17 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
19 #include "eckit/config/LocalConfiguration.h"
20 #include "eckit/testing/Test.h"
21 #include "oops/runs/Test.h"
22 #include "oops/util/Expect.h"
23 #include "oops/util/IntSetParser.h"
24 #include "oops/util/Logger.h"
25 #include "test/TestEnvironment.h"
34 std::string chlist = conf.getString(
"channels");
35 const float latitude = conf.getFloat(
"latitude");
36 const size_t nelements = conf.getUnsigned(
"nelements");
37 const float BHT_value = conf.getFloat(
"BHT_value");
38 const float HBHT_value = conf.getFloat(
"HBHT_value");
39 const float HBHT_R_value = conf.getFloat(
"HBHT_R_value");
40 const float tol = conf.getFloat(
"tol");
43 std::vector<int> channels;
44 std::set<int> chans = oops::parseIntSet(chlist);
45 std::copy(chans.begin(), chans.end(), std::back_inserter(channels));
46 const size_t nchans = channels.size();
56 Eigen::MatrixXf Hmatrix = Eigen::MatrixXf::Constant(nchans, nelements, 2.0);
58 bmatrix.
multiply(latitude, Hmatrix.transpose(), BHT);
61 oops::Log::info() <<
"bmatrix = " << bmatrix << std::endl;
72 Eigen::MatrixXf HBHT_R;
75 rmatrix.
add(channels, HBHT, HBHT_R);
78 oops::Log::info() <<
"rmatrix = " << rmatrix << std::endl;
85 ASSERT(
std::abs(BHT(0, 0) - BHT_value) < tol);
86 ASSERT(
std::abs(HBHT(0, 0) - HBHT_value) < tol);
87 ASSERT(
std::abs(HBHT_R(0, 0) - HBHT_R_value) < tol);
92 std::string
testid()
const override {
return "ufo::test::MetOfficeRadianceErrorMatrices";}
95 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
97 const eckit::LocalConfiguration conf(::test::TestEnvironment::config());
98 for (
const std::string & testCaseName : conf.keys())
100 const eckit::LocalConfiguration testCaseConf(::test::TestEnvironment::config(), testCaseName);
101 ts.emplace_back(
CASE(
"ufo/MetOfficeRadianceErrorMatrices/" + testCaseName, testCaseConf)
void multiply(const float, const Eigen::MatrixXf &, Eigen::MatrixXf &) const
Multiply input matrix by bmatrix array based on latitude.
void add(const std::vector< int > &, const Eigen::MatrixXf &, Eigen::MatrixXf &) const
Add r matrix variance onto input array.
std::string testid() const override
void clear() const override
void register_tests() const override
void testMetOfficeRadianceErrorMatrices(const eckit::LocalConfiguration &conf)
CASE("ufo/DataExtractor/bilinearinterp/float_linear")
util::Duration abs(const util::Duration &duration)