IODA Bundle
ObsTable.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation nor
8  * does it submit to any jurisdiction.
9  */
10 
11 #ifndef LORENZ95_OBSTABLE_H_
12 #define LORENZ95_OBSTABLE_H_
13 
14 #include <fstream>
15 #include <map>
16 #include <ostream>
17 #include <string>
18 #include <vector>
19 
20 #include "eckit/mpi/Comm.h"
21 #include "oops/base/ObsSpaceBase.h"
22 #include "oops/base/Variables.h"
23 #include "oops/util/DateTime.h"
24 #include "oops/util/ObjectCounter.h"
25 
26 namespace eckit {
27  class Configuration;
28 }
29 
30 namespace lorenz95 {
31  class ObsIterator;
32 
33 /// A Simple Observation Data Handler
34 /*!
35  * ObsTable defines a simple observation handler
36  * that mimicks the interfaces required from ODB.
37  */
38 
39 // -----------------------------------------------------------------------------
41  private util::ObjectCounter<ObsTable> {
42  public:
43  static const std::string classname() {return "lorenz95::ObsTable";}
44 
45  ObsTable(const eckit::Configuration &, const eckit::mpi::Comm &,
46  const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &);
47  ~ObsTable();
48 
49  void save() const;
50 
51  void putdb(const std::string &, const std::vector<int> &) const;
52  void putdb(const std::string &, const std::vector<float> &) const;
53  void putdb(const std::string &, const std::vector<double> &) const;
54  void getdb(const std::string &, std::vector<int> &) const;
55  void getdb(const std::string &, std::vector<float> &) const;
56  void getdb(const std::string &, std::vector<double> &) const;
57 
58  bool has(const std::string & col) const;
59  void generateDistribution(const eckit::Configuration &);
60  void random(std::vector<double> &) const;
61  unsigned int nobs() const {return times_.size();}
62  const std::vector<double> & locations() const { return locations_; }
63  const std::vector<util::DateTime> & times() const { return times_; }
64  const oops::Variables & obsvariables() const { return obsvars_; }
65  const std::string & obsname() const {return obsname_;}
66 
67  /// iterator to the first observation
68  ObsIterator begin() const;
69  /// iterator to the observation past-the-last
70  ObsIterator end() const;
71 
72  private:
73  void print(std::ostream &) const;
74  void otOpen(const std::string &);
75  void otWrite(const std::string &) const;
76 
77  const util::DateTime winbgn_;
78  const util::DateTime winend_;
79 
80  std::vector<util::DateTime> times_;
81  std::vector<double> locations_;
82  mutable std::map<std::string, std::vector<double> > data_;
83 
84  const eckit::mpi::Comm & comm_;
86  std::string nameIn_;
87  std::string nameOut_;
88  const std::string obsname_ = "Lorenz 95";
89 };
90 // -----------------------------------------------------------------------------
91 } // namespace lorenz95
92 
93 #endif // LORENZ95_OBSTABLE_H_
Iterator over all observations.
A Simple Observation Data Handler.
Definition: ObsTable.h:41
void random(std::vector< double > &) const
Definition: ObsTable.cc:231
const std::vector< double > & locations() const
Definition: ObsTable.h:62
std::vector< double > locations_
Definition: ObsTable.h:81
static const std::string classname()
Definition: ObsTable.h:43
void print(std::ostream &) const
Definition: ObsTable.cc:356
std::string nameIn_
Definition: ObsTable.h:86
bool has(const std::string &col) const
Definition: ObsTable.cc:81
void getdb(const std::string &, std::vector< int > &) const
Definition: ObsTable.cc:131
const std::string obsname_
Definition: ObsTable.h:88
unsigned int nobs() const
Definition: ObsTable.h:61
void otWrite(const std::string &) const
Definition: ObsTable.cc:291
const oops::Variables obsvars_
Definition: ObsTable.h:85
const eckit::mpi::Comm & comm_
Definition: ObsTable.h:84
ObsIterator begin() const
iterator to the first observation
Definition: ObsTable.cc:347
const util::DateTime winbgn_
Definition: ObsTable.h:77
void save() const
Definition: ObsTable.cc:75
const util::DateTime winend_
Definition: ObsTable.h:78
std::map< std::string, std::vector< double > > data_
Definition: ObsTable.h:82
const std::string & obsname() const
Definition: ObsTable.h:65
const oops::Variables & obsvariables() const
Definition: ObsTable.h:64
ObsIterator end() const
iterator to the observation past-the-last
Definition: ObsTable.cc:351
ObsTable(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &)
Definition: ObsTable.cc:42
std::string nameOut_
Definition: ObsTable.h:87
void generateDistribution(const eckit::Configuration &)
Definition: ObsTable.cc:179
const std::vector< util::DateTime > & times() const
Definition: ObsTable.h:63
std::vector< util::DateTime > times_
Definition: ObsTable.h:80
void otOpen(const std::string &)
Definition: ObsTable.cc:240
void putdb(const std::string &, const std::vector< int > &) const
Definition: ObsTable.cc:87
Base class for observation spaces.
Definition: ObsSpaceBase.h:31
The namespace for the L95 model.