OOPS
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 LocsL95;
32  class ObsVec1D;
33 
34 /// A Simple Observation Data Handler
35 /*!
36  * ObsTable defines a simple observation handler
37  * that mimicks the interfaces required from ODB.
38  */
39 
40 // -----------------------------------------------------------------------------
42  private util::ObjectCounter<ObsTable> {
43  public:
44  static const std::string classname() {return "lorenz95::ObsTable";}
45 
46  ObsTable(const eckit::Configuration &, const eckit::mpi::Comm &,
47  const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &);
48  ~ObsTable();
49 
50  void putdb(const std::string &, const std::vector<int> &) const;
51  void putdb(const std::string &, const std::vector<float> &) const;
52  void putdb(const std::string &, const std::vector<double> &) const;
53  void getdb(const std::string &, std::vector<int> &) const;
54  void getdb(const std::string &, std::vector<float> &) const;
55  void getdb(const std::string &, std::vector<double> &) const;
56 
57  bool has(const std::string & col) const;
58  void generateDistribution(const eckit::Configuration &);
59  void random(std::vector<double> &) const;
60  void printJo(const ObsVec1D &, const ObsVec1D &);
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  private:
68  void print(std::ostream &) const;
69  void otOpen(const std::string &);
70  void otWrite(const std::string &) const;
71 
72  const util::DateTime winbgn_;
73  const util::DateTime winend_;
74 
75  std::vector<util::DateTime> times_;
76  std::vector<double> locations_;
77  mutable std::map<std::string, std::vector<double> > data_;
78 
79  const eckit::mpi::Comm & comm_;
81  std::string nameIn_;
82  std::string nameOut_;
83  const std::string obsname_ = "Lorenz 95";
84 };
85 // -----------------------------------------------------------------------------
86 } // namespace lorenz95
87 
88 #endif // LORENZ95_OBSTABLE_H_
lorenz95::ObsTable
A Simple Observation Data Handler.
Definition: ObsTable.h:42
lorenz95::ObsTable::classname
static const std::string classname()
Definition: ObsTable.h:44
lorenz95::ObsTable::data_
std::map< std::string, std::vector< double > > data_
Definition: ObsTable.h:77
lorenz95::ObsTable::comm_
const eckit::mpi::Comm & comm_
Definition: ObsTable.h:79
lorenz95::ObsTable::print
void print(std::ostream &) const
Definition: ObsTable.cc:352
lorenz95::ObsTable::otWrite
void otWrite(const std::string &) const
Definition: ObsTable.cc:295
lorenz95::ObsTable::random
void random(std::vector< double > &) const
Definition: ObsTable.cc:229
lorenz95::ObsTable::getdb
void getdb(const std::string &, std::vector< int > &) const
Definition: ObsTable.cc:129
lorenz95::ObsTable::winend_
const util::DateTime winend_
Definition: ObsTable.h:73
lorenz95::ObsVec1D
Vector in observation space.
Definition: ObsVec1D.h:34
lorenz95::ObsTable::generateDistribution
void generateDistribution(const eckit::Configuration &)
Definition: ObsTable.cc:177
lorenz95::ObsTable::obsname
const std::string & obsname() const
Definition: ObsTable.h:65
lorenz95::ObsTable::obsvariables
const oops::Variables & obsvariables() const
Definition: ObsTable.h:64
eckit
Definition: FieldL95.h:22
lorenz95::ObsTable::times_
std::vector< util::DateTime > times_
Definition: ObsTable.h:75
lorenz95::ObsTable::has
bool has(const std::string &col) const
Definition: ObsTable.cc:79
lorenz95::ObsTable::obsname_
const std::string obsname_
Definition: ObsTable.h:83
lorenz95::ObsTable::nameIn_
std::string nameIn_
Definition: ObsTable.h:81
lorenz95::ObsTable::locations_
std::vector< double > locations_
Definition: ObsTable.h:76
lorenz95::ObsTable::nameOut_
std::string nameOut_
Definition: ObsTable.h:82
lorenz95::ObsTable::nobs
unsigned int nobs() const
Definition: ObsTable.h:61
lorenz95::ObsTable::ObsTable
ObsTable(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &)
Definition: ObsTable.cc:43
lorenz95::ObsTable::times
const std::vector< util::DateTime > times() const
Definition: ObsTable.h:63
lorenz95::ObsTable::otOpen
void otOpen(const std::string &)
Definition: ObsTable.cc:244
lorenz95::ObsTable::printJo
void printJo(const ObsVec1D &, const ObsVec1D &)
Definition: ObsTable.cc:236
lorenz95::ObsTable::putdb
void putdb(const std::string &, const std::vector< int > &) const
Definition: ObsTable.cc:85
lorenz95::ObsTable::~ObsTable
~ObsTable()
Definition: ObsTable.cc:70
oops::Variables
Definition: oops/base/Variables.h:23
lorenz95::ObsTable::locations
const std::vector< double > locations() const
Definition: ObsTable.h:62
lorenz95::ObsTable::winbgn_
const util::DateTime winbgn_
Definition: ObsTable.h:72
ObsSpaceBase.h
lorenz95
The namespace for the L95 model.
Definition: l95/src/lorenz95/AnalyticInit.cc:17
Variables.h
oops::ObsSpaceBase
Base class for observation spaces.
Definition: ObsSpaceBase.h:31
lorenz95::ObsTable::obsvars_
const oops::Variables obsvars_
Definition: ObsTable.h:80