13 #include "eckit/config/Configuration.h"
15 #include "ioda/ObsDataVector.h"
16 #include "ioda/ObsSpace.h"
17 #include "oops/base/Variables.h"
18 #include "oops/util/Logger.h"
19 #include "oops/util/Random.h"
28 :
FilterBase(obsdb, parameters, flags, obserr), parameters_(parameters)
41 std::vector<std::vector<bool>> & flagged)
const {
44 const size_t gnlocs =
obsdb_.globalNumLocs();
47 const std::vector<std::size_t> & gindex =
obsdb_.index();
55 util::UniformDistribution<float> rand(gnlocs, 0.0, 1.0, random_seed);
57 for (
size_t jv = 0; jv < filtervars.
nvars(); ++jv) {
58 for (
size_t jobs = 0; jobs <
nlocs; ++jobs) {
59 if ( apply[jobs] && rand[gindex[jobs]] < amount ) flagged[jv][jobs] =
true;
67 os <<
"Thinning: 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
Thinning(ioda::ObsSpace &, const Parameters_ &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
Parameters controlling the operation of the Thinning filter.
oops::Parameter< int > member
Index of the ensemble member.
oops::OptionalParameter< int > randomSeed
oops::RequiredParameter< float > amount
(Approximate) fraction of observations to be thinned.
size_t nvars() const
Return the number of constituent "primitive" (single-channel) variables.
integer function nlocs(this)
Return the number of observational locations in this Locations object.