8 #include "ioda/ObsDataVector.h"
9 #include "oops/util/missingValues.h"
10 #include "oops/util/parameters/Parameter.h"
22 template <
typename FunctionValue>
26 options_.validateAndDeserialize(conf);
34 template <
typename FunctionValue>
38 const FunctionValue
missing = util::missingValue(FunctionValue());
39 for (
size_t ivar = 0; ivar < out.nvars(); ++ivar) {
40 std::fill(out[ivar].begin(), out[ivar].end(), options_.defaultvalue.value().value_or(
missing));
46 std::vector<bool> applied(out.nlocs(),
false);
49 for (
size_t iloc = 0; iloc < out.nlocs(); ++iloc) {
50 if (apply[iloc] && applied[iloc] ==
false) {
51 for (
size_t ivar = 0; ivar < out.nvars(); ++ivar)
52 out[ivar][iloc] = lcp.value.value();
53 if (options_.firstmatchingcase.value()) applied[iloc] =
true;
60 template <
typename FunctionValue>
Conditional(const eckit::LocalConfiguration &=eckit::LocalConfiguration())
void compute(const ObsFilterData &, ioda::ObsDataVector< FunctionValue > &) const
compute the result of the function
const ufo::Variables & requiredVariables() const
geovals required to compute the function
ConditionalParameters< FunctionValue > options_
oops::RequiredParameter< FunctionValue > value
Value to be assigned when this particular where clause is true.
ObsFilterData provides access to all data related to an ObsFilter.
static ObsFunctionMaker< Conditional< std::string > > stringMaker("Conditional")
static ObsFunctionMaker< Conditional< util::DateTime > > dateTimeMaker("Conditional")
static ObsFunctionMaker< Conditional< float > > floatMaker("Conditional")
ufo::Variables getAllWhereVariables(const std::vector< WhereParameters > ¶ms)
std::vector< bool > processWhere(const std::vector< WhereParameters > ¶ms, const ObsFilterData &filterdata)
static ObsFunctionMaker< Conditional< int > > intMaker("Conditional")