NASA Logo
Ocean Color Science Software

ocssw V2022
find_variable.hpp
Go to the documentation of this file.
1 #ifndef FIND_VARIABLE_HPP
2 #define FIND_VARIABLE_HPP
3 #include <netcdf>
4 #include <unordered_set>
5 
6 template <typename T>
7 netCDF::NcVar find_nc_variable_cpp(const std::string& var_name, T& nc_file) {
8  netCDF::NcVar var = nc_file.getVar(var_name);
9  if (var.isNull()) {
10  auto grps = nc_file.getGroups();
11  for (const auto& grp : grps) {
12  var = find_nc_variable_cpp(var_name, grp.second);
13  if (!var.isNull()) {
14  return var;
15  }
16  }
17  }
18  return var;
19 }
20 
21 template <typename T>
22 netCDF::NcGroupAtt find_nc_grp_attribute_cpp(const std::string& att_name, T& nc_file) {
23  netCDF::NcGroupAtt attr = nc_file.getAtt(att_name);
24  if (attr.isNull()) {
25  auto grps = nc_file.getGroups();
26  for (const auto& grp : grps) {
27  attr = find_nc_grp_attribute_cpp(att_name, grp.second);
28  if (!attr.isNull()) {
29  return attr;
30  }
31  }
32  }
33  return attr;
34 };
35 
36 template <typename T>
37 std::multimap<std::string, netCDF::NcVar> find_all_variables(T& nc_id) {
38  auto grps = nc_id.getGroups();
39  std::multimap<std::string, netCDF::NcVar> vars = nc_id.getVars();
40  for (const auto& grp : grps) {
41  std::multimap<std::string, netCDF::NcVar> temp_var = find_all_variables(grp.second);
42  vars.insert(temp_var.begin(), temp_var.end());
43  }
44  return vars;
45 }
46 
47 template <typename T>
48 std::multimap<std::string, netCDF::NcVar> find_all_variables(T& nc_id,
49  const std::unordered_set<std::string>& names) {
50  auto grps = nc_id.getGroups();
51  std::multimap<std::string, netCDF::NcVar> vars = nc_id.getVars();
52  for (const auto& grp : grps) {
53  std::multimap<std::string, netCDF::NcVar> temp_var = find_all_variables(grp.second);
54  for (const auto& nc_var : temp_var) {
55  if (!names.count(nc_var.first))
56  vars.insert(nc_var);
57  }
58  }
59  return vars;
60 }
61 
62 std::multimap<std::string, netCDF::NcVar> find_variables_geo_physical(const std::string& nc_path,
63  std::string& prod_list);
64 #endif
netCDF::NcGroupAtt find_nc_grp_attribute_cpp(const std::string &att_name, T &nc_file)
@ string
netCDF::NcVar find_nc_variable_cpp(const std::string &var_name, T &nc_file)
std::multimap< std::string, netCDF::NcVar > find_all_variables(T &nc_id)
Definition: names.f90:1
std::multimap< std::string, netCDF::NcVar > find_variables_geo_physical(const std::string &nc_path, std::string &prod_list)