11 #ifndef OOPS_BASE_OBSERRORS_H_
12 #define OOPS_BASE_OBSERRORS_H_
18 #include <boost/noncopyable.hpp>
23 #include "oops/util/Logger.h"
24 #include "oops/util/Printable.h"
30 template <
typename OBS>
32 private boost::noncopyable {
38 static const std::string
classname() {
return "oops::ObsErrors";}
56 void save(
const std::string &)
const;
62 void print(std::ostream &)
const override;
63 std::vector<ObsError_>
err_;
69 template <
typename OBS>
72 std::vector<eckit::LocalConfiguration> obsconf = config.getSubConfigurations();
73 for (
size_t jj = 0; jj < os.
size(); ++jj) {
74 eckit::LocalConfiguration conf = obsconf[jj].getSubConfiguration(
"obs error");
75 err_.emplace_back(conf, os[jj]);
81 template <
typename OBS>
83 for (
size_t jj = 0; jj < err_.size(); ++jj) {
84 err_[jj].multiply(dy[jj]);
90 template <
typename OBS>
92 for (
size_t jj = 0; jj < err_.size(); ++jj) {
93 err_[jj].inverseMultiply(dy[jj]);
99 template <
typename OBS>
101 for (
size_t jj = 0; jj < err_.size(); ++jj) {
102 err_[jj].randomize(dy[jj]);
108 template <
typename OBS>
110 for (
const auto &
err : err_) {
117 template <
typename OBS>
120 for (
size_t jj = 0; jj < err_.size(); ++jj) {
121 invvar[jj] = err_[jj].inverseVariance();
128 template<
typename OBS>
130 for (
size_t jj = 0; jj < err_.size(); ++jj) os << err_[jj] << std::endl;
Difference between two observation vectors.
Observation error covariance matrix of observations from a single ObsSpace.
Container for ObsErrors for all observation types that are used in DA.
ObsError< OBS > ObsError_
ObsErrors(const eckit::Configuration &, const ObsSpaces_ &)
void save(const std::string &) const
Save obs errors.
void inverseMultiply(Departures_ &) const
Multiply a Departure by .
void multiply(Departures_ &) const
Multiply a Departure by .
ObsSpaces< OBS > ObsSpaces_
size_t size() const
Accessor and size.
const ObsError_ & operator[](const size_t ii) const
Departures< OBS > Departures_
Departures_ inverseVariance() const
returns inverse of observation error variance
void randomize(Departures_ &) const
Generate random perturbation.
void print(std::ostream &) const override
static const std::string classname()
std::vector< ObsError_ > err_
ObsError_ & operator[](const size_t ii)
std::size_t size() const
Access.
The namespace for the main oops code.