8 #ifndef OOPS_BASE_OBSERVER_H_
9 #define OOPS_BASE_OBSERVER_H_
26 #include "oops/util/DateTime.h"
27 #include "oops/util/Duration.h"
28 #include "oops/util/Logger.h"
29 #include "oops/util/Printable.h"
38 template <
typename MODEL,
typename OBS>
49 template <
typename DATA>
using ObsDataPtr_ = std::shared_ptr<ObsDataVector<OBS, DATA> >;
62 void print(std::ostream &)
const override;
80 template <
typename MODEL,
typename OBS>
84 : hop_(obsdb,
eckit::LocalConfiguration(conf,
"obs operator")),
85 obsdb_(obsdb), yobs_(yobs), ybias_(ybias), filters_(obsdb, conf, qcflags, obserr)
87 Log::trace() <<
"Observer::Observer starting" << std::endl;
91 Log::trace() <<
"Observer::Observer done" << std::endl;
96 template <
typename MODEL,
typename OBS>
98 Log::trace() <<
"Observer::~Observer starting" << std::endl;
100 Log::trace() <<
"Observer::~Observer done" << std::endl;
105 template <
typename MODEL,
typename OBS>
107 const util::DateTime & begin,
108 const util::DateTime & end) {
109 Log::trace() <<
"Observer::doInitialize start" << std::endl;
110 filters_.preProcess();
112 gvals_.reset(
new GeoVaLs_(hop_.locations(begin, end), geovars_));
113 Log::trace() <<
"Observer::doInitialize done" << std::endl;
118 template <
typename MODEL,
typename OBS>
120 const util::DateTime & t1,
121 const util::DateTime & t2) {
122 Log::trace() <<
"Observer::doProcessing start" << std::endl;
124 getvals_->fillGeoVaLs(xx, t1, t2, *gvals_);
125 Log::trace() <<
"Observer::doProcessing done" << std::endl;
130 template <
typename MODEL,
typename OBS>
132 Log::trace() <<
"Observer::doFinalize start" << std::endl;
133 filters_.priorFilter(*gvals_);
135 vars += filters_.requiredHdiagnostics();
136 vars += ybias_.requiredHdiagnostics();
137 ObsDiags_ ydiags(obsdb_, hop_.locations(obsdb_.windowStart(), obsdb_.windowEnd()), vars);
138 hop_.simulateObs(*gvals_, yobs_, ybias_, ydiags);
139 filters_.postFilter(yobs_, ydiags);
140 Log::trace() <<
"Observer::doFinalize done" << std::endl;
145 template <
typename MODEL,
typename OBS>
152 #endif // OOPS_BASE_OBSERVER_H_