10 #include "eckit/exception/Exceptions.h"
11 #include "ioda/ObsGroup.h"
12 #include "oops/base/Variables.h"
24 typename std::vector<T>::const_iterator elements_to_look_for_begin,
25 typename std::vector<T>::const_iterator elements_to_look_for_end) {
26 std::vector<int> result;
27 for (
typename std::vector<T>::const_iterator sought_it = elements_to_look_for_begin;
28 sought_it != elements_to_look_for_end; ++sought_it) {
29 const T &sought = *sought_it;
30 const auto found_it = std::find(all_elements.begin(), all_elements.end(), sought);
31 if (found_it != all_elements.end()) {
32 result.push_back(
std::distance(all_elements.begin(), found_it));
34 const std::string errormsg =
"getAllIndices: Can't find element in the vector";
35 throw eckit::BadParameter(errormsg, Here());
48 const std::vector<T> & elements_to_look_for) {
49 return getAllIndices(all_elements, elements_to_look_for.begin(), elements_to_look_for.end());
54 const std::string &varname,
55 typename std::vector<std::string>::const_iterator elements_to_look_for_begin,
56 typename std::vector<std::string>::const_iterator elements_to_look_for_end) {
57 ioda::Variable var = obsgroup.vars.open(varname);
58 std::vector<std::string> elements_in_group;
59 var.read<std::string>(elements_in_group);
60 return getAllIndices(elements_in_group, elements_to_look_for_begin, elements_to_look_for_end);
66 const oops::Variables &vars_to_look_for) {
67 if (vars_to_look_for.channels().empty()) {
69 ioda::Variable variablesvar = obsgroup.vars.open(
"variables");
70 std::vector<std::string> variables;
71 variablesvar.read<std::string>(variables);
74 return getAllIndices(variables, vars_to_look_for.variables());
78 ASSERT(vars_to_look_for.variables().size() == vars_to_look_for.channels().size());
81 ioda::Variable channelsvar = obsgroup.vars.open(
"channels");
82 std::vector<int> channels;
83 channelsvar.read<
int>(channels);
float distance(const Point &a, const Point &b)
Returns the distance between the two cartesian-mapped Point arguments
std::vector< int > getRequiredVariableIndices(const ioda::ObsGroup &obsgroup, const std::string &varname, typename std::vector< std::string >::const_iterator elements_to_look_for_begin, typename std::vector< std::string >::const_iterator elements_to_look_for_end)
std::vector< int > getAllIndices(const std::vector< T > &all_elements, typename std::vector< T >::const_iterator elements_to_look_for_begin, typename std::vector< T >::const_iterator elements_to_look_for_end)
std::vector< int > getRequiredVarOrChannelIndices(const ioda::ObsGroup &obsgroup, const oops::Variables &vars_to_look_for)