8 #ifndef OOPS_INTERFACE_OBSFILTER_H_
9 #define OOPS_INTERFACE_OBSFILTER_H_
14 #include "eckit/config/LocalConfiguration.h"
22 #include "oops/util/dot_product.h"
23 #include "oops/util/Logger.h"
24 #include "oops/util/parameters/HasParameters_.h"
25 #include "oops/util/parameters/ParametersOrConfiguration.h"
46 template <
typename OBS,
typename FILTER>
52 template <
typename DATA>
using ObsDataPtr_ = std::shared_ptr<ObsDataVector<OBS, DATA> >;
58 typedef TParameters_IfAvailableElseFallbackType_t<FILTER, GenericObsFilterParameters>
Parameters_;
60 static const std::string
classname() {
return "oops::ObsFilter";}
63 ObsDataPtr_<int>, ObsDataPtr_<float>);
65 ObsDataPtr_<int>, ObsDataPtr_<float>);
76 void print(std::ostream &)
const override;
85 template <
typename OBS,
typename FILTER>
89 : obsdb_(os), parameters_(parameters.clone()), ofilt_()
91 Log::trace() <<
"ObsFilter<OBS, FILTER>::ObsFilter Configuration starting" << std::endl;
92 util::Timer timer(
classname(),
"ObsFilter");
94 std::shared_ptr<ObsDataVec_<int> >
qc;
95 std::shared_ptr<ObsDataVec_<float> >
oberr;
96 if (flags)
qc = flags->obsdatavectorptr();
97 if (obserr)
oberr = obserr->obsdatavectorptr();
100 parametersOrConfiguration<HasParameters_<FILTER>::value>(parameters),
102 Log::trace() <<
"ObsFilter<OBS, FILTER>::ObsFilter Configuration done" << std::endl;
107 template <
typename OBS,
typename FILTER>
109 const eckit::Configuration & conf,
116 template <
typename OBS,
typename FILTER>
118 Log::trace() <<
"ObsFilter<OBS, FILTER>::~ObsFilter starting" << std::endl;
119 util::Timer timer(classname(),
"~ObsFilter");
121 Log::trace() <<
"ObsFilter<OBS, FILTER>::~ObsFilter done" << std::endl;
126 template <
typename OBS,
typename FILTER>
128 Log::trace() <<
"ObsFilter<OBS, FILTER>:: preProcess starting" << std::endl;
129 util::Timer timer(classname(),
"preProcess");
130 ofilt_->preProcess();
131 Log::trace() <<
"ObsFilter<OBS, FILTER>:: preProcess done" << std::endl;
136 template <
typename OBS,
typename FILTER>
138 Log::trace() <<
"ObsFilter<OBS, FILTER>:: priorFilter starting" << std::endl;
139 util::Timer timer(classname(),
"priorFilter");
140 ofilt_->priorFilter(gv.
geovals());
141 Log::trace() <<
"ObsFilter<OBS, FILTER>:: priorFilter done" << std::endl;
146 template <
typename OBS,
typename FILTER>
148 Log::trace() <<
"ObsFilter<OBS, FILTER>::postFilter starting" << std::endl;
149 util::Timer timer(classname(),
"postFilter");
151 Log::trace() <<
"ObsFilter<OBS, FILTER>::postFilter done" << std::endl;
156 template <
typename OBS,
typename FILTER>
158 Log::trace() <<
"ObsFilter::requiredVars" << std::endl;
159 return ofilt_->requiredVars();
164 template <
typename OBS,
typename FILTER>
166 Log::trace() <<
"ObsFilter::requiredHdiagnostics" << std::endl;
167 return ofilt_->requiredHdiagnostics();
172 template <
typename OBS,
typename FILTER>
174 os <<
"ObsFilter " << *parameters_;
const GeoVaLs_ & geovals() const
Interfacing.
ObsDiags_ & obsdiagnostics()
Interfacing.
Base class for QC filters applied to observations.
void preProcess() const override
std::shared_ptr< ObsDataVector< OBS, DATA > > ObsDataPtr_
ObsSpace< OBS > ObsSpace_
typename OBS::template ObsDataVector< DATA > ObsDataVec_
std::unique_ptr< FILTER > ofilt_
ObsVector< OBS > ObsVector_
void postFilter(const ObsVector_ &, const ObsDiags_ &) const override
TParameters_IfAvailableElseFallbackType_t< FILTER, GenericObsFilterParameters > Parameters_
ObsDiagnostics< OBS > ObsDiags_
void print(std::ostream &) const override
void priorFilter(const GeoVaLs_ &) const override
static const std::string classname()
ObsFilter(const ObsSpace_ &, const Parameters_ &, ObsDataPtr_< int >, ObsDataPtr_< float >)
Variables requiredHdiagnostics() const override
Variables requiredVars() const override
const std::unique_ptr< Parameters_ > parameters_
ObsSpace_ & obsspace() const
Interfacing.
ObsVector_ & obsvector()
Interfacing.
The namespace for the main oops code.