IODA Bundle
GeoVaLsWriter.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2019 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 OOPS_GENERIC_GEOVALSWRITER_H_
9 #define OOPS_GENERIC_GEOVALSWRITER_H_
10 
11 #include <memory>
12 
13 #include "eckit/config/LocalConfiguration.h"
15 #include "oops/base/Variables.h"
16 #include "oops/interface/GeoVaLs.h"
21 #include "oops/util/dot_product.h"
22 #include "oops/util/Logger.h"
23 
24 namespace oops {
25 
26 // -----------------------------------------------------------------------------
27 
28 template <typename OBS>
29 class GeoVaLsWriter : public ObsFilterBase<OBS> {
34  template <typename DATA> using ObsDataPtr_ = std::shared_ptr<ObsDataVector<OBS, DATA> >;
35 
36  public:
37  GeoVaLsWriter(const ObsSpace_ &, const eckit::Configuration & conf,
40 
41  void preProcess() const override {}
42 
43  void priorFilter(const GeoVaLs_ & gv) const override {
44  const double zz = sqrt(dot_product(gv, gv));
45  Log::info() << "GeoVaLsWriter norm = " << zz << std::endl;
46  gv.write(conf_);
47  }
48 
49  void postFilter(const ObsVector_ &, const ObsDiags_ &) const override {}
50 
51  Variables requiredVars() const override {return novars_;};
52  Variables requiredHdiagnostics() const override {return novars_;};
53 
54  private:
55  const eckit::LocalConfiguration conf_;
56  const Variables novars_; // could be used to determine what needs saving
57 
58  void print(std::ostream &) const override;
59 };
60 
61 // -----------------------------------------------------------------------------
62 
63 template <typename OBS>
64 void GeoVaLsWriter<OBS>::print(std::ostream & os) const {
65  os << "GeoVaLsWriter: " << conf_;
66 }
67 
68 // -----------------------------------------------------------------------------
69 
70 } // namespace oops
71 
72 #endif // OOPS_GENERIC_GEOVALSWRITER_H_
void write(const eckit::Configuration &) const
void preProcess() const override
Definition: GeoVaLsWriter.h:41
ObsSpace< OBS > ObsSpace_
Definition: GeoVaLsWriter.h:32
const eckit::LocalConfiguration conf_
Definition: GeoVaLsWriter.h:52
ObsVector< OBS > ObsVector_
Definition: GeoVaLsWriter.h:33
GeoVaLsWriter(const ObsSpace_ &, const eckit::Configuration &conf, ObsDataPtr_< int >, ObsDataPtr_< float >)
Definition: GeoVaLsWriter.h:37
void print(std::ostream &) const override
Definition: GeoVaLsWriter.h:64
Variables requiredHdiagnostics() const override
Definition: GeoVaLsWriter.h:52
std::shared_ptr< ObsDataVector< OBS, DATA > > ObsDataPtr_
Definition: GeoVaLsWriter.h:34
void priorFilter(const GeoVaLs_ &gv) const override
Definition: GeoVaLsWriter.h:43
ObsDiagnostics< OBS > ObsDiags_
Definition: GeoVaLsWriter.h:31
const Variables novars_
Definition: GeoVaLsWriter.h:56
void postFilter(const ObsVector_ &, const ObsDiags_ &) const override
Definition: GeoVaLsWriter.h:49
GeoVaLs< OBS > GeoVaLs_
Definition: GeoVaLsWriter.h:30
Variables requiredVars() const override
Definition: GeoVaLsWriter.h:51
Base class for QC filters applied to observations.
Definition: ObsFilterBase.h:42
The namespace for the main oops code.