UFO
ObsBias.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2018 UCAR
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  */
7 
8 #ifndef UFO_OBSBIAS_H_
9 #define UFO_OBSBIAS_H_
10 
11 #include <Eigen/Core>
12 
13 #include <memory>
14 #include <string>
15 #include <vector>
16 
17 #include "eckit/config/LocalConfiguration.h"
18 
19 #include "oops/base/Variables.h"
20 #include "oops/util/ObjectCounter.h"
21 #include "oops/util/Printable.h"
22 
24 
25 namespace oops {
26  class Variables;
27 }
28 
29 namespace ioda {
30  class ObsSpace;
31  class ObsVector;
32 }
33 
34 namespace ufo {
35  class GeoVals;
36  class ObsBiasIncrement;
37  class ObsDiagnostics;
38 
39 /// Class to handle observation bias parameters.
40 
41 // -----------------------------------------------------------------------------
42 
43 class ObsBias : public util::Printable,
44  private util::ObjectCounter<ObsBias> {
45  public:
46  static const std::string classname() {return "ufo::ObsBias";}
47 
48  ObsBias(ioda::ObsSpace &, const eckit::Configuration &);
49  ObsBias(const ObsBias &, const bool);
50  ~ObsBias() {}
51 
53  ObsBias & operator=(const ObsBias &);
54 
55  // I/O and diagnostics
56  void read(const eckit::Configuration &);
57  void write(const eckit::Configuration &) const;
58  double norm() const;
59  std::size_t size() const {return biascoeffs_.size();}
60 
61  // Bias parameters interface
62  const double & operator[](const unsigned int ii) const {return biascoeffs_[ii];}
63  double & operator[](const unsigned int ii) {return biascoeffs_[ii];}
64 
65  // Obs bias model
66  void computeObsBias(ioda::ObsVector &, ObsDiagnostics &,
67  const std::vector<ioda::ObsVector> &) const;
68 
69  // Obs Bias Predictors
70  std::vector<ioda::ObsVector> computePredictors(const GeoVaLs &, const ObsDiagnostics &) const;
71 
72  // Required variables
73  const oops::Variables & requiredVars() const {return geovars_;}
74  const oops::Variables & requiredHdiagnostics() const {return hdiags_;}
75 
76  // Operator
77  operator bool() const {return biascoeffs_.size() > 0;}
78 
79  private:
80  void print(std::ostream &) const;
81 
82  ioda::ObsSpace & odb_;
83  eckit::LocalConfiguration conf_;
84 
85  std::vector<double> biascoeffs_;
86  std::vector<std::shared_ptr<PredictorBase>> predbases_;
87  std::vector<std::string> prednames_;
88  std::vector<int> jobs_;
89  oops::Variables geovars_;
90  oops::Variables hdiags_;
91 };
92 
93 // -----------------------------------------------------------------------------
94 
95 } // namespace ufo
96 
97 #endif // UFO_OBSBIAS_H_
ufo::ObsBias::geovars_
oops::Variables geovars_
Definition: ObsBias.h:89
ufo::ObsBias::prednames_
std::vector< std::string > prednames_
Definition: ObsBias.h:87
ufo::ObsBias::print
void print(std::ostream &) const
Definition: ObsBias.cc:322
oops
Definition: GaussianThinningParameters.h:42
PredictorBase.h
ufo::ObsBias::~ObsBias
~ObsBias()
Definition: ObsBias.h:50
ufo::ObsBias::ObsBias
ObsBias(ioda::ObsSpace &, const eckit::Configuration &)
Definition: ObsBias.cc:28
ufo::ObsBias::conf_
eckit::LocalConfiguration conf_
Definition: ObsBias.h:83
ufo::ObsBias::requiredVars
const oops::Variables & requiredVars() const
Definition: ObsBias.h:73
ufo::ObsBias::operator+=
ObsBias & operator+=(const ObsBiasIncrement &)
Definition: ObsBias.cc:92
ufo::ObsBias::write
void write(const eckit::Configuration &) const
Definition: ObsBias.cc:202
ufo::ObsBias::computePredictors
std::vector< ioda::ObsVector > computePredictors(const GeoVaLs &, const ObsDiagnostics &) const
Definition: ObsBias.cc:292
ufo::ObsBias::jobs_
std::vector< int > jobs_
Definition: ObsBias.h:88
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::ObsBias::hdiags_
oops::Variables hdiags_
Definition: ObsBias.h:90
ufo::ObsBias::classname
static const std::string classname()
Definition: ObsBias.h:46
ufo::ObsBias::size
std::size_t size() const
Definition: ObsBias.h:59
ufo::ObsBias
Class to handle observation bias parameters.
Definition: ObsBias.h:44
ufo::ObsDiagnostics
Definition: src/ufo/ObsDiagnostics.h:35
ufo::ObsBias::operator[]
double & operator[](const unsigned int ii)
Definition: ObsBias.h:63
ufo::ObsBias::norm
double norm() const
Definition: ObsBias.cc:309
ufo::ObsBias::operator=
ObsBias & operator=(const ObsBias &)
Definition: ObsBias.cc:100
ufo::GeoVaLs
GeoVaLs: geophysical values at locations.
Definition: src/ufo/GeoVaLs.h:39
ufo::ObsBiasIncrement
Definition: ObsBiasIncrement.h:39
ufo::ObsBias::predbases_
std::vector< std::shared_ptr< PredictorBase > > predbases_
Definition: ObsBias.h:86
ufo::ObsBias::computeObsBias
void computeObsBias(ioda::ObsVector &, ObsDiagnostics &, const std::vector< ioda::ObsVector > &) const
Definition: ObsBias.cc:216
ufo::ObsBias::requiredHdiagnostics
const oops::Variables & requiredHdiagnostics() const
Definition: ObsBias.h:74
ufo::ObsBias::odb_
ioda::ObsSpace & odb_
Definition: ObsBias.h:82
ufo::ObsBias::biascoeffs_
std::vector< double > biascoeffs_
Definition: ObsBias.h:85
ufo::ObsBias::read
void read(const eckit::Configuration &)
Definition: ObsBias.cc:115
ufo::ObsBias::operator[]
const double & operator[](const unsigned int ii) const
Definition: ObsBias.h:62