13 #include "ioda/ObsDataVector.h"
14 #include "oops/base/Variables.h"
15 #include "oops/util/IntSetParser.h"
16 #include "oops/util/missingValues.h"
30 : allvars_(), conf_(
conf) {
31 if (
conf_.has(
"error function")) {
34 ASSERT(
conf_.has(
"error function") ||
conf_.has(
"error parameter"));
40 const std::vector<std::vector<bool>> &,
47 if (
conf_.has(
"error parameter")) {
48 float error =
conf_.getFloat(
"error parameter");
49 for (
size_t jv = 0; jv < vars.
nvars(); ++jv) {
52 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
53 if (flags[kv][jobs] ==
QCflags::pass) obserr[iv][jobs] = error;
57 }
else if (
conf_.has(
"error function")) {
58 Variable errorvar(
conf_.getSubConfiguration(
"error function"));
59 ASSERT(errorvar.
size() == 1 || errorvar.
size() == vars.
nvars());
61 errorvar.
group(),
false);
62 data.
get(errorvar, errors);
66 std::vector<size_t> error_jv(vars.
nvars(), 0);
71 std::iota(error_jv.begin(), error_jv.end(), 0);
75 for (
size_t jv = 0; jv < vars.
nvars(); ++jv) {
79 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
81 obserr[iv][jobs] = errors[error_jv[jv]][jobs];