8 #ifndef LORENZ95_OBSDATA1D_H_
9 #define LORENZ95_OBSDATA1D_H_
16 #include "eckit/exception/Exceptions.h"
19 #include "oops/util/Logger.h"
20 #include "oops/util/missingValues.h"
21 #include "oops/util/ObjectCounter.h"
22 #include "oops/util/Printable.h"
31 template<
typename DATATYPE>
32 class ObsData1D :
public util::Printable,
33 private util::ObjectCounter<ObsData1D<DATATYPE> > {
35 static const std::string
classname() {
return "lorenz95::ObsData1D";}
51 void save(
const std::string &)
const;
54 void print(std::ostream &)
const;
62 template<
typename DATATYPE>
64 const std::string & name)
65 : obsdb_(ot), data_(ot.nobs())
71 template<
typename DATATYPE>
73 : obsdb_(other.obsdb_), data_(other.data_)
76 template<
typename DATATYPE>
78 ASSERT(data_.size() == rhs.data_.size());
83 template<
typename DATATYPE>
85 for (
size_t jj = 0; jj < data_.size(); ++jj) {
86 data_.at(jj) =
static_cast<DATATYPE
>(0);
90 template<
typename DATATYPE>
92 DATATYPE missing = util::missingValue(missing);
93 for (
size_t jj = 0; jj < data_.size(); ++jj) {
94 if (mask[jj]) data_.at(jj) = missing;
98 template<
typename DATATYPE>
100 obsdb_.putdb(name, data_);
103 template<
typename DATATYPE>
105 ASSERT(data_.size() > 0);
106 DATATYPE zmin = data_.at(0);
107 DATATYPE zmax = data_.at(0);
108 for (
size_t jj = 0; jj < data_.size(); ++jj) {
109 if (data_.at(jj) < zmin) zmin = data_.at(jj);
110 if (data_.at(jj) > zmax) zmax = data_.at(jj);
112 os <<
"Lorenz 95 nobs= " << data_.size() <<
" Min=" << zmin <<
", Max=" << zmax;
117 #endif // LORENZ95_OBSDATA1D_H_