8 #ifndef OOPS_BASE_OBSFILTERS_H_
9 #define OOPS_BASE_OBSFILTERS_H_
15 #include <boost/noncopyable.hpp>
17 #include "eckit/config/LocalConfiguration.h"
25 #include "oops/util/IntSetParser.h"
26 #include "oops/util/Printable.h"
34 template <
typename OBS>
36 private boost::noncopyable {
42 typedef std::shared_ptr<ObsDataVector<OBS, int> >
ObsDataPtr_;
60 void print(std::ostream &)
const override;
72 template <
typename OBS>
76 : filters_(), geovars_(), diagvars_(), qcflags_(qcflags), obserr_(obserr),
78 Log::trace() <<
"ObsFilters::ObsFilters starting:\n";
80 Log::trace() <<
" " << filterParams << std::endl;
83 if (filtersParams.size() > 0) {
84 eckit::LocalConfiguration preconf;
85 preconf.set(
"filter",
"QCmanager");
92 bool apply = (iteration == 0);
94 if (filterParams.applyAtIterations.value() != boost::none) {
95 std::set<int> iters = parseIntSet(*filterParams.applyAtIterations.value());
96 apply = contains(iters, iteration);
102 diagvars_ += tmp->requiredHdiagnostics();
108 if (filtersParams.size() > 0) {
109 eckit::LocalConfiguration preconf;
110 preconf.set(
"filter",
"Final Check");
114 Log::trace() <<
"ObsFilters::ObsFilters done" << std::endl;
119 template<
typename OBS>
121 for (
const auto & filter : filters_) {
122 filter->preProcess();
124 obserrtmp_->mask(*qcflags_);
125 obserr_ = *obserrtmp_;
130 template<
typename OBS>
132 for (
const auto & filter : filters_) {
133 filter->priorFilter(gv);
135 obserrtmp_->mask(*qcflags_);
136 obserr_ = *obserrtmp_;
141 template<
typename OBS>
143 for (
const auto & filter : filters_) {
144 filter->postFilter(hofx, diags);
146 obserrtmp_->mask(*qcflags_);
147 obserr_ = *obserrtmp_;
152 template <
typename OBS>
154 os <<
"ObsFilters: " << filters_.size() <<
" elements:" << std::endl;
155 for (
const auto & filter : filters_) {
156 os << *filter << std::endl;
Contains a polymorphic parameter holding an instance of a subclass of ObsFilterParametersBase.
Holds observation filters (usually QC) for one observation type.
void postFilter(const ObsVector_ &, const ObsDiags_ &) const
void priorFilter(const GeoVaLs_ &) const
std::vector< ObsFilterPtr_ > filters_
std::shared_ptr< ObsDataVector< OBS, float > > obserrtmp_
std::shared_ptr< ObsFilterBase< OBS > > ObsFilterPtr_
ObsDiagnostics< OBS > ObsDiags_
Variables requiredHdiagnostics() const
ObsSpace< OBS > ObsSpace_
ObsVector< OBS > ObsVector_
std::shared_ptr< ObsDataVector< OBS, int > > ObsDataPtr_
ObsFilters(const ObsSpace_ &, const std::vector< ObsFilterParametersWrapper< OBS >> &, ObsDataPtr_ qcflags, ObsVector_ &obserr, const int iteration=0)
Variables requiredVars() const
void print(std::ostream &) const override
The namespace for the main oops code.
subroutine apply(self, field_in, field_out, field_nn_out)