Go to the documentation of this file.
16 #include "ioda/ObsDataVector.h"
17 #include "oops/util/IntSetParser.h"
18 #include "oops/util/missingValues.h"
24 static ObsFunctionMaker<ObsErrorModelRamp>
35 eckit::LocalConfiguration yconf;
40 yconf.set(
"options", config);
45 ASSERT(xvar.
size() == 1 ||
50 const std::vector<float> &x0 =
options_.
x0.value();
51 const std::vector<float> &x1 =
options_.
x1.value();
56 ASSERT(yvar.
size() == x0.size());
57 ASSERT(yvar.
size() == x1.size());
58 ASSERT(yvar.
size() == err0.size());
59 ASSERT(yvar.
size() == err1.size());
60 for (
size_t i = 0; i < yvar.
size(); ++i) {
61 ASSERT(x1[i] >= x0[i]);
62 ASSERT(err0[i] > 0.0);
63 ASSERT(err1[i] > 0.0);
78 const std::vector<float> &x0 =
options_.
x0.value();
79 const std::vector<float> &x1 =
options_.
x1.value();
84 ASSERT(out.nvars() == x0.size());
97 for (
size_t jvar = 0; jvar < out.nvars(); ++jvar) {
98 size_t ivar = std::min(jvar, xvar.
size() - 1);
101 if (x1[jvar] > x0[jvar]) {
102 slope = (err1[jvar] - err0[jvar]) / (x1[jvar] - x0[jvar]);
108 for (
size_t iloc = 0; iloc < in.
nlocs(); ++iloc) {
110 if (xvals[ivar][iloc] !=
missing) {
111 if (xvals[ivar][iloc] <= x0[jvar]) {
112 out[jvar][iloc] = err0[jvar];
113 }
else if (xvals[ivar][iloc] < x1[jvar] && slope !=
missing) {
114 out[jvar][iloc] = err0[jvar] + slope * (xvals[ivar][iloc] - x0[jvar]);
116 out[jvar][iloc] = err1[jvar];
oops::Parameter< bool > save
whether to save xvar values to the ObsSpace
void compute(const ObsFilterData &, ioda::ObsDataVector< float > &) const
compute the result of the function
ObsErrorModelRampParameters options_
static const std::string classname()
size_t nlocs() const
Returns number of locations.
ioda::ObsSpace & obsspace() const
Returns reference to ObsSpace associated with ObsFilterData.
oops::RequiredParameter< std::vector< float > > err1
y-coordinate of the upper ramp inflection point
oops::Variables toOopsVariables() const
oops::OptionalParameter< std::string > chlist
ObsErrorModelRamp(const eckit::LocalConfiguration)
oops::RequiredParameter< Variable > xvar
x variable of the piece-wise function
oops::RequiredParameter< std::vector< float > > x1
x-coordinate of the upper ramp inflection point
oops::RequiredParameter< std::vector< float > > x0
x-coordinate of the lower ramp inflection point
oops::RequiredParameter< std::vector< float > > err0
y-coordinate of the lower ramp inflection point
static ObsFunctionMaker< ObsErrorModelRamp > makerRamp_("ObsErrorModelRamp")
const ufo::Variables & requiredVariables() const
geovals required to compute the function
void get(const Variable &, std::vector< float > &) const
Gets requested data from ObsFilterData.
ObsFilterData provides access to all data related to an ObsFilter.