/* * (C) Copyright 2021 UCAR * * This software is licensed under the terms of the Apache Licence Version 2.0 * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. */ #ifndef UFO_PREDICTORS_CLOUDLIQUIDWATER_H_ #define UFO_PREDICTORS_CLOUDLIQUIDWATER_H_ #include #include #include "oops/util/parameters/OptionalParameter.h" #include "oops/util/parameters/Parameter.h" #include "oops/util/parameters/RequiredParameter.h" #include "ufo/predictors/PredictorBase.h" #include "ufo/filters/ObsFilterData.h" namespace ioda { class ObsSpace; } namespace ufo { class ObsBias; class ObsFilterData; // ----------------------------------------------------------------------------- /// Configuration parameters of the CloudLiquidWater predictor. class CloudLiquidWaterParameters : public PredictorParametersBase { OOPS_CONCRETE_PARAMETERS(CloudLiquidWaterParameters, PredictorParametersBase) public: /// We must specify a satellite reference name such as SSMIS to know which channels to expect. oops::RequiredParameter satellite{"satellite", this}; /// In case we need to override the ObsValue group name with another optional group name. oops::Parameter varGroup{"varGroup", "ObsValue", this}; /// List below is solely for SSMIS data, but a different list of channel numbers could be /// added for a different satellite platform in the future. oops::OptionalParameter ch19h{"ch19h", this}; oops::OptionalParameter ch19v{"ch19v", this}; oops::OptionalParameter ch22v{"ch22v", this}; oops::OptionalParameter ch37h{"ch37h", this}; oops::OptionalParameter ch37v{"ch37v", this}; oops::OptionalParameter ch91h{"ch91h", this}; oops::OptionalParameter ch91v{"ch91v", this}; /// List below is solely for AMSU-A and ATMS data oops::OptionalParameter ch238d{"clwdif_ch238", this}; oops::OptionalParameter ch314d{"clwdif_ch314", this}; }; // ----------------------------------------------------------------------------- class CloudLiquidWater : public PredictorBase { public: /// The type of parameters accepted by the constructor of this predictor. /// This typedef is used by the PredictorFactory. typedef CloudLiquidWaterParameters Parameters_; CloudLiquidWater(const Parameters_ &, const oops::Variables &); ~CloudLiquidWater() {} void compute(const ioda::ObsSpace &, const GeoVaLs &, const ObsDiagnostics &, const ObsBias &, // const ObsFilterData &, ioda::ObsVector &) const override; static void clwDerivative_amsua(const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, std::vector &); static void clwDerivative_gmi(const ObsFilterData &, std::vector &); private: CloudLiquidWaterParameters options_; std::vector channels_; ufo::Variables invars_; eckit::LocalConfiguration conf_; }; // ----------------------------------------------------------------------------- } // namespace ufo #endif // UFO_PREDICTORS_CLOUDLIQUIDWATER_H_