12 #include "ioda/ObsDataVector.h"
13 #include "oops/base/Variables.h"
27 const eckit::Configuration &config) {
28 oops::Parameters::deserialize(path, config);
34 throw eckit::UserError(path.path() +
35 ": Exactly one of the 'inflation factor' and 'inflation variable' "
36 "options must be present");
42 : allvars_(), parameters_(parameters) {
59 const std::vector<std::vector<bool>> & flagged,
68 for (
size_t ifiltervar = 0; ifiltervar < vars.
nvars(); ++ifiltervar) {
69 size_t iallvar = obserr.varnames().find(vars.
variable(ifiltervar).
variable());
70 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
71 if (flagged[ifiltervar][jobs] && flags[iallvar][jobs] ==
QCflags::pass) {
72 obserr[iallvar][jobs] *= factor;
79 ASSERT(factorvar.
size() == 1 || factorvar.
size() == vars.
nvars());
81 data.
get(factorvar, factors);
85 std::vector<size_t> factor_indices(vars.
nvars(), 0);
91 std::iota(factor_indices.begin(), factor_indices.end(), 0);
95 for (
size_t ifiltervar = 0; ifiltervar < vars.
nvars(); ++ifiltervar) {
97 size_t iallvar = obserr.varnames().find(vars.
variable(ifiltervar).
variable());
98 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
99 if (flagged[ifiltervar][jobs] && flags[iallvar][jobs] ==
QCflags::pass) {
100 obserr[iallvar][jobs] *= factors[factor_indices[ifiltervar]][jobs];
105 oops::Log::debug() <<
" InflateError output obserr: " << obserr << std::endl;
InflateError(const Parameters_ &)
void apply(const Variables &, const std::vector< std::vector< bool >> &, const ObsFilterData &, int, ioda::ObsDataVector< int > &, ioda::ObsDataVector< float > &) const override
Parameters_ parameters_
variables required to compute inflation
oops::OptionalParameter< Variable > inflationVariable
void deserialize(util::CompositePath &path, const eckit::Configuration &config) override
oops::OptionalParameter< float > inflationFactor
ObsFilterData provides access to all data related to an ObsFilter.
ioda::ObsSpace & obsspace() const
Returns reference to ObsSpace associated with ObsFilterData.
void get(const Variable &varname, std::vector< float > &values) const
Fills a std::vector with values of the specified variable.
const std::string & variable() const
oops::Variables toOopsVariables() const
size_t nvars() const
Return the number of constituent "primitive" (single-channel) variables.
Variable variable(const size_t) const
Return a given constituent "primitive" (single-channel) variable.
static FilterActionMaker< InflateError > makerInflateErr_("inflate error")