14 #include "ioda/ObsDataVector.h"
15 #include "ioda/ObsSpace.h"
17 #include "oops/util/Logger.h"
31 ioda::ObsSpace & obsdb,
35 :
FilterBase(obsdb, parameters, flags, obserr), parameters_(parameters)
37 oops::Log::trace() <<
"ProfileFewObsCheck constructor" << std::endl;
43 oops::Log::trace() <<
"ProfileFewObsCheck destructed" << std::endl;
51 std::vector<std::vector<bool>> & flagged)
const {
52 oops::Log::trace() <<
"ProfileFewObsCheck preProcess filter" << std::endl;
53 const oops::Variables observed =
obsdb_.obsvariables();
57 const std::vector<size_t> & record_numbers =
obsdb_.recidx_all_recnums();
59 for (
size_t iProfile : record_numbers)
64 for (
size_t iFilterVar = 0; iFilterVar < filtervars.
nvars(); ++iFilterVar) {
65 const size_t iVar = observed.find(filtervars.
variable(iFilterVar).
variable());
68 for (
size_t iProfile : record_numbers) {
69 const std::vector<size_t> & obs_numbers =
obsdb_.recidx_vector(iProfile);
73 for (
size_t jobs : obs_numbers)
79 for (
size_t jobs : obs_numbers)
81 flagged[iFilterVar][jobs] =
true;
89 os <<
"ProfileFewObsCheck: config = " <<
parameters_ << std::endl;
Base class for UFO QC filters.
std::shared_ptr< ioda::ObsDataVector< int > > flags_
ProfileFewObsCheck(ioda::ObsSpace &, const Parameters_ &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
void print(std::ostream &) const override
void applyFilter(const std::vector< bool > &, const Variables &, std::vector< std::vector< bool >> &) const override
Apply the profile check for the number of observations.
Parameters controlling the operation of the ProfileFewObsCheck filter.
oops::RequiredParameter< int > threshold
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.