8 #ifndef UFO_OBSOPERATORBASE_H_
9 #define UFO_OBSOPERATORBASE_H_
16 #include <boost/noncopyable.hpp>
18 #include "eckit/config/Configuration.h"
19 #include "ioda/ObsSpace.h"
20 #include "oops/base/Variables.h"
21 #include "oops/util/AssociativeContainers.h"
22 #include "oops/util/parameters/ConfigurationParameter.h"
23 #include "oops/util/parameters/HasParameters_.h"
24 #include "oops/util/parameters/Parameters.h"
25 #include "oops/util/parameters/ParametersOrConfiguration.h"
26 #include "oops/util/parameters/RequiredPolymorphicParameter.h"
27 #include "oops/util/Printable.h"
56 private boost::noncopyable {
60 const eckit::Configuration & = eckit::LocalConfiguration())
71 virtual std::unique_ptr<Locations>
locations()
const;
79 virtual void print(std::ostream &)
const = 0;
80 const ioda::ObsSpace &
odb_;
98 oops::RequiredPolymorphicParameter<ObsOperatorParametersBase, ObsOperatorFactory>
117 const std::string &name);
135 static std::map < std::string, ObsOperatorFactory * > &
getMakers() {
136 static std::map < std::string, ObsOperatorFactory * > makers_;
147 typedef oops::TParameters_IfAvailableElseFallbackType_t<T, GenericObsOperatorParameters>
152 const auto &stronglyTypedParams =
dynamic_cast<const Parameters_&
>(params);
154 oops::parametersOrConfiguration<oops::HasParameters_<T>::value>(
155 stronglyTypedParams));
159 return std::make_unique<Parameters_>();
GeoVaLs: geophysical values at locations.
virtual const oops::Variables & requiredVars() const =0
Operator input required from Model.
virtual std::unique_ptr< Locations > locations() const
Locations for GeoVaLs.
virtual ~ObsOperatorBase()
virtual oops::Variables simulatedVars() const
List of variables simulated by this operator.
virtual void simulateObs(const GeoVaLs &, ioda::ObsVector &, ObsDiagnostics &) const =0
Obs Operator.
const ioda::ObsSpace & odb_
ObsOperatorBase(const ioda::ObsSpace &odb, const eckit::Configuration &=eckit::LocalConfiguration())
virtual void print(std::ostream &) const =0
ObsOperatorFactory(const std::string &name)
Register a maker able to create observation operators of type name.
static std::vector< std::string > getMakerNames()
Return the names of all operators that can be created by one of the registered makers.
virtual std::unique_ptr< ObsOperatorParametersBase > makeParameters() const =0
static ObsOperatorBase * create(const ioda::ObsSpace &, const ObsOperatorParametersBase ¶ms)
Create and return a new observation operator.
static std::map< std::string, ObsOperatorFactory * > & getMakers()
static std::unique_ptr< ObsOperatorParametersBase > createParameters(const std::string &name)
Create and return an instance of the subclass of ObsOperatorParametersBase storing parameters of obse...
virtual ~ObsOperatorFactory()=default
virtual ObsOperatorBase * make(const ioda::ObsSpace &, const ObsOperatorParametersBase &)=0
oops::TParameters_IfAvailableElseFallbackType_t< T, GenericObsOperatorParameters > Parameters_
ObsOperatorMaker(const std::string &name)
std::unique_ptr< ObsOperatorParametersBase > makeParameters() const override
ObsOperatorBase * make(const ioda::ObsSpace &odb, const ObsOperatorParametersBase ¶ms) override
Base class of classes storing configuration parameters of specific observation operators and linear o...
Contains a polymorphic parameter holding an instance of a subclass of ObsOperatorParametersBase.
oops::RequiredPolymorphicParameter< ObsOperatorParametersBase, ObsOperatorFactory > operatorParameters