8 #ifndef OOPS_BASE_OBSAUXCONTROLS_H_
9 #define OOPS_BASE_OBSAUXCONTROLS_H_
18 #include "oops/util/Logger.h"
19 #include "oops/util/Printable.h"
25 template <
typename OBS>
31 static const std::string
classname() {
return "oops::ObsAuxControls";}
43 void read(
const eckit::Configuration &);
44 void write(
const eckit::Configuration &)
const;
50 void print(std::ostream &)
const;
51 std::vector<std::unique_ptr<ObsAuxControl_> >
auxs_;
56 template<
typename OBS>
60 std::vector<eckit::LocalConfiguration> obsconf;
61 conf.get(
"observations", obsconf);
62 for (std::size_t jobs = 0; jobs < obsconf.size(); ++jobs) {
64 std::unique_ptr<ObsAuxControl_>(
new ObsAuxControl_(odb[jobs], obsconf[jobs])));
70 template<
typename OBS>
74 Log::trace() <<
"ObsAuxControls<OBS>::ObsAuxControls copy starting" << std::endl;
75 for (std::size_t jobs = 0; jobs < other.
size(); ++jobs) {
78 Log::trace() <<
"ObsAuxControls<OBS>::ObsAuxControls copy done" << std::endl;
83 template<
typename OBS>
85 Log::trace() <<
"ObsAuxControls<OBS>::~ObsAuxControls starting" << std::endl;
86 for (std::size_t jobs = 0; jobs < auxs_.size(); ++jobs) auxs_[jobs].reset();
87 Log::trace() <<
"ObsAuxControls<OBS>::~ObsAuxControls done" << std::endl;
92 template<
typename OBS>
94 Log::trace() <<
"ObsAuxControls<OBS>::read starting" << std::endl;
95 for (std::size_t jobs = 0; jobs < auxs_.size(); ++jobs) auxs_[jobs]->read(conf);
96 Log::trace() <<
"ObsAuxControls<OBS>::read done" << std::endl;
101 template<
typename OBS>
103 Log::trace() <<
"ObsAuxControls<OBS>::write starting" << std::endl;
104 for (std::size_t jobs = 0; jobs < auxs_.size(); ++jobs) auxs_[jobs]->
write(conf);
105 Log::trace() <<
"ObsAuxControls<OBS>::write done" << std::endl;
110 template<
typename OBS>
112 Log::trace() <<
"ObsAuxControls<OBS>::norm starting" << std::endl;
113 double zz =
static_cast<double>(0.0);
116 for (std::size_t jobs = 0; jobs < auxs_.size(); ++jobs) {
117 norm = auxs_[jobs]->norm();
123 Log::trace() <<
"ObsAuxControls<OBS>::norm done" << std::endl;
124 return std::sqrt(zz/ii);
129 template<
typename OBS>
131 for (std::size_t jobs = 0; jobs < auxs_.size(); ++jobs) os << *auxs_[jobs];
138 #endif // OOPS_BASE_OBSAUXCONTROLS_H_