12 #include "eckit/config/Configuration.h"
14 #include "ioda/ObsDataVector.h"
15 #include "ioda/ObsSpace.h"
16 #include "oops/base/Variables.h"
17 #include "oops/interface/ObsFilter.h"
18 #include "oops/util/Logger.h"
19 #include "oops/util/missingValues.h"
30 PreQC::PreQC(ioda::ObsSpace & obsdb,
const eckit::Configuration & config,
35 oops::Log::trace() <<
"PreQC::PreQC starting " << config << std::endl;
42 const oops::Variables observed = obsdb.obsvariables();
44 ASSERT(qcflags->nvars() == observed.size());
45 ASSERT(qcflags->nlocs() == obsdb.nlocs());
46 ASSERT(obserr->nvars() == observed.size());
47 ASSERT(obserr->nlocs() == obsdb.nlocs());
50 const std::string qcin = config.getString(
"inputQC",
"PreQC");
55 const int qcmin = config.getInt(
"minvalue", 0);
56 const int qcmax = config.getInt(
"maxvalue", 0);
58 for (
size_t jv = 0; jv < observed.size(); ++jv) {
59 for (
size_t jobs = 0; jobs < obsdb.nlocs(); ++jobs) {
60 if (preqc[jv][jobs] ==
missing ||
61 preqc[jv][jobs] > qcmax ||
62 preqc[jv][jobs] < qcmin) {
68 oops::Log::trace() <<
"PreQC::PreQC done" << std::endl;