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"
41 std::vector<std::vector<bool>> & flagged)
const {
43 const size_t nlocs =
obsdb_.nlocs();
44 const size_t gnlocs =
obsdb_.gnlocs();
47 const std::vector<std::size_t> & gindex =
obsdb_.index();
49 const float thinning =
config_.getFloat(
"amount");
52 unsigned int random_seed =
config_.getInt(
"random seed", std::time(0));
53 int mymember =
config_.getInt(
"member", 0);
54 random_seed += mymember;
56 util::UniformDistribution<float> rand(gnlocs, 0.0, 1.0, random_seed);
58 for (
size_t jv = 0; jv < filtervars.
nvars(); ++jv) {
59 for (
size_t jobs = 0; jobs < nlocs; ++jobs) {
60 if ( apply[jobs] && rand[gindex[jobs]] < thinning ) flagged[jv][jobs] =
true;
68 os <<
"Thinning: config = " <<
config_ << std::endl;