Go to the documentation of this file.
8 #ifndef UFO_FILTERS_GAUSSIAN_THINNING_H_
9 #define UFO_FILTERS_GAUSSIAN_THINNING_H_
16 #include <boost/optional.hpp>
18 #include "ioda/ObsDataVector.h"
19 #include "oops/util/ObjectCounter.h"
28 template <
typename DATATYPE>
class ObsDataVector;
38 class DistanceCalculator;
39 class EquispacedBinSelector;
40 class GaussianThinningParameters;
41 class RecursiveSplitter;
42 class SpatialBinSelector;
43 class ParallelObsDistribution;
59 private util::ObjectCounter<Gaussian_Thinning> {
61 static const std::string
classname() {
return "ufo::Gaussian_Thinning";}
70 void print(std::ostream &)
const override;
72 std::vector<std::vector<bool>> &)
const override;
86 std::vector<float> &distancesToBinCenter)
const;
92 std::vector<float> &distancesToBinCenter)
const;
98 std::vector<float> &distancesToBinCenter)
const;
101 const std::vector<size_t> &validObsIds,
104 const std::vector<float> &distancesToBinCenter)
const;
107 const std::vector<size_t> &validObsIds,
108 const std::vector<float> &distancesToBinCenter,
113 std::vector<std::vector<bool> > &flagged)
const;
128 std::unique_ptr<GaussianThinningParameters>
options_;
133 #endif // UFO_FILTERS_GAUSSIAN_THINNING_H_
void flagThinnedObservations(const std::vector< bool > &isThinned, const ParallelObsDistribution &obsDistribution, std::vector< std::vector< bool > > &flagged) const
void groupObservationsBySpatialLocation(const std::vector< size_t > &validObsIds, const DistanceCalculator &distanceCalculator, const ParallelObsDistribution &obsDistribution, RecursiveSplitter &splitter, std::vector< float > &distancesToBinCenter) const
Describes how observations in an ObsSpace are distributed across MPI processes.
void applyFilter(const std::vector< bool > &, const Variables &, std::vector< std::vector< bool >> &) const override
int qcFlag() const override
Group observations into grid cells and preserve only one observation in each cell.
std::vector< bool > identifyThinnedObservations(const std::vector< size_t > &validObsIds, const ParallelObsDistribution &obsDistribution, const RecursiveSplitter &splitter, const std::vector< float > &distancesToBinCenter) const
FilterBase: Base class for UFO QC filters.
Partitions an array into groups of elements equivalent according to certain criteria.
~Gaussian_Thinning() override
static std::unique_ptr< DistanceCalculator > makeDistanceCalculator(const GaussianThinningParameters &options)
Options controlling the operation of the Gaussian_Thinning filter.
Gaussian_Thinning(ioda::ObsSpace &obsdb, const eckit::Configuration &config, std::shared_ptr< ioda::ObsDataVector< int > > flags, std::shared_ptr< ioda::ObsDataVector< float > > obserr)
std::unique_ptr< GaussianThinningParameters > options_
static boost::optional< EquispacedBinSelector > makePressureBinSelector(const GaussianThinningParameters &options)
void groupObservationsByPressure(const std::vector< size_t > &validObsIds, const DistanceCalculator &distanceCalculator, const ParallelObsDistribution &obsDistribution, RecursiveSplitter &splitter, std::vector< float > &distancesToBinCenter) const
static boost::optional< SpatialBinSelector > makeSpatialBinSelector(const GaussianThinningParameters &options)
static boost::optional< EquispacedBinSelector > makeTimeBinSelector(const GaussianThinningParameters &options, util::DateTime &timeOffset)
void print(std::ostream &) const override
std::vector< size_t > getValidObservationIds(const std::vector< bool > &apply, const ParallelObsDistribution &obsDistribution) const
void groupObservationsByCategory(const std::vector< size_t > &validObsIds, const ParallelObsDistribution &obsDistribution, RecursiveSplitter &splitter) const
void groupObservationsByTime(const std::vector< size_t > &validObsIds, const DistanceCalculator &distanceCalculator, const ParallelObsDistribution &obsDistribution, RecursiveSplitter &splitter, std::vector< float > &distancesToBinCenter) const
Calculates distances between observations and centres of bins used during thinning.
std::function< bool(size_t, size_t)> makeObservationComparator(const std::vector< size_t > &validObsIds, const std::vector< float > &distancesToBinCenter, const ParallelObsDistribution &obsDistribution) const
static const std::string classname()