55 GRID, SWATH, ZA, OTHERVARS
58 GENERAL_DIMSCALE, GENERAL_LATLON2D, GENERAL_LATLON1D, GENERAL_LATLON_COOR_ATTR, OTHERGMS
61 OMI, MLS, HIRDLS, TES, NOTAURA
63static std::string FILE_ATTR_TABLE_NAME =
"HDF5_GLOBAL";
78 virtual ~ Exception() throw ()
82 virtual const char *what()
const throw ()
84 return this->message.c_str();
87 virtual void setException(std::string except_message)
89 this->message = except_message;
95template<
typename T,
typename U,
typename V,
typename W,
typename X>
static void _throw5(
const char *fname,
int line,
96 int numarg,
const T & a1,
const U & a2,
const V & a3,
const W & a4,
const X & a5)
98 std::ostringstream ss;
99 ss << fname <<
":" << line <<
":";
100 for (
int i = 0; i < numarg; ++i) {
122 throw Exception(ss.str());
128#define throw1(a1) _throw5(__FILE__, __LINE__, 1, a1, 0, 0, 0, 0)
129#define throw2(a1, a2) _throw5(__FILE__, __LINE__, 2, a1, a2, 0, 0, 0)
130#define throw3(a1, a2, a3) _throw5(__FILE__, __LINE__, 3, a1, a2, a3, 0, 0)
131#define throw4(a1, a2, a3, a4) _throw5(__FILE__, __LINE__, 4, a1, a2, a3, a4, 0)
132#define throw5(a1, a2, a3, a4, a5) _throw5(__FILE__, __LINE__, 5, a1, a2, a3, a4, a5)
135 template<
typename T>
void operator ()(T * ptr)
147 hsize_t getSize()
const
151 const std::string & getName()
const
155 const std::string & getNewName()
const
157 return this->newname;
163 return unlimited_dim;
174 std::string name =
"";
175 std::string newname =
"";
176 bool unlimited_dim =
false;
178 friend class EOS5File;
184 friend class EOS5CVar;
185 friend class GMSPVar;
196 const std::string & getName()
const
201 const std::string & getNewName()
const
203 return this->newname;
206 H5DataType getType()
const
211 hsize_t getCount()
const
216 size_t getBufSize()
const
218 return (this->value).size();
221 const std::vector<char>&getValue()
const
226 const std::vector<size_t>&getStrSize()
const
228 return this->strsize;
231 bool getCsetType()
const {
232 return this->is_cset_ascii;
238 H5DataType dtype = H5UNSUPTYPE;
240 std::vector<size_t> strsize;
242 std::vector<char> value;
243 bool is_cset_ascii =
true;
272 return this->newname;
278 return this->fullpath;
281 size_t getTotalElems()
const
283 return this->total_elems;
287 bool getZeroStorageSize()
const
289 return this->zero_storage_size;
292 bool getCoorAttrAddPath()
const
294 return this->coord_attr_add_path;
309 const std::vector<Attribute *>&getAttributes()
const
323 return this->comp_ratio;
330 std::string fullpath;
331 H5DataType dtype = H5UNSUPTYPE;
333 float comp_ratio = 1.0;
334 size_t total_elems = 0;
335 bool zero_storage_size =
false;
336 bool unsupported_attr_dtype =
false;
337 bool unsupported_attr_dspace =
false;
338 bool unsupported_dspace =
false;
339 bool dimnameflag =
false;
340 bool coord_attr_add_path =
true;
342 std::vector<Attribute *> attrs;
343 std::vector<Dimension *> dims;
359 ~CVar()
override =
default;
364 return this->cvartype;
367 bool isLatLon()
const;
373 std::string cfdimname;
374 CVType cvartype = CV_UNSUPPORTED;
388 H5DataType getOriginalType()
const
393 int getStartBit()
const
398 int getBitNum()
const
400 return this->numofdbits;
404 H5DataType otype = H5UNSUPTYPE;
422 return this->product_type;
426 H5GCFProduct product_type = General_Product;
435 std::fill_n(param, 13, 0);
442 EOS5Type getEos5Type()
const
444 return this->eos_type;
446 float getPointLower()
const
448 return this->point_lower;
450 float getPointUpper()
const
452 return this->point_upper;
455 float getPointLeft()
const
457 return this->point_left;
459 float getPointRight()
const
461 return this->point_right;
464 EOS5GridPRType getPixelReg()
const
466 return this->eos5_pixelreg;
468 EOS5GridOriginType getOrigin()
const
470 return this->eos5_origin;
473 EOS5GridPCType getProjCode()
const
475 return this->eos5_projcode;
478 int getXDimSize()
const
480 return this->xdimsize;
483 int getYDimSize()
const
485 return this->ydimsize;
488 std::vector<double> getParams()
const
490 std::vector<double> ret_params;
491 for (
int i = 0; i < 13; i++)
492 ret_params.push_back(param[i]);
501 int getSphere()
const
507 EOS5Type eos_type = OTHERVARS;
508 bool is_2dlatlon =
false;
509 float point_lower = 0.0;
510 float point_upper = 0.0;
511 float point_left = 0.0;
512 float point_right = 0.0;
515 EOS5GridPRType eos5_pixelreg = HE5_HDFE_CENTER;
516 EOS5GridOriginType eos5_origin = HE5_HDFE_GD_UL;
517 EOS5GridPCType eos5_projcode = HE5_GCTP_GEO;
540 return this->newname;
543 const std::vector<Attribute *>&getAttributes()
const
553 std::vector<Attribute *> attrs;
554 bool unsupported_attr_dtype =
false;
555 bool unsupported_attr_dspace =
false;
559 friend class EOS5File;
666 void setDap4(
bool is_dap4)
675 bool getIsCOARD()
const
692 void Retrieve_H5_Obj(hid_t grp_id,
const char*gname,
bool include_attr);
693 void Retrieve_H5_Attr_Info(
Attribute *, hid_t obj_id,
const int j,
bool& unsup_attr_dtype,
bool & unsup_attr_dspace);
695 void Retrieve_H5_Attr_Value(
Attribute *attr,
const std::string &);
697 void Retrieve_H5_VarType(
Var*, hid_t dset_id,
const std::string& varname,
bool &unsup_var_dtype);
698 void Retrieve_H5_VarDim(
Var*, hid_t dset_id,
const std::string &varname,
bool & unsup_var_dspace);
700 float Retrieve_H5_VarCompRatio(
const Var*,
const hid_t)
const;
702 void Handle_Group_Unsupported_Dtype() ;
703 void Handle_Var_Unsupported_Dtype() ;
704 void Handle_VarAttr_Unsupported_Dtype() ;
706 void Handle_GroupAttr_Unsupported_Dspace() ;
707 void Handle_VarAttr_Unsupported_Dspace() ;
709 void Gen_Group_Unsupported_Dtype_Info() ;
710 void Gen_Var_Unsupported_Dtype_Info() ;
711 virtual void Gen_VarAttr_Unsupported_Dtype_Info() ;
713 void Handle_GeneralObj_NameClashing(
bool, std::set<std::string> &objnameset) ;
714 void Handle_Var_NameClashing(std::set<std::string> &objnameset) ;
715 void Handle_Group_NameClashing(std::set<std::string> &objnameset) ;
716 void Handle_Obj_AttrNameClashing() ;
717 template<
typename T>
void Handle_General_NameClashing(std::set<std::string>&objnameset, std::vector<T*>& objvec) ;
719 void Add_One_FakeDim_Name(
Dimension *dim) ;
720 void Adjust_Duplicate_FakeDim_Name(
Dimension * dim) ;
721 void Adjust_Duplicate_FakeDim_Name2(
Dimension * dim,
int dup_dim_size_index) ;
722 void Insert_One_NameSizeMap_Element(std::string name, hsize_t size,
bool unlimited) ;
723 void Insert_One_NameSizeMap_Element2(std::map<std::string, hsize_t> &, std::map<std::string, bool>&, std::string name, hsize_t size,
726 virtual std::string get_CF_string(std::string);
727 void Replace_Var_Info(
Var* src,
Var *target);
728 void Replace_Var_Attrs(
Var *src,
Var*target);
730 void Add_Str_Attr(
Attribute* attr,
const std::string &attrname,
const std::string& strvalue) ;
731 std::string Retrieve_Str_Attr_Value(
Attribute *attr,
const std::string& var_path);
732 bool Is_Str_Attr(
Attribute* attr,
const std::string & varfullpath,
const std::string &attrname,
const std::string& strvalue);
733 void Add_One_Float_Attr(
Attribute* attr,
const std::string &attrname,
float float_value) ;
734 void Replace_Var_Str_Attr(
Var* var,
const std::string &attr_name,
const std::string& strvalue);
735 void Change_Attr_One_Str_to_Others(
Attribute *attr,
const Var *var) ;
738 bool Is_geolatlon(
const std::string &var_name,
bool is_lat);
739 bool has_latlon_cf_units(
Attribute*attr,
const std::string &varfullpath,
bool is_lat);
744 bool is_var_under_group(
const std::string &varname,
const std::string &grpname,
const int var_rank, std::vector<size_t> &var_size);
747 void remove_netCDF_internal_attributes(
bool include_attr);
749 virtual void Gen_Unsupported_Dtype_Info(
bool) = 0;
750 virtual void Gen_Unsupported_Dspace_Info() ;
751 void Gen_DimScale_VarAttr_Unsupported_Dtype_Info() ;
752 void add_ignored_info_page_header();
753 void add_ignored_info_obj_header();
758 void add_ignored_info_links_header();
759 void add_ignored_info_links(
const std::string& link_name);
760 void add_ignored_info_namedtypes(
const std::string&,
const std::string&);
761 void add_ignored_info_attrs(
bool is_grp,
const std::string & obj_path,
const std::string &attr_name);
762 void add_ignored_info_objs(
bool is_dim_related,
const std::string & obj_path);
763 void add_no_ignored_info();
764 bool ignored_dimscale_ref_list(
Var *var);
765 bool Check_DropLongStr(
const Var *var,
const Attribute *attr) ;
766 void add_ignored_var_longstr_info(
const Var*var,
const Attribute *attr) ;
767 void add_ignored_grp_longstr_info(
const std::string& grp_path,
const std::string& attr_name);
768 void add_ignored_droplongstr_hdr();
769 bool Check_VarDropLongStr(
const std::string &varpath,
const std::vector<Dimension *>&, H5DataType)
const;
771 void release_standalone_var_vector(std::vector<Var*>&
vars);
774 std::string Check_Grid_Mapping_VarName(
const std::string& attr_value,
const std::string& var_full_path);
775 std::string Check_Grid_Mapping_FullPath(
const std::string& attr_value);
778 File(
const char *h5_path, hid_t file_id) :
779 path(std::string(h5_path)), fileid(file_id)
797 bool unsupported_var_dtype =
false;
798 bool unsupported_attr_dtype =
false;
800 bool unsupported_var_dspace =
false;
801 bool unsupported_attr_dspace =
false;
802 bool unsupported_var_attr_dspace =
false;
804 std::set<std::string> dimnamelist;
806 std::map<std::string, hsize_t> dimname_to_dimsize;
809 std::map<std::string, bool> dimname_to_unlimited;
813 int addeddimindex = 0;
814 std::vector<std::pair<hsize_t, std::string>>dup_dimsize_dimname;
816 bool check_ignored =
false;
817 bool have_ignored =
false;
818 bool have_udim =
false;
819 bool _is_dap4 =
false;
820 bool iscoard =
false;
821 std::string ignored_msg;
828 GMFile(
const char*path, hid_t file_id, H5GCFProduct product, GMPattern gproduct_pattern);
831 H5GCFProduct getProductType()
const
836 const std::vector<GMCVar *>&getCVars()
const
841 const std::vector<GMSPVar *>&getSPVars()
const
847 void Retrieve_H5_Info(
const char *path, hid_t file_id,
bool include_attr)
override;
909 bool Is_Hybrid_EOS5();
910 void Handle_Hybrid_EOS5();
930 return check_ignored;
940 bool Check_And_Update_New_GPM_L3();
941 void Remove_OMPSNPP_InputPointers();
942 void Add_Dim_Name_GPM() ;
943 void Add_Dim_Name_Mea_SeaWiFS() ;
944 void Handle_UseDimscale_Var_Dim_Names_Mea_SeaWiFS_Ozone(
Var*) ;
945 void Add_UseDimscale_Var_Dim_Names_Mea_SeaWiFS_Ozone(
Var *,
const Attribute*) ;
947 void Add_Dim_Name_Mea_Ozonel3z() ;
948 bool check_cv(
const std::string & varname)
const;
950 void Add_Dim_Name_Aqu_L3() ;
951 void Add_Dim_Name_OBPG_L3() ;
952 void Add_Dim_Name_OSMAPL2S() ;
953 void Add_Dim_Name_ACOS_L2S_OCO2_L1B() ;
955 void Add_Dim_Name_General_Product() ;
956 void Check_General_Product_Pattern() ;
957 bool Check_Dimscale_General_Product_Pattern() ;
958 bool Check_LatLon2D_General_Product_Pattern() ;
959 bool Check_LatLon2D_General_Product_Pattern_Name_Size(
const std::string& latname,
const std::string& lonname)
961 bool Check_LatLon1D_General_Product_Pattern() ;
962 bool Check_LatLon1D_General_Product_Pattern_Name_Size(
const std::string& latname,
const std::string& lonname)
965 bool Check_LatLon_With_Coordinate_Attr_General_Product_Pattern() ;
966 void Build_lat1D_latlon_candidate(
const Var*,
const std::vector<Var*>&);
967 void Build_latg1D_latlon_candidate(
Var*,
const std::vector<Var*>&);
968 void Build_unique_latlon_candidate();
969 void Add_Dim_Name_LatLon1D_Or_CoordAttr_General_Product() ;
970 void Add_Dim_Name_LatLon2D_General_Product() ;
971 void Add_Dim_Name_Dimscale_General_Product() ;
972 void Handle_UseDimscale_Var_Dim_Names_General_Product(
Var*) ;
973 void Add_UseDimscale_Var_Dim_Names_General_Product(
Var*,
Attribute*) ;
976 void Update_M2DLatLon_Dimscale_CVs() ;
977 bool Check_1DGeolocation_Dimscale() ;
978 void Obtain_1DLatLon_CVs(std::vector<GMCVar*> &cvar_1dlat, std::vector<GMCVar*> &cvar_1dlon);
979 void Obtain_2DLatLon_Vars(std::vector<Var*> &var_2dlat, std::vector<Var*> &var_2dlon,
980 std::map<std::string, int>&latlon2d_path_to_index);
981 void Obtain_2DLLVars_With_Dims_not_1DLLCVars(std::vector<Var*> &var_2dlat, std::vector<Var*> &var_2dlon,
982 std::vector<GMCVar*> &cvar_1dlat, std::vector<GMCVar*> &cvar_1dlon, std::map<std::string, int>&latlon2d_path_to_index);
983 void Obtain_2DLLCVar_Candidate(std::vector<Var*> &var_2dlat, std::vector<Var*> &var_2dlon,
984 std::map<std::string, int>&latlon2d_path_to_index) ;
985 void Obtain_unique_2dCV(std::vector<Var*>&, std::map<std::string, int>&);
986 void Remove_2DLLCVar_Final_Candidate_from_Vars(std::vector<int>&) ;
988 void Handle_CVar_GPM_L1() ;
989 void Handle_CVar_GPM_L3() ;
990 void Handle_CVar_Mea_SeaWiFS() ;
991 void Handle_CVar_Aqu_L3() ;
992 void Handle_CVar_OBPG_L3() ;
993 void Handle_CVar_OSMAPL2S() ;
994 void Handle_CVar_Mea_Ozone() ;
995 void Handle_SpVar_ACOS_OCO2() ;
996 void Handle_CVar_Dimscale_General_Product() ;
997 void Handle_CVar_LatLon2D_General_Product() ;
998 void Handle_CVar_LatLon1D_General_Product() ;
999 void Handle_CVar_LatLon_General_Product() ;
1001 void Adjust_Mea_Ozone_Obj_Name() ;
1002 void Adjust_GPM_L3_Obj_Name() ;
1004 void Handle_GMCVar_NameClashing(std::set<std::string> &) ;
1005 void Handle_GMCVar_AttrNameClashing() ;
1006 void Handle_GMSPVar_NameClashing(std::set<std::string> &) ;
1007 void Handle_GMSPVar_AttrNameClashing() ;
1008 template<
typename T>
void GMHandle_General_NameClashing(std::set<std::string>&objnameset, std::vector<T*>& objvec)
1011 std::string get_CF_string(std::string s)
override;
1014 bool Check_Var_2D_CVars(
Var*) ;
1015 bool Flatten_VarPath_In_Coordinates_Attr(
Var*) ;
1019 void Handle_LatLon_With_CoordinateAttr_Coor_Attr() ;
1020 bool Coord_Match_LatLon_NameSize(
const std::string & coord_values) ;
1021 bool Coord_Match_LatLon_NameSize_Same_Group(
const std::string & coord_values,
const std::string &var_path) ;
1022 void Add_VarPath_In_Coordinates_Attr(
Var*,
const std::string &);
1025 void Handle_GPM_l1_Coor_Attr() ;
1026 void Correct_GPM_L1_LatLon_units(
Var *var,
const std::string unit_value) ;
1027 void Add_GPM_Attrs() ;
1029 void Add_Aqu_Attrs() ;
1030 void Add_SeaWiFS_Attrs() ;
1031 void Create_Missing_CV(
GMCVar*,
const std::string &) ;
1033 bool Is_netCDF_Dimension(
Var *var) ;
1035 void Gen_Unsupported_Dtype_Info(
bool)
override;
1036 void Gen_VarAttr_Unsupported_Dtype_Info()
override;
1037 void Gen_GM_VarAttr_Unsupported_Dtype_Info();
1038 void Gen_Unsupported_Dspace_Info()
override;
1039 void Handle_GM_Unsupported_Dtype(
bool) ;
1040 void Handle_GM_Unsupported_Dspace(
bool) ;
1042 bool Remove_EOS5_Strings(std::string &);
1043 bool Remove_EOS5_Strings_NonEOS_Fields (std::string &);
1044 void release_standalone_GMCVar_vector(std::vector<GMCVar*> &tempgc_vars);
1047 H5GCFProduct product_type;
1048 GMPattern gproduct_pattern;
1049 std::vector<GMCVar *> cvars;
1050 std::vector<GMSPVar *> spvars;
1051 std::string gp_latname;
1052 std::string gp_lonname;
1053 std::set<std::string> grp_cv_paths;
1054 std::vector<struct Name_Size_2Pairs> latloncv_candidate_pairs;
1059 bool have_nc4_non_coord =
false;
1068 std::fill_n(param, 13, 0);
1074 void Update_Dimnamelist();
1077 float point_lower = 0.0;
1078 float point_upper = 0.0;
1079 float point_left = 0.0;
1080 float point_right = 0.0;
1081 EOS5GridPRType eos5_pixelreg = HE5_HDFE_CENTER;
1082 EOS5GridOriginType eos5_origin = HE5_HDFE_GD_UL;
1083 EOS5GridPCType eos5_projcode = HE5_GCTP_GEO;
1089 std::vector<std::string> dimnames;
1090 std::set<std::string> vardimnames;
1091 std::map<std::string, hsize_t> dimnames_to_dimsizes;
1094 std::map<std::string, bool> dimnames_to_unlimited;
1096 std::map<hsize_t, std::string> dimsizes_to_dimnames;
1097 int addeddimindex = 0;
1099 std::map<std::string, std::string> dnames_to_1dvnames;
1103 bool has_nolatlon =
true;
1104 bool has_1dlatlon =
false;
1105 bool has_2dlatlon =
false;
1106 bool has_g2dlatlon =
false;
1119 std::vector<std::string> dimnames;
1120 std::set<std::string> vardimnames;
1121 std::map<std::string, hsize_t> dimnames_to_dimsizes;
1124 std::map<std::string, bool> dimnames_to_unlimited;
1126 std::map<hsize_t, std::string> dimsizes_to_dimnames;
1127 int addeddimindex = 0;
1129 std::map<std::string, std::string> dnames_to_geo1dvnames;
1131 bool has_nolatlon =
true;
1132 bool has_1dlatlon =
false;
1133 bool has_2dlatlon =
false;
1134 bool has_g2dlatlon =
false;
1148 std::vector<std::string> dimnames;
1149 std::set<std::string> vardimnames;
1150 std::map<std::string, hsize_t> dimnames_to_dimsizes;
1152 std::map<std::string, bool> dimnames_to_unlimited;
1154 std::map<hsize_t, std::string> dimsizes_to_dimnames;
1155 int addeddimindex = 0;
1157 std::map<std::string, std::string> dnames_to_1dvnames;
1166 EOS5File(
const char*he5_path, hid_t file_id) :
1167 File(he5_path, file_id)
1181 void Retrieve_H5_Info(
const char *path, hid_t file_id,
bool include_attr)
override;
1261 bool Have_EOS5_Grids() {
1262 return !(this->eos5cfgrids.empty());
1266 return check_ignored;
1275 void Adjust_H5_Attr_Value(
Attribute *attr) ;
1277 void Adjust_EOS5Dim_List(std::vector<HE5Dim>&) ;
1278 void Condense_EOS5Dim_List(std::vector<HE5Dim>&) ;
1279 void Remove_NegativeSizeDims(std::vector<HE5Dim>&) ;
1280 void Adjust_EOS5DimSize_List(std::vector<HE5Dim>&,
const std::vector<HE5Var>&,
const EOS5Type,
const std::string & eos5objname);
1281 void Adjust_EOS5VarDim_Info(std::vector<HE5Dim>&, std::vector<HE5Dim>&,
const std::string &, EOS5Type) ;
1283 void EOS5Handle_nonlatlon_dimcvars(std::vector<HE5Var> & eos5varlist, EOS5Type, std::string groupname,
1284 std::map<std::string, std::string>& dnamesgeo1dvnames) ;
1285 template<
class T>
void EOS5SwathGrid_Set_LatLon_Flags(T* eos5gridswath, std::vector<HE5Var>& eos5varlist)
1288 void Obtain_Var_NewName(
Var*) ;
1289 EOS5Type Get_Var_EOS5_Type(
Var*) ;
1292 template<
class T>
bool Set_Var_Dims(T*,
Var*, std::vector<HE5Var>&,
const std::string&,
int, EOS5Type) ;
1293 template<
class T>
void Create_Unique_DimName(T*, std::set<std::string>&,
Dimension *,
int, EOS5Type) ;
1295 template<
class T>
bool Check_All_DimNames(T*, std::string &, hsize_t);
1296 std::string Obtain_Var_EOS5Type_GroupName(
const Var*, EOS5Type)
const;
1297 int Check_EOS5Swath_FieldType(
const Var*)
const;
1298 void Get_Unique_Name(std::set<std::string>&, std::string&) ;
1300 template<
class T> std::string Create_Unique_FakeDimName(T*, EOS5Type) ;
1301 template<
class T>
void Set_NonParse_Var_Dims(T*,
Var*,
const std::map<hsize_t, std::string>&,
int, EOS5Type) ;
1303 void Handle_Grid_CVar(
bool) ;
1304 void Handle_Augmented_Grid_CVar() ;
1305 template<
class T>
void Handle_Single_Augment_CVar(T*, EOS5Type) ;
1307 void Handle_Multi_Nonaugment_Grid_CVar() ;
1308 void Handle_Single_Nonaugment_Grid_CVar(
EOS5CFGrid*) ;
1309 bool Handle_Single_Nonaugment_Grid_CVar_OwnLatLon(
const EOS5CFGrid *, std::set<std::string>&) ;
1310 bool Handle_Single_Nonaugment_Grid_CVar_EOS5LatLon(
const EOS5CFGrid *, std::set<std::string>&) ;
1311 void Handle_NonLatLon_Grid_CVar(
EOS5CFGrid *, std::set<std::string>&) ;
1312 void Remove_MultiDim_LatLon_EOS5CFGrid() ;
1315 void Handle_Swath_CVar(
bool) ;
1316 void Handle_Single_1DLatLon_Swath_CVar(
EOS5CFSwath *cfswath,
bool is_augmented) ;
1317 void Handle_Single_2DLatLon_Swath_CVar(
EOS5CFSwath *cfswath,
bool is_augmented) ;
1318 void Handle_NonLatLon_Swath_CVar(
EOS5CFSwath *cfswath, std::set<std::string>& tempvardimnamelist) ;
1319 void Handle_Special_NonLatLon_Swath_CVar(
EOS5CFSwath *cfswath, std::set<std::string>&tempvardimnamelist) ;
1321 void Handle_Za_CVar(
bool) ;
1323 bool Check_Augmentation_Status() ;
1328 template<
class T>
bool Check_Augmented_Var_Candidate(T*,
Var*, EOS5Type) ;
1330 template<
class T>
void Adjust_Per_Var_Dim_NewName_Before_Flattening(T*,
bool,
int,
int,
int) ;
1331 void Adjust_SharedLatLon_Grid_Var_Dim_Name() ;
1333 void Adjust_Aura_Attr_Name() ;
1334 void Adjust_Aura_Attr_Value() ;
1335 void Handle_EOS5CVar_Unit_Attr() ;
1336 void Add_EOS5_Grid_CF_Attr() ;
1337 void Handle_Aura_Special_Attr() ;
1339 std::string get_CF_string(std::string s)
override;
1342 void Handle_EOS5CVar_NameClashing(std::set<std::string> &) ;
1343 void Handle_EOS5CVar_AttrNameClashing() ;
1344 template<
typename T>
void EOS5Handle_General_NameClashing(std::set<std::string>&objnameset, std::vector<T*>& objvec)
1346 template<
typename T>
void Create_Missing_CV(T*,
EOS5CVar*,
const std::string &, EOS5Type,
int) ;
1347 void Create_Added_Var_NewName_FullPath(EOS5Type,
const std::string&,
const std::string&, std::string &, std::string &) ;
1349 void Handle_EOS5_Unsupported_Dtype(
bool) ;
1350 void Handle_EOS5_Unsupported_Dspace(
bool) ;
1352 void Gen_Unsupported_Dtype_Info(
bool)
override;
1353 void Gen_VarAttr_Unsupported_Dtype_Info()
override;
1354 void Gen_EOS5_VarAttr_Unsupported_Dtype_Info() ;
1356 void Gen_Unsupported_Dspace_Info()
override;
1359 std::vector<EOS5CVar *> cvars;
1360 std::vector<EOS5CFGrid *> eos5cfgrids;
1361 std::vector<EOS5CFSwath *> eos5cfswaths;
1362 std::vector<EOS5CFZa *> eos5cfzas;
1363 std::map<std::string, std::string> eos5_to_cf_attr_map;
1364 bool grids_multi_latloncvs =
false;
1365 bool isaura =
false;
1366 EOS5AuraName aura_name = NOTAURA;
1367 int orig_num_grids = 0;
1368 std::multimap<std::string, std::string> dimname_to_dupdimnamelist;
This file includes several helper functions for translating HDF5 to CF-compliant.
This file includes functions to identify different NASA HDF5 products. Current supported products inc...
A class for parsing NASA HDF-EOS5 StructMetadata.
This class represents one attribute.
This class is a derived class of Var. It represents a coordinate variable.
CVType getCVType() const
Get the coordinate variable type of this variable.
This class repersents one dimension of an HDF5 dataset(variable).
bool HaveUnlimitedDim() const
Has unlimited dimensions.
This class simulates an HDF-EOS5 Grid. Currently only geographic projection is supported.
This class simulates an HDF-EOS5 Swath.
This class simulates an HDF-EOS5 Zonal average object.
This class is a derived class of CVar. It represents a coordinate variable for HDF-EOS5 files.
This class is a derived class of File. It includes methods applied to HDF-EOS5 files only.
bool Get_IgnoredInfo_Flag() override
Obtain the flag to see if ignored objects should be generated.
const std::string & Get_Ignored_Msg() override
Obtain the message that contains the ignored object info.
void Adjust_Obj_Name() override
This method is a no-op operation. Leave here since the method in the base class is pure virtual.
void Add_EOS5File_Info(HE5Parser *, bool)
Add HDF-EOS5 dimension and coordinate variable related info. to EOS5Grid,EOS5Swath etc.
void Handle_Grid_Mapping_Vars() override
Handle Grid Mapping Vars.
void Retrieve_H5_Info(const char *path, hid_t file_id, bool include_attr) override
Retrieve DDS information from the HDF5 file; a real implementation for HDF-EOS5 products.
void Add_Supplement_Attrs(bool) override
Add the supplemental attributes for HDF-EOS5 products.
void Set_COARDS_Status()
Set COARDS flag.
void Adjust_Var_Dim_NewName_Before_Flattening()
Adjust variable dimension names before the flattening for HDF-EOS5 files.
void Handle_CVar() override
Handle coordinate variable for HDF-EOS5 files.
void Adjust_Attr_Info()
Adjust the attribute info for HDF-EOS5 products.
void Handle_SpVar_Attr() override
Handle special variables for HDF-EOS5 files.
void Handle_Obj_NameClashing(bool)
Handle the object name clashing for HDF-EOS5 products.
void Handle_Unsupported_Dtype(bool) override
Handle unsupported HDF5 datatypes for HDF-EOS5 products.
bool Have_Grid_Mapping_Attrs() override
Check if having Grid Mapping Attrs.
void Handle_DimNameClashing() override
void Handle_Unsupported_Others(bool) override
Handle other unmapped objects/attributes for HDF-EOS5 products.
void Retrieve_H5_CVar_Supported_Attr_Values() override
Retrieve coordinate variable attributes.
void Handle_SpVar() override
Handle special variables for HDF-EOS5 files.
void Adjust_Var_NewName_After_Parsing()
Adjust variable names for HDF-EOS5 files.
void Retrieve_H5_Supported_Attr_Values() override
Retrieve attribute values for the supported HDF5 datatypes for HDF-EOS5 products.
void Add_Dim_Name(HE5Parser *)
Add the dimension name for HDF-EOS5 files.
void Adjust_Dim_Name() override
Adjust the dimension name for HDF-EOS5 products.
void Handle_SpVar_DMR() override
Handle special variables and attributes for HDF-EOS5 files(for DMR)
void Handle_Unsupported_Dspace(bool) override
Handle unsupported HDF5 dataspaces for HDF-EOS5 products.
void Flatten_Obj_Name(bool include_attr) override
Flatten the object name for HDF-EOS5 files.
void Check_Aura_Product_Status()
Check if the HDF-EOS5 file is an Aura file. Special CF operations need to be used.
const std::vector< EOS5CVar * > & getCVars() const
Obtain coordinate variables for HDF-EOS5 products.
void Adjust_EOS5Dim_Info(HE5Parser *strmeta_info)
Adjust HDF-EOS5 dimension information.
void Handle_Coor_Attr() override
Handle the coordinates attribute for HDF-EOS5 products.
Exception(const std::string &msg)
Constructor.
This class retrieves all information from an HDF5 file.
bool HaveUnlimitedDim() const
Has unlimited dimensions.
std::vector< Group * > groups
Non-root group vectors.
virtual void Retrieve_H5_Var_Attr_Values(Var *var)
Retrieve attribute values for a variable.
virtual void Handle_Unsupported_Dspace(bool)
Handle unsupported HDF5 dataspaces for datasets.
std::map< hsize_t, std::string > dimsize_to_fakedimname
Handle added dimension names.
virtual void Handle_Grid_Mapping_Vars()
Handle Grid Mapping Vars.
virtual bool Get_IgnoredInfo_Flag()=0
Obtain the flag to see if ignored objects should be generated.
hid_t getFileID() const
Obtain the HDF5 file ID.
virtual void Handle_Unsupported_Others(bool)
Handle other unmapped objects/attributes.
virtual void Retrieve_H5_Supported_Attr_Values()
Retrieve attribute values for the supported HDF5 datatypes.
std::vector< Var * > vars
Var vectors.
const std::vector< Attribute * > & getAttributes() const
Public interface to obtain information of all attributes under the root group.
virtual void Add_Supplement_Attrs(bool)
Add supplemental attributes such as fullpath and original name.
virtual void Handle_Coor_Attr()=0
Handle "coordinates" attributes.
virtual void Retrieve_H5_Info(const char *path, hid_t file_id, bool)
std::vector< Attribute * > root_attrs
Root attribute vectors.
virtual void Handle_SpVar_Attr()=0
Handle special variable attributes.
const std::vector< Group * > & getGroups() const
Public interface to obtain all the group info.
virtual void Handle_CVar()=0
Handle coordinate variables.
virtual void Adjust_Dim_Name()=0
Adjust dimension names based on different products.
const std::string & getPath() const
Obtain the path of the file.
virtual void Adjust_Obj_Name()=0
Adjust object names based on different products.
const std::vector< Var * > & getVars() const
Public interface to obtain information of all variables.
virtual void Handle_SpVar_DMR()=0
Handle Special variable and attributes for DMR.
virtual void Handle_Unsupported_Dtype(bool)
Handle unsupported HDF5 datatypes.
virtual const std::string & Get_Ignored_Msg()=0
Obtain the message that contains the ignored object info.
virtual void Flatten_Obj_Name(bool)
Flatten the object name.
virtual void Handle_DimNameClashing()=0
virtual void Retrieve_H5_CVar_Supported_Attr_Values()=0
Retrieve coordinate variable attributes.
virtual void Handle_SpVar()=0
Handle special variables.
virtual bool Have_Grid_Mapping_Attrs()
Check if having Grid Mapping Attrs.
This class is a derived class of CVar. It represents a coordinate variable for general HDF5 files.
H5GCFProduct getPtType() const
Get the data type of this variable.
This class is a derived class of File. It includes methods applied to general HDF5 files only.
void Add_Supplement_Attrs(bool) override
Add supplemental attributes such as fullpath and original name for general NASA HDF5 products.
void Add_Path_Coord_Attr()
Update the coordinate attribute to include path and also flatten.
void Handle_Obj_NameClashing(bool)
Handle object name clashing for general NASA HDF5 products.
void Remove_Unused_FakeDimVars()
Unsupported datatype array may generate FakeDim. Remove them.
void Update_Product_Type()
Update "product type" attributes for general HDF5 products.
bool Have_Grid_Mapping_Attrs() override
Check if having Grid Mapping Attrs.
void Handle_SpVar_Attr() override
Handle special variable attributes for general NASA HDF5 products.
void Handle_DimNameClashing() override
void Handle_Grid_Mapping_Vars() override
Handle Grid Mapping Vars.
void Adjust_H5_Attr_Value(Attribute *attr)
Adjust attribute values for general HDF5 products.
void Retrieve_H5_CVar_Supported_Attr_Values() override
Retrieve coordinate variable attributes.
void Retrieve_H5_Info(const char *path, hid_t file_id, bool include_attr) override
Retrieve DDS information from the HDF5 file; real implementation for general HDF5 products.
void Handle_SpVar() override
Handle special variables for general NASA HDF5 products.
const std::string & Get_Ignored_Msg() override
Get the message that contains the ignored obj. info.
void Remove_Unneeded_Objects()
Remove unneeded objects.
void Handle_CVar() override
Handle coordinate variables for general NASA HDF5 products.
void Add_Dim_Name()
Add dimension name.
void Retrieve_H5_Supported_Attr_Values() override
Retrieve attribute values for the supported HDF5 datatypes for general HDF5 products.
void Handle_Coor_Attr() override
Handle "coordinates" attributes for general HDF5 products.
void Rename_NC4_NonCoordVars()
Remove the _nc4_non_coord from the variable new names.
void Handle_Unsupported_Dspace(bool) override
Handle unsupported HDF5 dataspaces for general HDF5 products.
void Handle_Unsupported_Others(bool) override
Handle other unmapped objects/attributes for general HDF5 products.
void Handle_Unsupported_Dtype(bool) override
Handle unsupported HDF5 datatypes for general HDF5 products.
void Flatten_Obj_Name(bool include_attr) override
Flatten the object name for general NASA HDF5 products.
void Adjust_Dim_Name() override
Adjust dimension name for general NASA HDF5 products.
void Adjust_Obj_Name() override
Adjust object names based on different general NASA HDF5 products.
void Handle_SpVar_DMR() override
bool Get_IgnoredInfo_Flag() override
Obtain ignored info. flag.
This class is a derived class of Var. It represents a special general HDF5 product(currently ACOS and...
This class represents an HDF5 group. The group will be flattened according to the CF conventions.
const std::string & getPath() const
Get the original path of this group.
const std::string & getNewName() const
Get the new name of this group(flattened,name clashed checked)
This class represents one HDF5 dataset(CF variable)
float getCompRatio() const
Get the compression ratio of this dataset.
int getRank() const
Get the dimension rank of this variable.
const std::string & getFullPath() const
Get the full path of this variable.
const std::string & getName() const
Get the original name of this variable.
H5DataType getType() const
Get the data type of this variable(Not HDF5 datatype id)
const std::vector< Dimension * > & getDimensions() const
Get the list of the dimensions.
const std::string & getNewName() const
Get the new name of this variable.