14 #include "eckit/config/Configuration.h"
15 #include "eckit/config/LocalConfiguration.h"
17 #include "ioda/ObsDataVector.h"
18 #include "ioda/ObsSpace.h"
19 #include "oops/util/abor1_cpp.h"
20 #include "oops/util/Logger.h"
21 #include "oops/util/missingValues.h"
31 :
FilterBase(obsdb, parameters, flags, obserr),
32 parameters_(parameters)
46 std::vector<std::vector<bool>> & flagged)
const {
47 const oops::Variables observed =
obsdb_.obsvariables();
53 std::vector<float> values(
nlocs);
57 for (
size_t jj = 0; jj <
nlocs; ++jj) {
58 values[jj] = vals[
"Scattering"][jj];
63 for (
size_t jv = 0; jv < filtervars.
nvars(); ++jv) {
65 for (
size_t jobs = 0; jobs <
obsdb_.nlocs(); ++jobs) {
67 flagged[jv][jobs] =
true;
69 ASSERT((*
obserr_)[iv][jobs] != util::missingValue((*
obserr_)[iv][jobs]));
70 ASSERT(obs[jv][jobs] != util::missingValue(obs[jv][jobs]));
71 float bound = 2.5 * (*obserr_)[iv][jobs];
72 float obserrinc = parameter * std::max((values[jobs]-9.0), 0.0) * (*obserr_)[iv][jobs];
73 obserrinc = std::max((*
obserr_)[iv][jobs], bound);
74 (*obserr_)[iv][jobs] = sqrt(pow((*
obserr_)[iv][jobs], 2) + pow(obserrinc, 2));
79 oops::Log::info() <<
"count=" << count << std::endl;
85 os <<
"ObsDomainErrCheck: config = " <<
parameters_ << std::endl;
Base class for UFO QC filters.
void applyFilter(const std::vector< bool > &, const Variables &, std::vector< std::vector< bool >> &) const override
void print(std::ostream &) const override
ObsDomainErrCheck(ioda::ObsSpace &, const Parameters_ &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
Parameters controlling the operation of the ObsDomainErrCheck filter.
oops::RequiredParameter< float > infltparameter
void compute(const ObsFilterData &, ioda::ObsDataVector< float > &) const
compute the result of the function
std::shared_ptr< ioda::ObsDataVector< float > > obserr_
const std::string & variable() 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.
oops::Variables toOopsVariables() const
integer function nlocs(this)
Return the number of observational locations in this Locations object.