50 for (vector<Attribute*>::iterator ira = var->
attrs.begin();
51 ira!=var->
attrs.end(); ++ira) {
53 attr->
name = (*ira)->name;
54 attr->
newname = (*ira)->newname;
55 attr->
dtype =(*ira)->dtype;
56 attr->
count =(*ira)->count;
57 attr->
strsize = (*ira)->strsize;
59 attr->
value =(*ira)->value;
60 attrs.push_back(attr);
63 for (vector<Dimension*>::iterator ird = var->
dims.begin();
64 ird!=var->
dims.end(); ++ird) {
66 dim->
name = (*ird)->name;
84 for (set<string>::iterator it = this->vardimnames.begin();
85 it != this->vardimnames.end(); ++it) {
87 if (
"XDim" == xydimname_candidate) {
88 this->vardimnames.erase(*it);
93 for (set<string>::iterator it = this->vardimnames.begin();
94 it != this->vardimnames.end(); ++it) {
96 if (
"YDim" == xydimname_candidate) {
97 this->vardimnames.erase(*it);
107 for (vector<EOS5CVar *>:: const_iterator i= this->cvars.begin(); i!=this->cvars.end(); ++i)
110 for (vector<EOS5CFGrid *>:: const_iterator i= this->eos5cfgrids.begin(); i!=this->eos5cfgrids.end(); ++i)
113 for (vector<EOS5CFSwath *>:: const_iterator i= this->eos5cfswaths.begin(); i!=this->eos5cfswaths.end(); ++i)
116 for (vector<EOS5CFZa *>:: const_iterator i= this->eos5cfzas.begin(); i!=this->eos5cfzas.end(); ++i)
132 hid_t file_id,
bool include_attr)
throw (
Exception) {
141 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
142 ircv != this->cvars.end(); ++ircv) {
144 for (vector<Attribute *>::iterator ira = (*ircv)->attrs.begin();
145 ira != (*ircv)->attrs.end(); ++ira)
159 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
160 ircv != this->cvars.end(); ++ircv) {
161 if (
true == include_attr) {
162 for (vector<Attribute *>::iterator ira = (*ircv)->attrs.begin();
163 ira != (*ircv)->attrs.end(); ++ira) {
167 (*ircv)->attrs.erase(ira);
176 this->cvars.erase(ircv);
188 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
189 ircv != this->cvars.end(); ++ircv) {
190 if (
true == (*ircv)->unsupported_dspace) {
192 this->cvars.erase(ircv);
202 for (
unsigned int i = 0; i <strmeta_info->swath_list.size();++i) {
203 HE5Swath& he5s = strmeta_info->swath_list.at(i);
206 for (
unsigned int j = 0; j<he5s.
geo_var_list.size(); ++j) {
214 for (
unsigned int i = 0; i <strmeta_info->grid_list.size();++i) {
216 HE5Grid& he5g = strmeta_info->grid_list.at(i);
225 for (
unsigned int i = 0; i <strmeta_info->za_list.size();++i) {
226 HE5Za& he5z = strmeta_info->za_list.at(i);
237 Remove_NegativeSizeDims(groupdimlist);
240 Condense_EOS5Dim_List(groupdimlist);
246 vector <HE5Dim>:: iterator id;
252 for (
id = groupdimlist.begin();
id != groupdimlist.end(); ++id) {
253 if ((*id).size <= 0) {
254 groupdimlist.erase(
id);
264 pair<set<int>::iterator,
bool> setret;
265 vector <HE5Dim>:: iterator id;
267 for (
id = groupdimlist.begin();
id != groupdimlist.end(); ++id) {
268 if (
"XDim" == (*id).name ||
"Xdim" == (*id).name) {
269 setret = xdimsizes.insert((*id).size);
270 if (
false == setret.second) {
271 groupdimlist.erase(
id);
274 else if (
"Xdim" == (*id).name) (*id).name =
"XDim";
279 for (
id = groupdimlist.begin();
id != groupdimlist.end(); ++id) {
280 if (
"YDim" == (*id).name ||
"Ydim" ==(*id).name) {
281 setret = ydimsizes.insert((*id).size);
282 if (
false == setret.second) {
283 groupdimlist.erase(
id);
286 else if (
"Ydim" == (*id).name)
296 set<string> dimnamelist;
297 pair<set<string>::iterator,
bool> setret;
304 for (
unsigned int i = 0; i <vardimlist.size(); ++i) {
306 HE5Dim& he5d = vardimlist.at(i);
307 bool dim_in_groupdimlist =
false;
308 for (
unsigned int j = 0; j <groupdimlist.size();++j) {
309 HE5Dim he5gd = groupdimlist.at(j);
312 dim_in_groupdimlist =
true;
317 if (
false == dim_in_groupdimlist)
318 throw2(
"The EOS5 group dimension name list doesn't include the dimension ",he5d.
name);
323 setret = dimnamelist.insert(he5d.
name);
324 if (
false == setret.second) {
326 string temp_clashname=he5d.
name+
'_';
329 string ori_dimname = he5d.
name;
331 he5d.
name = temp_clashname;
334 bool dim_exist =
false;
335 for (
unsigned int j = 0; j <groupdimlist.size();++j) {
336 if (he5d.
name == groupdimlist[j].name &&
337 he5d.
size == groupdimlist[j].size ) {
343 if (
false == dim_exist) {
344 ori_dimname = eos5_obj_name +
"/" + ori_dimname;
345 string dup_dimname = eos5_obj_name +
"/" + he5d.
name;
346 if (
GRID == eos5type){
347 ori_dimname =
"/GRIDS/"+ori_dimname;
348 dup_dimname =
"/GRIDS/"+dup_dimname;
350 else if (
SWATH == eos5type){
351 ori_dimname =
"/SWATHS/"+ori_dimname;
352 dup_dimname =
"/SWATHS/"+dup_dimname;
354 else if (
ZA == eos5type) {
355 ori_dimname =
"/ZAS/" + ori_dimname;
356 dup_dimname =
"/ZAS/"+dup_dimname;
359 dimname_to_dupdimnamelist.insert(pair<string,string>(ori_dimname,dup_dimname));
360 groupdimlist.push_back(he5d);
371 string fslash_str=
"/";
372 string grid_str =
"/GRIDS/";
373 string swath_str=
"/SWATHS/";
374 string za_str =
"/ZAS/";
383 this->orig_num_grids = strmeta_info->grid_list.size();
386 for(
unsigned int i=0; i < strmeta_info->grid_list.size(); i++) {
387 HE5Grid he5g = strmeta_info->grid_list.at(i);
389 eos5grid->name = he5g.
name;
390 eos5grid->dimnames.resize(he5g.
dim_list.size());
392 for (
unsigned int j=0; j <he5g.
dim_list.size(); j++) {
395 if (
"XDim" == he5d.
name)
396 eos5grid->xdimsize = he5d.
size;
397 if (
"YDim" == he5d.
name)
398 eos5grid->ydimsize = he5d.
size;
408 string unique_dimname=
409 grid_str +he5g.
name + fslash_str + he5d.
name;
411 (eos5grid->dimnames)[j] = unique_dimname;
413 pair<map<hsize_t,string>::iterator,
bool>mapret1;
414 mapret1 = eos5grid->dimsizes_to_dimnames.insert(pair<hsize_t,string>((hsize_t)he5d.
size,unique_dimname));
419 pair<map<string,hsize_t>::iterator,
bool>mapret2;
420 mapret2 = eos5grid->dimnames_to_dimsizes.insert(pair<string,hsize_t>(unique_dimname,(hsize_t)he5d.
size));
421 if (
false == mapret2.second)
422 throw5(
"The dimension name ",unique_dimname,
" with the dimension size ", he5d.
size,
"is not unique");
430 map<string,string> dnames_to_1dvnames;
432 eos5grid->dnames_to_1dvnames = dnames_to_1dvnames;
441 this->eos5cfgrids.push_back(eos5grid);
445 this->grids_multi_latloncvs = grids_mllcv;
448 for (
unsigned int i=0; i < strmeta_info->swath_list.size(); i++) {
450 HE5Swath he5s = strmeta_info->swath_list.at(i);
452 eos5swath->name = he5s.
name;
453 eos5swath->dimnames.resize(he5s.
dim_list.size());
455 for (
unsigned int j=0; j <he5s.
dim_list.size(); j++) {
467 string unique_dimname=
468 swath_str + he5s.
name + fslash_str + he5d.
name;
469 (eos5swath->dimnames)[j] = unique_dimname;
473 pair<map<hsize_t,string>::iterator,
bool>mapret1;
474 mapret1 = eos5swath->dimsizes_to_dimnames.insert(pair<hsize_t,string>((hsize_t)he5d.
size,unique_dimname));
479 pair<map<string,hsize_t>::iterator,
bool>mapret2;
480 mapret2 = eos5swath->dimnames_to_dimsizes.insert(pair<string,hsize_t>(unique_dimname,(hsize_t)he5d.
size));
481 if (
false == mapret2.second)
482 throw5(
"The dimension name ",unique_dimname,
" with the dimension size ", he5d.
size,
"is not unique");
487 EOS5SwathGrid_Set_LatLon_Flags(eos5swath,he5s.
geo_var_list);
490 map<string,string> dnames_to_geo1dvnames;
492 eos5swath->dnames_to_geo1dvnames = dnames_to_geo1dvnames;
493 this->eos5cfswaths.push_back(eos5swath);
497 for(
unsigned int i=0; i < strmeta_info->za_list.size(); i++) {
499 HE5Za he5z = strmeta_info->za_list.at(i);
502 eos5za->name = he5z.
name;
503 eos5za->dimnames.resize(he5z.
dim_list.size());
505 for (
unsigned int j=0; j <he5z.
dim_list.size(); j++) {
513 string unique_dimname =
514 za_str + he5z.
name + fslash_str + he5d.
name;
515 (eos5za->dimnames)[j] = unique_dimname;
516 pair<map<hsize_t,string>::iterator,
bool>mapret1;
517 mapret1 = eos5za->dimsizes_to_dimnames.insert(pair<hsize_t,string>((hsize_t)he5d.
size,unique_dimname));
522 pair<map<string,hsize_t>::iterator,
bool>mapret2;
523 mapret2 = eos5za->dimnames_to_dimsizes.insert(pair<string,hsize_t>(unique_dimname,(hsize_t)he5d.
size));
524 if (
false == mapret2.second)
525 throw5(
"The dimension name ",unique_dimname,
" with the dimension size ", he5d.
size,
"is not unique");
530 map<string,string> dnames_to_1dvnames;
532 eos5za->dnames_to_1dvnames = dnames_to_1dvnames;
533 this->eos5cfzas.push_back(eos5za);
538 for (vector<EOS5CFGrid *>::iterator irg = this->eos5cfgrids.begin();
539 irg != this->eos5cfgrids.end(); ++irg) {
541 cerr<<
"grid name "<<(*irg)->name <<endl;
542 cerr<<
"eos5_pixelreg"<<(*irg)->eos5_pixelreg <<endl;
543 cerr<<
"eos5_origin"<<(*irg)->eos5_pixelreg <<endl;
544 cerr<<
"point_lower "<<(*irg)->point_lower <<endl;
545 cerr<<
"xdimsize "<<(*irg)->xdimsize <<endl;
547 if((*irg)->has_g2dlatlon) cerr<<
"has g2dlatlon"<<endl;
548 if((*irg)->has_2dlatlon) cerr<<
"has 2dlatlon"<<endl;
549 if((*irg)->has_1dlatlon) cerr<<
"has 1dlatlon"<<endl;
550 if((*irg)->has_nolatlon) cerr<<
"has no latlon" <<endl;
551 if(this->grids_multi_latloncvs) cerr<<
"having multiple lat/lon from structmeta" <<endl;
552 else cerr<<
"no multiple lat/lon from structmeta" <<endl;
556 cerr <<
"number of dimensions "<<(*irg)->dimnames.size() <<endl;
557 for (vector<string>::iterator irv = (*irg)->dimnames.begin();
558 irv != (*irg)->dimnames.end(); ++irv)
559 cerr<<
"dim names" <<*irv <<endl;
562 for (map<hsize_t,string>::iterator im1 = (*irg)->dimsizes_to_dimnames.begin();
563 im1 !=(*irg)->dimsizes_to_dimnames.end();++im1) {
564 cerr<<
"size to name "<< (int)((*im1).first) <<
"=> "<<(*im1).second <<endl;
568 for (map<string,string>::iterator im2 = (*irg)->dnames_to_1dvnames.begin();
569 im2 !=(*irg)->dnames_to_1dvnames.end();++im2) {
570 cerr<<
"dimanme to 1d var name "<< (*im2).first <<
"=> "<<(*im2).second <<endl;
575 for (vector<EOS5CFSwath *>::iterator irg = this->eos5cfswaths.begin();
576 irg != this->eos5cfswaths.end(); ++irg) {
578 cerr<<
"swath name "<<(*irg)->name <<endl;
579 if((*irg)->has_nolatlon) cerr<<
"has no latlon" <<endl;
580 if((*irg)->has_1dlatlon) cerr<<
"has 1dlatlon"<<endl;
581 if((*irg)->has_2dlatlon) cerr<<
"has 2dlatlon"<<endl;
584 for (vector<string>::iterator irv = (*irg)->dimnames.begin();
585 irv != (*irg)->dimnames.end(); ++irv)
586 cerr<<
"dim names" <<*irv <<endl;
589 for (map<hsize_t,string>::iterator im1 = (*irg)->dimsizes_to_dimnames.begin();
590 im1 !=(*irg)->dimsizes_to_dimnames.end();++im1) {
591 cerr<<
"size to name "<< (int)((*im1).first) <<
"=> "<<(*im1).second <<endl;
595 for (map<string,string>::iterator im2 = (*irg)->dnames_to_geo1dvnames.begin();
596 im2 !=(*irg)->dnames_to_geo1dvnames.end();++im2) {
597 cerr<<
"dimname to 1d varname "<< (*im2).first <<
"=> "<<(*im2).second <<endl;
601 for (vector<EOS5CFZa *>::iterator irg = this->eos5cfzas.begin();
602 irg != this->eos5cfzas.end(); ++irg) {
604 cerr<<
"za name now"<<(*irg)->name <<endl;
607 for (vector<string>::iterator irv = (*irg)->dimnames.begin();
608 irv != (*irg)->dimnames.end(); ++irv)
609 cerr<<
"dim names" <<*irv <<endl;
612 for (map<hsize_t,string>::iterator im1 = (*irg)->dimsizes_to_dimnames.begin();
613 im1 !=(*irg)->dimsizes_to_dimnames.end();++im1) {
614 cerr<<
"size to name "<< (int)((*im1).first) <<
"=> "<<(*im1).second <<endl;
618 for (map<string,string>::iterator im2 = (*irg)->dnames_to_1dvnames.begin();
619 im2 !=(*irg)->dnames_to_1dvnames.end();++im2) {
620 cerr<<
"dimname to 1d varname "<< (*im2).first <<
"=> "<<(*im2).second <<endl;
630 bool find_lat =
false;
631 bool find_lon =
false;
632 bool has_1dlat =
false;
633 bool has_1dlon =
false;
634 bool has_2dlat =
false;
639 bool has_2dlon =
false;
640 bool has_g2dlat =
false;
641 bool has_g2dlon =
false;
643 for (
unsigned int i = 0; i < eos5varlist.size(); ++i) {
644 HE5Var he5v = eos5varlist.at(i);
645 if (
"Latitude" == he5v.
name) {
647 int num_dims = he5v.
dim_list.size();
650 else if (2 == num_dims) {
651 lat_ydimname = (he5v.
dim_list)[0].name;
652 lat_xdimname = (he5v.
dim_list)[1].name;
655 else if (num_dims >2)
658 throw1(
"The number of dimension should not be 0 for grids or swaths");
661 if (
"Longitude" == he5v.
name) {
663 int num_dims = he5v.
dim_list.size();
666 else if (2 == num_dims) {
667 lon_ydimname = (he5v.
dim_list)[0].name;
668 lon_xdimname = (he5v.
dim_list)[1].name;
671 else if (num_dims >2)
674 throw1(
"The number of dimension should not be 0 for grids or swaths");
677 if (
true == find_lat &&
true == find_lon) {
678 if (
true == has_1dlat &&
true == has_1dlon)
679 eos5gridswath->has_1dlatlon =
true;
682 if (
true == has_2dlat &&
true == has_2dlon &&
683 lat_ydimname == lon_ydimname &&
684 lat_xdimname == lon_xdimname)
685 eos5gridswath->has_2dlatlon =
true;
687 if (
true == has_g2dlat &&
true == has_g2dlon)
688 eos5gridswath->has_g2dlatlon =
true;
690 eos5gridswath->has_nolatlon =
false;
700 map<string,string>& dnamesgeo1dvnames)
throw(
Exception){
702 set<string> nocvdimnames;
703 string grid_str =
"/GRIDS/";
704 string xdim_str =
"XDim";
705 string ydim_str =
"YDim";
706 string fslash_str =
"/";
709 if (
GRID==eos5type) {
710 string xdimname = grid_str + groupname + fslash_str + xdim_str;
711 nocvdimnames.insert(xdimname);
712 string ydimname = grid_str + groupname + fslash_str + ydim_str;
713 nocvdimnames.insert(ydimname);
714 eos5typestr =
"/GRIDS/";
716 else if (
SWATH == eos5type)
717 eos5typestr =
"/SWATHS/";
718 else if (
ZA == eos5type)
719 eos5typestr =
"/ZAS/";
721 throw1(
"Unsupported HDF-EOS5 type, this type is not swath, grid or zonal average");
723 pair<map<string,string>::iterator,
bool>mapret;
724 for(
unsigned int i=0; i < eos5varlist.size(); ++i) {
725 HE5Var he5v = eos5varlist.at(i);
729 dimname = eos5typestr + groupname + fslash_str + he5d.
name;
731 varname = eos5typestr + groupname + fslash_str + he5v.
name;
732 mapret = dnamesgeo1dvnames.insert(pair<string,string>(dimname,varname));
737 if (
false == mapret.second )
738 nocvdimnames.insert(dimname);
744 set<string>:: iterator itset;
745 for ( itset = nocvdimnames.begin(); itset!=nocvdimnames.end();++itset)
746 dnamesgeo1dvnames.erase(*itset);
751 for (vector<Var *>::iterator irv = this->
vars.begin();
752 irv != this->
vars.end(); ++irv) {
759 string fslash_str=
"/";
760 string eos5typestr=
"";
762 EOS5Type vartype = Get_Var_EOS5_Type(var);
771 eos5typestr =
"/GRIDS/";
772 string eos5_groupname = Obtain_Var_EOS5Type_GroupName(var,vartype);
775 var->newname = eos5typestr + eos5_groupname + fslash_str + var->name;
781 eos5typestr =
"/SWATHS/";
782 string eos5_groupname = Obtain_Var_EOS5Type_GroupName(var,vartype);
785 var->newname = eos5typestr + eos5_groupname + fslash_str + var->name;
791 eos5typestr =
"/ZAS/";
792 string eos5_groupname = Obtain_Var_EOS5Type_GroupName(var,vartype);
795 var->newname = eos5typestr + eos5_groupname + fslash_str + var->name;
799 string eos5infopath =
"/HDFEOS INFORMATION";
800 if (var->fullpath.size() > eos5infopath.size()){
801 if (eos5infopath == var->fullpath.substr(0,eos5infopath.size()))
802 var->newname = var->name;
804 else var->newname = var->fullpath;
808 throw1(
"Non-supported EOS type");
814 string EOS5GRIDPATH =
"/HDFEOS/GRIDS";
815 string EOS5SWATHPATH =
"/HDFEOS/SWATHS";
816 string EOS5ZAPATH =
"/HDFEOS/ZAS";
818 if (var->fullpath.size() >= EOS5GRIDPATH.size()) {
820 var->fullpath.substr(0,EOS5GRIDPATH.size()))
823 if (var->fullpath.size() >=EOS5SWATHPATH.size()) {
825 var->fullpath.substr(0,EOS5SWATHPATH.size()))
828 if (var->fullpath.size() >=EOS5ZAPATH.size()) {
830 var->fullpath.substr(0,EOS5ZAPATH.size()))
840 for (vector<Var *>::iterator irv = this->vars.begin();
841 irv != this->vars.end(); ++irv) {
842 Obtain_Var_Dims(*irv,strmeta_info);
844 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
845 ird != (*irv)->dims.end();++ird) {
846 cerr<<
"dim name right after change "<<(*ird)->newname <<endl;
856 string varname_from_parser =
"";
857 EOS5Type vartype = Get_Var_EOS5_Type(var);
859 if (
GRID == vartype) {
860 int num_grids = strmeta_info->grid_list.size();
861 for (
int i = 0; i < num_grids; ++i) {
862 HE5Grid he5g = strmeta_info->grid_list.at(i);
863 if (he5g.
name == Obtain_Var_EOS5Type_GroupName(var,vartype)){
864 EOS5CFGrid *eos5cfgrid = (this->eos5cfgrids)[i];
866 if (
false == var_is_parsed){
867 map<hsize_t,string> dimsizes_to_dimnames = eos5cfgrid->dimsizes_to_dimnames;
872 Set_NonParse_Var_Dims(eos5cfgrid,var,dimsizes_to_dimnames,num_grids,vartype);
877 else if (
SWATH == vartype) {
878 int num_swaths = strmeta_info->swath_list.size();
879 for (
int i = 0; i < num_swaths; ++i) {
881 HE5Swath he5s = strmeta_info->swath_list.at(i);
883 if (he5s.
name == Obtain_Var_EOS5Type_GroupName(var,vartype)){
885 EOS5CFSwath *eos5cfswath = (this->eos5cfswaths)[i];
887 bool var_is_parsed =
true;
888 int swath_fieldtype_flag = Check_EOS5Swath_FieldType(var);
889 if (1 == swath_fieldtype_flag)
891 else if ( 0 == swath_fieldtype_flag)
894 var_is_parsed =
false;
896 if (
false == var_is_parsed){
897 map<hsize_t,string> dimsizes_to_dimnames = eos5cfswath->dimsizes_to_dimnames;
898 Set_NonParse_Var_Dims(eos5cfswath,var,dimsizes_to_dimnames,num_swaths,vartype);
904 else if (
ZA == vartype) {
906 int num_zas = strmeta_info->za_list.size();
907 for (
int i = 0; i < num_zas; ++i) {
908 HE5Za he5z = strmeta_info->za_list.at(i);
909 if (he5z.
name == Obtain_Var_EOS5Type_GroupName(var,vartype)){
910 EOS5CFZa *eos5cfza = (this->eos5cfzas)[i];
912 if (
false == var_is_parsed){
913 map<hsize_t,string> dimsizes_to_dimnames = eos5cfza->dimsizes_to_dimnames;
914 Set_NonParse_Var_Dims(eos5cfza,var,dimsizes_to_dimnames,num_zas,vartype);
926 bool is_parsed =
false;
927 string eos5typestr =
"";
928 string fslash_str=
"/";
932 if (
GRID == eos5type)
933 eos5typestr =
"/GRIDS/";
934 else if (
SWATH == eos5type)
935 eos5typestr =
"/SWATHS/";
936 else if (
ZA == eos5type)
937 eos5typestr =
"/ZAS/";
939 throw1(
"Unsupported HDF-EOS5 type, this type is not swath, grid or zonal average");
941 for (
unsigned int i = 0; i < he5var.size(); i++) {
943 HE5Var he5v = he5var.at(i);
945 if (he5v.
name == var->name) {
947 if (he5v.
dim_list.size() != var->dims.size())
948 throw2(
"Number of dimensions don't match with the structmetadata for variable ",
979 set<hsize_t> dimsize_have_name_set;
980 pair<set<hsize_t>::iterator,
bool> setret1;
981 set<string> thisvar_dimname_set;
982 pair<set<string>::iterator,
bool> setret2;
984 for (
unsigned int j=0; j<he5v.
dim_list.size();j++) {
986 for (vector<Dimension *>::iterator ird = var->dims.begin();
987 ird != var->dims.end(); ++ird) {
988 if ((hsize_t)(he5d.
size) == (*ird)->size) {
990 if (
""==(*ird)->name) {
991 string dimname_candidate = eos5typestr + groupname + fslash_str + he5d.
name;
992 setret2 = thisvar_dimname_set.insert(dimname_candidate);
993 if (
true == setret2.second) {
994 (*ird)->name = dimname_candidate;
996 (*ird)->newname = (num_groups == 1)? he5d.
name :(*ird)->name;
997 eos5data->vardimnames.insert((*ird)->name);
1005 for (vector<Dimension *>::iterator ird = var->dims.begin();
1006 ird != var->dims.end(); ++ird) {
1007 if (
"" == (*ird)->name)
1008 Create_Unique_DimName(eos5data, thisvar_dimname_set,*ird, num_groups, eos5type);
1021 map<hsize_t,string>:: iterator itmap1;
1022 map<string,hsize_t>:: iterator itmap2;
1023 pair<set<string>::iterator,
bool> setret2;
1024 itmap1 = (eos5data->dimsizes_to_dimnames).find(dim->size);
1031 if (itmap1 != (eos5data->dimsizes_to_dimnames).end()) {
1032 string dimname_candidate = (eos5data->dimsizes_to_dimnames)[dim->size];
1035 setret2 = thisvar_dimname_set.insert(dimname_candidate);
1037 if (
false == setret2.second) {
1040 bool match_some_dimname = Check_All_DimNames(eos5data,dimname_candidate,dim->size);
1042 if (
false == match_some_dimname) {
1045 Get_Unique_Name(eos5data->vardimnames,dimname_candidate);
1046 thisvar_dimname_set.insert(dimname_candidate);
1049 Insert_One_NameSizeMap_Element2(eos5data->dimnames_to_dimsizes,dimname_candidate,dim->size);
1050 eos5data->dimsizes_to_dimnames.insert(pair<hsize_t,string>(dim->size,dimname_candidate));
1051 eos5data->dimnames.push_back(dimname_candidate);
1056 dim->name = dimname_candidate;
1058 dim->newname = dim->name;
1062 throw3(
"The dimension name ", dim->name,
" of the variable is not right");
1063 else dim->newname = dname;
1070 string Fakedimname = Create_Unique_FakeDimName(eos5data,eos5type);
1071 thisvar_dimname_set.insert(Fakedimname);
1074 Insert_One_NameSizeMap_Element2(eos5data->dimnames_to_dimsizes,Fakedimname,dim->size);
1075 eos5data->dimsizes_to_dimnames.insert(pair<hsize_t,string>(dim->size,Fakedimname));
1076 eos5data->dimnames.push_back(Fakedimname);
1077 dim->name = Fakedimname;
1079 dim->newname = dim->name;
1083 throw3(
"The dimension name ", dim->name,
" of the variable is not right");
1085 dim->newname = dname;
1095 bool ret_flag =
false;
1096 for (map<string,hsize_t>::iterator im =eos5data->dimnames_to_dimsizes.begin();
1097 im !=eos5data->dimnames_to_dimsizes.end();++im) {
1100 if (dimsize == (*im).second && dimname !=(*im).first) {
1101 dimname = (*im).first;
1113 string temp_clashname=dimname_candidate+
'_';
1115 dimname_candidate = temp_clashname;
1121 string fslash_str =
"/";
1124 eos5typestr =
"/GRIDS/";
1125 else if (
SWATH == eos5type)
1126 eos5typestr =
"/SWATHS/";
1127 else if (
ZA == eos5type)
1128 eos5typestr =
"/ZAS/";
1130 throw1(
"Unsupported HDF-EOS5 type, this type is not swath, grid or zonal average");
1132 stringstream sfakedimindex;
1133 sfakedimindex << eos5data->addeddimindex;
1134 string fakedimstr =
"FakeDim";
1135 string added_dimname = eos5typestr + eos5data->name + fslash_str + fakedimstr + sfakedimindex.str();
1137 pair<set<string>::iterator,
bool> setret;
1138 setret = eos5data->vardimnames.insert(added_dimname);
1139 if (
false == setret.second)
1140 Get_Unique_Name(eos5data->vardimnames,added_dimname);
1141 eos5data->addeddimindex = eos5data->addeddimindex + 1;
1142 return added_dimname;
1148 string EOS5GRIDPATH =
"/HDFEOS/GRIDS";
1149 string EOS5SWATHPATH =
"/HDFEOS/SWATHS";
1150 string EOS5ZAPATH =
"/HDFEOS/ZAS";
1151 size_t eostypename_start_pos;
1152 size_t eostypename_end_pos;
1159 if (
GRID == eos5type)
1160 eostypename_start_pos = EOS5GRIDPATH.size()+1;
1161 else if (
SWATH == eos5type)
1162 eostypename_start_pos = EOS5SWATHPATH.size()+1;
1163 else if (
ZA == eos5type)
1164 eostypename_start_pos = EOS5ZAPATH.size()+1;
1166 throw2(
"Non supported eos5 type for var ",var->fullpath);
1168 eostypename_end_pos = var->fullpath.find(
'/',eostypename_start_pos)-1;
1169 groupname = var->fullpath.substr(eostypename_start_pos,eostypename_end_pos-eostypename_start_pos+1);
1176 string geofield_relative_path =
"/Geolocation Fields/"+var->name;
1177 string datafield_relative_path =
"/Data Fields/" + var->name;
1181 if (var->fullpath.size() > datafield_relative_path.size()) {
1182 size_t field_pos_in_full_path = var->fullpath.size()-datafield_relative_path.size();
1183 if (var->fullpath.rfind(datafield_relative_path,field_pos_in_full_path) !=string::npos)
1187 if (tempflag != 0 && (var->fullpath.size() > geofield_relative_path.size())) {
1188 size_t field_pos_in_full_path = var->fullpath.size()-geofield_relative_path.size();
1190 if (var->fullpath.rfind(geofield_relative_path,field_pos_in_full_path) !=string::npos)
1202 map<hsize_t,string>& dimsizes_to_dimnames,
1205 map<hsize_t,string>::iterator itmap;
1206 set<string> thisvar_dimname_set;
1208 for (vector<Dimension *>::iterator ird = var->dims.begin();
1209 ird != var->dims.end(); ++ird) {
1210 if (
"" == (*ird)->name)
1211 Create_Unique_DimName(eos5data, thisvar_dimname_set,*ird, num_groups, eos5type);
1213 throw5(
"The dimension name ", (*ird)->name,
" of the variable ",var->name,
" is not right");
1222 string eos5_fattr_group_name =
"/HDFEOS/ADDITIONAL/FILE_ATTRIBUTES";
1223 string instrument_attr_name =
"InstrumentName";
1226 for (vector<Group *>::iterator irg = this->
groups.begin();
1227 irg != this->
groups.end(); ++irg) {
1228 if (eos5_fattr_group_name ==(*irg)->path){
1229 for (vector<Attribute *>::iterator ira = (*irg)->attrs.begin();
1230 ira != (*irg)->attrs.end(); ++ira) {
1231 if (instrument_attr_name == (*ira)->name) {
1233 string attr_value((*ira)->value.begin(),(*ira)->value.end());
1234 if (
"OMI" == attr_value) {
1235 this->isaura =
true;
1236 this->aura_name =
OMI;
1238 else if (
"MLS Aura" == attr_value) {
1239 this->isaura =
true;
1240 this->aura_name =
MLS;
1242 else if (
"TES" == attr_value) {
1243 this->isaura =
true;
1244 this->aura_name =
TES;
1246 else if (
"HIRDLS" == attr_value) {
1247 this->isaura =
true;
1248 this->aura_name =
HIRDLS;
1257 if (
true == this->isaura) {
1258 eos5_to_cf_attr_map[
"FillValue"] =
"_FillValue";
1259 eos5_to_cf_attr_map[
"MissingValue"] =
"missing_value";
1260 eos5_to_cf_attr_map[
"Units"] =
"units";
1261 eos5_to_cf_attr_map[
"Offset"] =
"add_offset";
1262 eos5_to_cf_attr_map[
"ScaleFactor"] =
"scale_factor";
1263 eos5_to_cf_attr_map[
"ValidRange"] =
"valid_range";
1264 eos5_to_cf_attr_map[
"Title"] =
"title";
1274 if(is_augmented) cerr <<
"The file is augmented "<<endl;
1275 else cerr<<
"The file is not augmented "<<endl;
1278 if (this->eos5cfgrids.size() > 0)
1280 if (this->eos5cfswaths.size() >0)
1282 if (this->eos5cfzas.size() >0)
1286 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
1287 irv != this->cvars.end(); irv++) {
1288 cerr <<
"EOS5CVar name "<<(*irv)->name <<endl;
1289 cerr <<
"EOS5CVar dimension name "<< (*irv)->cfdimname <<endl;
1290 cerr <<
"EOS5CVar new name "<<(*irv)->newname <<endl;
1298 if (
true == is_augmented) {
1301 Handle_Augmented_Grid_CVar();
1305 Remove_MultiDim_LatLon_EOS5CFGrid();
1309 if (0 == this->eos5cfgrids.size())
return;
1310 if (1 == this->eos5cfgrids.size())
1311 Handle_Single_Nonaugment_Grid_CVar((this->eos5cfgrids)[0]);
1313 Handle_Multi_Nonaugment_Grid_CVar();
1319 bool aug_status =
false;
1320 int num_aug_eos5grp = 0;
1322 for (vector <EOS5CFGrid *>::iterator irg = this->eos5cfgrids.begin();
1323 irg != this->eos5cfgrids.end(); ++irg) {
1324 for (vector<Var *>::iterator irv = this->
vars.begin();
1325 irv != this->
vars.end(); ++irv) {
1327 if (
true == is_augmented) {
1334 for (vector <EOS5CFSwath *>::iterator irg = this->eos5cfswaths.begin();
1335 irg != this->eos5cfswaths.end(); ++irg) {
1336 for (vector<Var *>::iterator irv = this->
vars.begin();
1337 irv != this->
vars.end(); ++irv) {
1339 if (
true == is_augmented) {
1347 for (vector <EOS5CFZa *>::iterator irg = this->eos5cfzas.begin();
1348 irg != this->eos5cfzas.end(); ++irg) {
1349 for (vector<Var *>::iterator irv = this->
vars.begin();
1350 irv != this->
vars.end(); ++irv) {
1352 if (
true == is_augmented) {
1359 int total_num_eos5grp = this->eos5cfgrids.size() + this->eos5cfswaths.size() + this->eos5cfzas.size();
1363 if (num_aug_eos5grp == total_num_eos5grp)
1374 bool has_dimscale_class =
false;
1375 bool has_reflist =
false;
1376 for (vector<Attribute *>::iterator ira = var->attrs.begin();
1377 ira != var->attrs.end(); ++ira) {
1378 if (
"CLASS" == (*ira)->name) {
1379 Retrieve_H5_Attr_Value(*ira,var->fullpath);
1380 string class_value((*ira)->value.begin(),(*ira)->value.end());
1381 if (
"DIMENSION_SCALE"==class_value)
1382 has_dimscale_class =
true;
1385 if (
"REFERENCE_LIST" == (*ira)->name)
1387 if (
true == has_reflist &&
true == has_dimscale_class)
1391 if (
true == has_reflist &&
true == has_dimscale_class)
1401 bool augmented_var =
false;
1403 string EOS5DATAPATH =
"";
1404 if (
GRID == eos5type)
1405 EOS5DATAPATH =
"/HDFEOS/GRIDS/";
1406 else if (
ZA == eos5type)
1407 EOS5DATAPATH =
"/HDFEOS/ZAS/";
1408 else if (
SWATH == eos5type)
1409 EOS5DATAPATH =
"/HDFEOS/SWATHS/";
1410 else throw1(
"Non supported EOS5 type");
1412 string fslash_str =
"/";
1413 string THIS_EOS5DATAPATH = EOS5DATAPATH + eos5data->name + fslash_str;
1416 if (eos5type == Get_Var_EOS5_Type(var)) {
1417 string var_eos5data_name = Obtain_Var_EOS5Type_GroupName(var,eos5type);
1419 if (var_eos5data_name == eos5data->name) {
1420 if (var->fullpath.size() > THIS_EOS5DATAPATH.size()){
1422 string var_path_after_eos5dataname = var->fullpath.substr(THIS_EOS5DATAPATH.size());
1424 if (var_path_after_eos5dataname == var->name)
1425 augmented_var =
true;
1430 return augmented_var;
1436 for (vector <EOS5CFGrid *>::iterator irv = this->eos5cfgrids.begin();
1437 irv !=this->eos5cfgrids.end();++irv)
1445 set<string> tempvardimnamelist;
1446 tempvardimnamelist = cfeos5data->vardimnames;
1447 set <string>::iterator its;
1449 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
1450 for (vector<Var *>::iterator irv = this->vars.begin();
1451 irv != this->vars.end(); ++irv) {
1453 bool is_augmented = Check_Augmented_Var_Candidate(cfeos5data,*irv,eos5type);
1455 if (
true == is_augmented) {
1462 if (tempdimname == (*irv)->name) {
1469 EOS5cvar->cfdimname = *its;
1471 EOS5cvar->eos_type = eos5type;
1474 this->cvars.push_back(EOS5cvar);
1478 this->vars.erase(irv);
1485 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
1486 irv != this->cvars.end(); ++irv) {
1487 its = tempvardimnamelist.find((*irv)->cfdimname);
1488 if (its != tempvardimnamelist.end())
1489 tempvardimnamelist.erase(its);
1492 if (
false == tempvardimnamelist.empty())
1493 throw1(
"Augmented files still need to provide more coordinate variables");
1499 for (vector <EOS5CFGrid *>::iterator irg = this->eos5cfgrids.begin();
1500 irg != this->eos5cfgrids.end(); ++irg) {
1511 if (
true == (*irg)->has_2dlatlon) {
1513 if ((
true == this->isaura) && (
OMI == this->aura_name) &&
1518 string EOS5GRIDPATH =
"/HDFEOS/GRIDS/";
1519 string fslash_str =
"/";
1520 string THIS_EOS5GRIDPATH = EOS5GRIDPATH + (*irg)->name + fslash_str;
1521 int catch_latlon = 0;
1523 for (vector<Var *>::iterator irv = this->
vars.begin();
1524 (irv != this->
vars.end()) && (catch_latlon!=2); ++irv) {
1526 ((*irv)->fullpath.size() > THIS_EOS5GRIDPATH.size())) {
1529 if ((var_grid_name == (*irg)->name)) {
1530 if((
"Longitude" == (*irv)->name) || (
"Latitude" == (*irv)->name)) {
1534 this->
vars.erase(irv);
1540 if (2 == catch_latlon) {
1542 (*irg)->has_nolatlon =
true;
1543 (*irg)->has_2dlatlon =
false;
1548 this->eos5cfgrids.erase(irg);
1553 if (
true == (*irg)->has_g2dlatlon) {
1555 this->eos5cfgrids.erase(irg);
1563 set<string> tempvardimnamelist;
1564 tempvardimnamelist = cfgrid->vardimnames;
1567 bool use_own_latlon =
false;
1568 if (
true == cfgrid->has_1dlatlon)
1569 use_own_latlon = Handle_Single_Nonaugment_Grid_CVar_OwnLatLon(cfgrid, tempvardimnamelist);
1571 if(use_own_latlon) cerr <<
"using 1D latlon"<<endl;
1572 else cerr <<
"use_own_latlon is false "<<endl;
1575 if (
false == use_own_latlon) {
1576 bool use_eos5_latlon =
false;
1577 use_eos5_latlon = Handle_Single_Nonaugment_Grid_CVar_EOS5LatLon(cfgrid,tempvardimnamelist);
1580 if (
false == use_eos5_latlon)
1586 Handle_NonLatLon_Grid_CVar(cfgrid,tempvardimnamelist);
1593 set <string>::iterator its;
1594 string EOS5GRIDPATH =
"/HDFEOS/GRIDS/";
1595 string fslash_str =
"/";
1596 string THIS_EOS5GRIDPATH = EOS5GRIDPATH + cfgrid->name + fslash_str;
1600 bool find_latydim =
false;
1601 bool find_lonxdim =
false;
1603 for (vector<Var *>::iterator irv = this->vars.begin();
1604 irv != this->vars.end(); ++irv) {
1605 if (
GRID == Get_Var_EOS5_Type(*irv) &&
1606 ((*irv)->fullpath.size() > THIS_EOS5GRIDPATH.size())) {
1608 string var_grid_name = Obtain_Var_EOS5Type_GroupName(*irv,
GRID);
1609 if ((var_grid_name == cfgrid->name) && ((*irv)->name ==
"Latitude")) {
1611 string tempdimname = (((*irv)->dims)[0])->name;
1619 EOS5cvar->cfdimname = tempdimname;
1621 EOS5cvar->eos_type =
GRID;
1624 this->cvars.push_back(EOS5cvar);
1628 this->vars.erase(irv);
1631 find_latydim =
true;
1638 for (vector<Var *>::iterator irv = this->vars.begin();
1639 irv != this->vars.end(); ++irv) {
1641 if (
GRID == Get_Var_EOS5_Type(*irv) &&
1642 ((*irv)->fullpath.size() > THIS_EOS5GRIDPATH.size())) {
1644 string var_grid_name = Obtain_Var_EOS5Type_GroupName(*irv,
GRID);
1646 if ((var_grid_name == cfgrid->name) && ((*irv)->name ==
"Longitude")) {
1648 string tempdimname = (((*irv)->dims)[0])->name;
1656 EOS5cvar->cfdimname = tempdimname;
1658 EOS5cvar->eos_type =
GRID;
1661 this->cvars.push_back(EOS5cvar);
1665 this->vars.erase(irv);
1666 find_lonxdim =
true;
1675 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
1676 irv != this->cvars.end(); ++irv) {
1677 its = tempvardimnamelist.find((*irv)->cfdimname);
1678 if (its != tempvardimnamelist.end()) tempvardimnamelist.erase(its);
1683 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
1684 cerr <<
"tempvardim "<<*its <<endl;
1687 return(find_latydim ==
true && find_lonxdim ==
true);
1693 bool find_ydim =
false;
1694 bool find_xdim =
false;
1695 set <string>::iterator its;
1699 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
1700 cerr<<
"dim names "<<(*its) <<endl;
1705 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ) {
1711 EOS5cvar->
name =
"lat";
1716 eos5cvar_dim->
name = *its;
1717 eos5cvar_dim->
newname = (this->eos5cfgrids.size() == 1) ?
"YDim":(*its);
1718 EOS5cvar->
dims.push_back(eos5cvar_dim);
1719 EOS5cvar->cfdimname = eos5cvar_dim->
name;
1721 EOS5cvar->eos_type =
GRID;
1722 EOS5cvar->xdimsize = cfgrid->xdimsize;
1723 EOS5cvar->ydimsize = cfgrid->ydimsize;
1726 EOS5cvar->point_lower = cfgrid->point_lower;
1727 EOS5cvar->point_upper = cfgrid->point_upper;
1728 EOS5cvar->point_left = cfgrid->point_left;
1729 EOS5cvar->point_right = cfgrid->point_right;
1730 EOS5cvar->eos5_pixelreg = cfgrid->eos5_pixelreg;
1731 EOS5cvar->eos5_origin = cfgrid->eos5_origin;
1732 EOS5cvar->eos5_projcode = cfgrid->eos5_projcode;
1735 this->cvars.push_back(EOS5cvar);
1739 tempvardimnamelist.erase(its++);
1750 EOS5cvar->
name =
"lon";
1758 eos5cvar_dim->
name = *its;
1759 eos5cvar_dim->
newname = (this->eos5cfgrids.size() == 1) ?
"XDim":(*its);
1760 EOS5cvar->
dims.push_back(eos5cvar_dim);
1761 EOS5cvar->cfdimname = eos5cvar_dim->
name;
1763 EOS5cvar->eos_type =
GRID;
1764 EOS5cvar->xdimsize = cfgrid->xdimsize;
1765 EOS5cvar->ydimsize = cfgrid->ydimsize;
1769 EOS5cvar->point_lower = cfgrid->point_lower;
1770 EOS5cvar->point_upper = cfgrid->point_upper;
1771 EOS5cvar->point_left = cfgrid->point_left;
1772 EOS5cvar->point_right = cfgrid->point_right;
1773 EOS5cvar->eos5_pixelreg = cfgrid->eos5_pixelreg;
1774 EOS5cvar->eos5_origin = cfgrid->eos5_origin;
1775 EOS5cvar->eos5_projcode = cfgrid->eos5_projcode;
1778 this->cvars.push_back(EOS5cvar);
1781 tempvardimnamelist.erase(its++);
1788 if (
true == find_xdim &&
true == find_ydim)
1792 return (
true == find_xdim &&
true == find_ydim);
1798 set <string>::iterator its;
1799 int num_dimnames = tempvardimnamelist.size();
1800 bool has_dimnames =
true;
1803 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
1804 if (cfgrid->dnames_to_1dvnames.find(*its) !=cfgrid->dnames_to_1dvnames.end()){
1805 for (vector<Var *>::iterator irv = this->vars.begin();
1806 has_dimnames && (irv != this->vars.end()); ++irv) {
1810 if (
GRID == Get_Var_EOS5_Type(*irv) &&
1811 (*irv)->newname == (cfgrid->dnames_to_1dvnames)[*its]) {
1818 EOS5cvar->cfdimname = *its;
1820 EOS5cvar->eos_type =
GRID;
1823 this->cvars.push_back(EOS5cvar);
1827 this->vars.erase(irv);
1830 if (0 == num_dimnames)
1831 has_dimnames =
false;
1839 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
1840 irv != this->cvars.end(); ++irv) {
1841 its = tempvardimnamelist.find((*irv)->cfdimname);
1842 if (its != tempvardimnamelist.end())
1843 tempvardimnamelist.erase(its);
1847 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
1850 Create_Missing_CV(cfgrid,EOS5cvar,*its,
GRID,this->eos5cfgrids.size());
1851 this->cvars.push_back(EOS5cvar);
1864 if (
true == this->grids_multi_latloncvs) {
1865 for (vector <EOS5CFGrid *>::iterator irv = this->eos5cfgrids.begin();
1866 irv !=this->eos5cfgrids.end();++irv)
1878 int num_1dlatlon_pairs = 0;
1879 for (vector <EOS5CFGrid *>::iterator irv = this->eos5cfgrids.begin();
1880 irv !=this->eos5cfgrids.end() ;++irv)
1881 if (
true == (*irv)->has_1dlatlon)
1882 num_1dlatlon_pairs ++;
1884 bool use_eos5_latlon =
false;
1885 if (( 0 == num_1dlatlon_pairs) ||
1886 ((num_1dlatlon_pairs == (int)(this->eos5cfgrids.size())) && (
true == this->isaura))) {
1887 set<string> tempvardimnamelist = ((this->eos5cfgrids)[0])->vardimnames;
1888 if ( 0 == num_1dlatlon_pairs) {
1892 if (
false == use_eos5_latlon)
1898 bool use_own_latlon =
false;
1901 if (
false == use_own_latlon) {
1903 if (
false == use_eos5_latlon)
1912 for (
unsigned j = 1; j < this->eos5cfgrids.size(); j++ )
1913 (this->eos5cfgrids)[j]->Update_Dimnamelist();
1919 for (
unsigned j = 1; j < this->eos5cfgrids.size(); j++ ) {
1920 tempvardimnamelist = (this->eos5cfgrids)[j]->vardimnames;
1922 tempvardimnamelist.clear();
1929 this->grids_multi_latloncvs =
true;
1930 for (vector <EOS5CFGrid *>::iterator irv = this->eos5cfgrids.begin();
1931 irv !=this->eos5cfgrids.end();++irv)
1941 bool find_xdim =
false;
1942 bool find_ydim =
false;
1944 for (set<string>::iterator it = cfgrid->vardimnames.begin();
1945 it != cfgrid->vardimnames.end(); ++it) {
1947 if (
"XDim" == xydimname_candidate) {
1951 else if (
"YDim" == xydimname_candidate) {
1955 if (find_xdim && find_ydim)
break;
1958 if (
false == find_xdim ||
false == find_ydim)
1959 throw2(
"Cannot find Dimension name that includes XDim or YDim in the grid ",cfgrid->name);
1961 for (vector <Var *>::iterator irv = this->vars.begin();
1962 irv !=this->vars.end();++irv) {
1963 if (
GRID == Get_Var_EOS5_Type(*irv)){
1964 for (vector <Dimension *>::iterator
id = (*irv)->dims.begin();
1965 id != (*irv)->dims.end(); ++id) {
1967 if (
"XDim" == xydimname_candidate) (*id)->name = xdimname;
1968 else if(
"YDim" == xydimname_candidate) (*id)->name = ydimname;
1980 for (vector <EOS5CFSwath *>::iterator irs = this->eos5cfswaths.begin();
1981 irs !=this->eos5cfswaths.end();++irs) {
1982 if ((*irs)->has_1dlatlon)
1983 Handle_Single_1DLatLon_Swath_CVar(*irs,isaugmented);
1985 else if((*irs)->has_2dlatlon)
1986 Handle_Single_2DLatLon_Swath_CVar(*irs,isaugmented);
1995 this->eos5cfswaths.erase(irs);
2005 set <string>::iterator its;
2006 set <string> tempvardimnamelist = cfswath->vardimnames;
2007 string EOS5SWATHPATH =
"/HDFEOS/SWATHS/";
2008 string fslash_str =
"/";
2009 string THIS_EOS5SWATHPATH = EOS5SWATHPATH + cfswath->name + fslash_str;
2010 bool find_lat =
false;
2012 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
2013 cerr<<
"Dimension name befor latitude " << *its << endl;
2018 for (vector<Var *>::iterator irv = this->vars.begin();
2019 irv != this->vars.end(); ++irv) {
2020 if (
SWATH == Get_Var_EOS5_Type(*irv) &&
2021 ((*irv)->fullpath.size() > THIS_EOS5SWATHPATH.size())) {
2023 string var_swath_name = Obtain_Var_EOS5Type_GroupName(*irv,
SWATH);
2024 if ((var_swath_name == cfswath->name) && ((*irv)->name ==
"Latitude")) {
2031 EOS5cvar->cfdimname = ((*irv)->dims)[0]->name;
2033 EOS5cvar->eos_type =
SWATH;
2036 this->cvars.push_back(EOS5cvar);
2040 this->vars.erase(irv);
2050 bool find_lat_dim =
false;
2051 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end();++its ) {
2053 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2054 irv != this->cvars.end(); ++irv) {
2055 if (((*irv)->name ==
"Latitude") && (*irv)->cfdimname == (*its)) {
2056 tempvardimnamelist.erase(its);
2057 find_lat_dim =
true;
2062 if(
true == find_lat_dim)
2067 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
2068 cerr<<
"Dimension name afte latitude " << *its << endl;
2071 Handle_NonLatLon_Swath_CVar(cfswath,tempvardimnamelist);
2074 if (
true == is_augmented) {
2075 for (vector<Var *>::iterator irv = this->vars.begin();
2076 irv != this->vars.end(); ++irv) {
2078 if (
SWATH == Get_Var_EOS5_Type(*irv)) {
2080 string my_swath_short_path = (*irv)->fullpath.substr(EOS5SWATHPATH.size());
2081 size_t first_fslash_pos = my_swath_short_path.find_first_of(
"/");
2082 string my_swath_name = my_swath_short_path.substr(0,first_fslash_pos);
2085 string my_swath_name = Obtain_Var_EOS5Type_GroupName(*irv,
SWATH);
2087 if (my_swath_name == cfswath->name) {
2088 string var_path_after_swathname = (*irv)->fullpath.substr(THIS_EOS5SWATHPATH.size());
2089 if (var_path_after_swathname == (*irv)->name) {
2091 this->vars.erase(irv);
2103 set <string>::iterator its;
2104 set <string> tempvardimnamelist = cfswath->vardimnames;
2105 string EOS5SWATHPATH =
"/HDFEOS/SWATHS/";
2106 string fslash_str =
"/";
2107 string THIS_EOS5SWATHPATH = EOS5SWATHPATH + cfswath->name + fslash_str;
2108 bool find_lat =
false;
2109 bool find_lon =
false;
2112 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
2113 cerr<<
"Dimension name befor latitude " << *its << endl;
2117 for (vector<Var *>::iterator irv = this->vars.begin();
2118 irv != this->vars.end(); ++irv) {
2119 if (
SWATH == Get_Var_EOS5_Type(*irv) &&
2120 ((*irv)->fullpath.size() > THIS_EOS5SWATHPATH.size())) {
2121 string var_swath_name = Obtain_Var_EOS5Type_GroupName(*irv,
SWATH);
2122 if ( (var_swath_name == cfswath->name) && ((*irv)->name ==
"Latitude")) {
2129 EOS5cvar->cfdimname = ((*irv)->dims)[0]->name;
2131 EOS5cvar->eos_type =
SWATH;
2132 EOS5cvar->is_2dlatlon =
true;
2135 this->cvars.push_back(EOS5cvar);
2139 this->vars.erase(irv);
2143 else if ( (var_swath_name == cfswath->name) && ((*irv)->name ==
"Longitude")) {
2150 EOS5cvar->cfdimname = ((*irv)->dims)[1]->name;
2152 EOS5cvar->eos_type =
SWATH;
2153 EOS5cvar->is_2dlatlon =
true;
2156 this->cvars.push_back(EOS5cvar);
2160 this->vars.erase(irv);
2167 if (
true == find_lat &&
true == find_lon)
break;
2174 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
2175 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2176 irv != this->cvars.end(); ++irv) {
2177 if (((*irv)->name ==
"Latitude") && (*irv)->cfdimname == (*its)) {
2178 tempvardimnamelist.erase(its);
2184 if(
true == find_lat)
2190 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
2192 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2193 irv != this->cvars.end(); ++irv) {
2195 if (((*irv)->name ==
"Longitude") && (*irv)->cfdimname == (*its)) {
2196 tempvardimnamelist.erase(its);
2202 if(
true == find_lon)
2208 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its)
2209 cerr<<
"Dimension name afte latitude " << *its << endl;
2212 Handle_NonLatLon_Swath_CVar(cfswath,tempvardimnamelist);
2219 if (
true == is_augmented) {
2220 for (vector<Var *>::iterator irv = this->vars.begin();
2221 irv != this->vars.end(); ++irv) {
2223 if (
SWATH == Get_Var_EOS5_Type(*irv)) {
2225 string my_swath_name = Obtain_Var_EOS5Type_GroupName(*irv,
SWATH);
2226 if (my_swath_name == cfswath->name) {
2227 string var_path_after_swathname = (*irv)->fullpath.substr(THIS_EOS5SWATHPATH.size());
2228 if (var_path_after_swathname == (*irv)->name) {
2230 this->vars.erase(irv);
2242 set <string>::iterator its;
2243 int num_dimnames = tempvardimnamelist.size();
2244 bool has_dimnames =
true;
2245 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
2246 if (cfswath->dnames_to_geo1dvnames.find(*its) !=cfswath->dnames_to_geo1dvnames.end()){
2247 for (vector<Var *>::iterator irv = this->vars.begin();
2248 has_dimnames && (irv != this->vars.end()); ++irv) {
2253 if (
SWATH == Get_Var_EOS5_Type(*irv) &&
2254 (*irv)->newname == (cfswath->dnames_to_geo1dvnames)[*its]) {
2261 EOS5cvar->cfdimname = *its;
2263 EOS5cvar->eos_type =
SWATH;
2266 this->cvars.push_back(EOS5cvar);
2270 this->vars.erase(irv);
2273 if (0 == num_dimnames)
2274 has_dimnames =
false;
2281 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2282 irv != this->cvars.end(); ++irv) {
2283 its = tempvardimnamelist.find((*irv)->cfdimname);
2284 if (its != tempvardimnamelist.end())
2285 tempvardimnamelist.erase(its);
2290 Handle_Special_NonLatLon_Swath_CVar(cfswath, tempvardimnamelist);
2293 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2294 irv != this->cvars.end(); ++irv) {
2295 its = tempvardimnamelist.find((*irv)->cfdimname);
2296 if (its != tempvardimnamelist.end())
2297 tempvardimnamelist.erase(its);
2301 for (its = tempvardimnamelist.begin(); its != tempvardimnamelist.end(); ++its) {
2304 Create_Missing_CV(cfswath,EOS5cvar,*its,
SWATH,this->eos5cfswaths.size());
2305 this->cvars.push_back(EOS5cvar);
2319 if (
true == this->isaura &&
TES == this->aura_name) {
2321 string eos5_swath_group_name =
"/HDFEOS/SWATHS/" + cfswath->name;
2322 string eos5_vc_attr_name =
"VerticalCoordinate";
2323 string eos5_pre_attr_name =
"Pressure";
2324 bool has_vc_attr =
false;
2328 for (vector<Group *>::iterator irg = this->groups.begin();
2329 irg != this->groups.end(); ++irg) {
2330 if (eos5_swath_group_name ==(*irg)->path){
2331 for (vector<Attribute *>::iterator ira = (*irg)->attrs.begin();
2332 ira != (*irg)->attrs.end(); ++ira) {
2333 if (eos5_vc_attr_name == (*ira)->name) {
2334 Retrieve_H5_Attr_Value(*ira,(*irg)->path);
2335 string attr_value((*ira)->value.begin(),(*ira)->value.end());
2336 if (eos5_pre_attr_name == attr_value) {
2343 if (
true == has_vc_attr)
2363 if (
true == has_vc_attr) {
2364 string dimname_candidate =
"/SWATHS/"+cfswath->name +
"/nLevels";
2365 set<string>:: iterator it;
2366 for (it = tempvardimnamelist.begin(); it!=tempvardimnamelist.end();++it) {
2367 if ((*it).find(dimname_candidate) != string::npos) {
2368 hsize_t dimsize_candidate = 0;
2369 if ((cfswath->dimnames_to_dimsizes).find(*it) !=
2370 (cfswath->dimnames_to_dimsizes).end())
2371 dimsize_candidate = cfswath->dimnames_to_dimsizes[*it];
2372 else throw2(
"Cannot find the dimension size of the dimension name ",*it);
2379 for (vector<Attribute *>::iterator ira = vc_group->
attrs.begin();
2380 ira != vc_group->
attrs.end(); ++ira) {
2381 if ((eos5_pre_attr_name == (*ira)->name) && ((*ira)->count == (dimsize_candidate-1))) {
2387 string orig_dimname =
"nLevels";
2388 if (
"nLevels" == reduced_dimname)
2389 EOS5cvar->
name = eos5_pre_attr_name +
"_CV";
2391 EOS5cvar->
name = eos5_pre_attr_name +
"_CV"+ reduced_dimname.substr(orig_dimname.size());
2394 EOS5cvar->
dtype = (*ira)->dtype;
2396 eos5cvar_dim->
name = *it;
2397 if (1 == this->eos5cfswaths.size())
2398 eos5cvar_dim->
newname = reduced_dimname;
2402 EOS5cvar->
dims.push_back(eos5cvar_dim);
2404 EOS5cvar->cfdimname = eos5cvar_dim->
name;
2405 EOS5cvar->eos_type =
SWATH;
2408 this->cvars.push_back(EOS5cvar);
2422 if(
false == isaugmented)
2425 for (vector <EOS5CFZa *>::iterator irv = this->eos5cfzas.begin();
2426 irv !=this->eos5cfzas.end();++irv)
2427 Handle_Single_Augment_CVar(*irv,
ZA);
2433 int num_grids =this->eos5cfgrids.size();
2434 int num_swaths = this->eos5cfswaths.size();
2435 int num_zas = this->eos5cfzas.size();
2437 bool mixed_eos5typefile =
false;
2440 if (((num_grids > 0) && (num_swaths > 0)) ||
2441 ((num_grids > 0) && (num_zas > 0)) ||
2442 ((num_swaths >0) && (num_zas > 0)))
2443 mixed_eos5typefile =
true;
2446 for (vector<Var *>::iterator irv = this->
vars.begin();
2447 irv != this->
vars.end(); ++irv)
2451 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2452 irv != this->cvars.end(); ++irv)
2455 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2456 irv != this->cvars.end(); ++irv) {
2457 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
2458 ird !=(*irv)->dims.end(); ++ird) {
2459 cerr<<
"eos5svar dimension new name "<<(*ird)->newname <<endl;
2473 EOS5Type vartype = Get_Var_EOS5_Type(var);
2478 eos5typestr =
"/GRIDS/";
2479 if (
false == mixed_eos5type) {
2481 var->newname = ((1 == this->orig_num_grids)?var->name:
2482 var->newname.substr(eos5typestr.size()));
2484 var->newname = ((1 == num_grids)?var->name:
2485 var->newname.substr(eos5typestr.size()));
2500 if (num_grids > 1) {
2501 for (vector<Dimension *> ::iterator ird = var->dims.begin();
2502 ird !=var->dims.end();ird++) {
2503 if((*ird)->newname.size() <= eos5typestr.size())
2504 throw5(
"The size of the dimension new name ",(*ird)->newname,
"of variable ",var->newname,
2506 (*ird)->newname = (*ird)->newname.substr(eos5typestr.size());
2512 var->newname = ((1 == num_grids)?(eos5typestr + var->name):
2520 eos5typestr =
"/SWATHS/";
2521 if (
false == mixed_eos5type) {
2522 var->newname = ((1 == num_swaths)?var->name:
2523 var->newname.substr(eos5typestr.size()));
2525 if (num_swaths > 1) {
2526 for (vector<Dimension *> ::iterator ird = var->dims.begin();
2527 ird !=var->dims.end();ird++) {
2528 if((*ird)->newname.size() <= eos5typestr.size())
2529 throw5(
"The size of the dimension new name ",(*ird)->newname,
"of variable ",var->newname,
2531 (*ird)->newname = (*ird)->newname.substr(eos5typestr.size());
2536 var->newname = ((1 == num_swaths)?(eos5typestr + var->name):
2544 eos5typestr =
"/ZAS/";
2545 if (
false == mixed_eos5type) {
2546 var->newname = ((1 == num_zas)?var->name:
2547 var->newname.substr(eos5typestr.size()));
2549 for (vector<Dimension *> ::iterator ird = var->dims.begin();
2550 ird !=var->dims.end();ird++) {
2551 if((*ird)->newname.size() <= eos5typestr.size())
2552 throw5(
"The size of the dimension new name ",(*ird)->newname,
"of variable ",var->newname,
2554 (*ird)->newname = (*ird)->newname.substr(eos5typestr.size());
2559 var->newname = ((1 == num_zas)?(eos5typestr + var->name):
2567 throw1(
"Non-supported EOS type");
2578 if ((this->eos5cfgrids.size() > 1) &&
2579 (0 == this->eos5cfswaths.size()) &&
2580 (0 == this->eos5cfzas.size()) &&
2581 (
false == this->grids_multi_latloncvs)){
2585 string lat_dimnewname;
2587 string lon_dimnewname;
2588 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2589 irv !=this->cvars.end(); ++irv) {
2590 if (
"lat" == (*irv)->name ||
"Latitude" == (*irv)->name) {
2591 (*irv)->newname = (*irv)->name;
2592 lat_dimnewname = (((*irv)->dims)[0])->newname;
2594 if (
""== lat_dimnewname)
2595 throw2(
"/ is not included in the dimension new name ",(((*irv)->dims)[0])->newname);
2596 (((*irv)->dims)[0])->newname = lat_dimnewname;
2597 lat_dimname = (*irv)->cfdimname;
2599 else if (
"lon" == (*irv)->name ||
"Longitude" == (*irv)->name) {
2600 (*irv)->newname = (*irv)->name;
2601 string lon_dimnewname = (((*irv)->dims)[0])->newname;
2603 if (
""== lon_dimnewname)
2604 throw2(
"/ is not included in the dimension new name ",(((*irv)->dims)[0])->newname);
2605 (((*irv)->dims)[0])->newname = lon_dimnewname;
2606 lon_dimname = (*irv)->cfdimname;
2610 for (vector<Var *>::iterator irv = this->
vars.begin();
2611 irv !=this->
vars.end(); ++irv) {
2612 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
2613 ird !=(*irv)->dims.end();++ird) {
2614 if ((*ird)->name == lat_dimname)
2615 (*ird)->newname = lat_dimnewname;
2616 else if((*ird)->name == lon_dimname)
2617 (*ird)->newname = lon_dimnewname;
2627 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2628 irv != this->cvars.end(); ++irv) {
2629 (*irv)->newname = get_CF_string((*irv)->newname);
2631 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
2632 ird != (*irv)->dims.end(); ++ird) {
2633 (*ird)->newname = get_CF_string((*ird)->newname);
2636 if (
true == include_attr) {
2637 for (vector<Attribute *>::iterator ira = (*irv)->attrs.begin();
2638 ira != (*irv)->attrs.end(); ++ira) {
2639 (*ira)->newname = get_CF_string((*ira)->newname);
2650 set<string>objnameset;
2651 Handle_EOS5CVar_NameClashing(objnameset);
2653 if (
true == include_attr) {
2654 Handle_EOS5CVar_AttrNameClashing();
2663 EOS5Handle_General_NameClashing(objnameset,this->cvars);
2668 set<string> objnameset;
2670 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2671 irv != this->cvars.end(); ++irv) {
2678 template<
class T>
void
2681 pair<set<string>::iterator,
bool> setret;
2682 set<string>::iterator iss;
2684 vector<string> clashnamelist;
2685 vector<string>::iterator ivs;
2687 map<int,int> cl_to_ol;
2691 typename vector<T*>::iterator irv;
2693 for (irv = objvec.begin();
2694 irv != objvec.end(); ++irv) {
2696 setret = objnameset.insert((*irv)->newname);
2697 if (!setret.second ) {
2698 clashnamelist.insert(clashnamelist.end(),(*irv)->newname);
2699 cl_to_ol[cl_index] = ol_index;
2707 for (ivs=clashnamelist.begin(); ivs!=clashnamelist.end(); ++ivs) {
2708 int clash_index = 1;
2709 string temp_clashname = *ivs +
'_';
2711 *ivs = temp_clashname;
2715 for (
unsigned int i =0; i <clashnamelist.size(); i++)
2716 objvec[cl_to_ol[i]]->newname = clashnamelist[i];
2722 map<string,string>dimname_to_dimnewname;
2723 pair<map<string,string>::iterator,
bool>mapret;
2724 set<string> dimnameset;
2725 vector<Dimension*>vdims;
2726 set<string> dimnewnameset;
2727 pair<set<string>::iterator,
bool> setret;
2730 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2731 irv !=this->cvars.end(); ++irv) {
2732 for (vector <Dimension *>:: iterator ird = (*irv)->dims.begin();
2733 ird !=(*irv)->dims.end();++ird) {
2735 setret = dimnameset.insert((*ird)->name);
2736 if (setret.second) vdims.push_back(*ird);
2744 for(vector<Var *>::iterator irv= this->
vars.begin();
2745 irv != this->
vars.end();++irv) {
2746 for (vector <Dimension *>:: iterator ird = (*irv)->dims.begin();
2747 ird !=(*irv)->dims.end();++ird) {
2749 setret = dimnameset.insert((*ird)->name);
2750 if (setret.second) vdims.push_back(*ird);
2755 for (vector<Dimension*>::iterator ird=vdims.begin();ird!=vdims.end();++ird)
2756 cerr<<
"dimension name "<<(*ird)->name <<endl;
2764 for (vector<Dimension*>::iterator ird = vdims.begin();ird!=vdims.end();++ird) {
2765 mapret = dimname_to_dimnewname.insert(pair<string,string>((*ird)->name,(*ird)->newname));
2766 if (
false == mapret.second)
2767 throw4(
"The dimension name ",(*ird)->name,
" should map to ",
2772 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2773 irv !=this->cvars.end(); ++irv)
2774 for (vector <Dimension *>:: iterator ird = (*irv)->dims.begin();
2775 ird!=(*irv)->dims.end();++ird)
2776 (*ird)->newname = dimname_to_dimnewname[(*ird)->name];
2778 for (vector<Var *>::iterator irv = this->
vars.begin();
2779 irv != this->
vars.end(); ++irv)
2780 for (vector <Dimension *>:: iterator ird = (*irv)->dims.begin();
2781 ird !=(*irv)->dims.end();++ird)
2782 (*ird)->newname = dimname_to_dimnewname[(*ird)->name];
2789 for (vector <EOS5CFGrid *>::iterator irg = this->eos5cfgrids.begin();
2790 irg != this->eos5cfgrids.end(); ++irg) {
2791 if (
false == (*irg)->has_1dlatlon) {
2792 if (
false == (*irg)->has_nolatlon || (
HE5_GCTP_GEO != (*irg)->eos5_projcode))
2798 if (
true == iscoard) {
2799 for (vector <EOS5CFSwath *>::iterator irg = this->eos5cfswaths.begin();
2800 irg != this->eos5cfswaths.end(); ++irg) {
2801 if (
false == (*irg)->has_1dlatlon) {
2811 if (
true == this->isaura){
2822 for (vector<Var*>::iterator irv = this->
vars.begin();
2823 irv !=this->
vars.end(); ++irv) {
2824 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
2825 ira != (*irv)->attrs.end(); ++ira) {
2826 if (eos5_to_cf_attr_map.find((*ira)->name) != eos5_to_cf_attr_map.end())
2827 (*ira)->newname = eos5_to_cf_attr_map[(*ira)->name];
2832 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2833 irv !=this->cvars.end(); ++irv) {
2834 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
2835 ira != (*irv)->attrs.end(); ++ira) {
2836 if (eos5_to_cf_attr_map.find((*ira)->name) != eos5_to_cf_attr_map.end())
2837 (*ira)->newname = eos5_to_cf_attr_map[(*ira)->name];
2850 string time_cf_units_value =
"seconds since 1993-01-01";
2851 for (vector<Var*>::iterator irv = this->
vars.begin();
2852 irv !=this->
vars.end(); irv++) {
2853 if(((*irv)->name ==
"Time") || ((*irv)->name ==
"nTimes")) {
2854 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
2855 ira != (*irv)->attrs.end(); ira++) {
2856 if (
"units" == (*ira)->name){
2858 string units_value((*ira)->value.begin(),(*ira)->value.end());
2859 if (time_cf_units_value != units_value) {
2861 units_value = time_cf_units_value;
2862 (*ira)->value.resize(units_value.size());
2864 (*ira)->fstrsize = units_value.size();
2866 (*ira)->strsize.resize(1);
2867 (*ira)->strsize[0] = units_value.size();
2869 copy(units_value.begin(),units_value.end(),(*ira)->value.begin());
2880 if (
true == this->isaura &&
MLS == this->aura_name) {
2882 const string File_attr_group_path =
"/HDFEOS/ADDITIONAL/FILE_ATTRIBUTES";
2883 const string PCF1_attr_name =
"PCF1";
2884 bool find_group =
false;
2885 bool find_attr =
false;
2886 for (vector<Group*>::iterator it_g = this->
groups.begin();
2887 it_g != this->
groups.end(); ++it_g) {
2888 if (File_attr_group_path == (*it_g)->path) {
2890 for (vector<Attribute *>::iterator ira = (*it_g)->attrs.begin();
2891 ira != (*it_g)->attrs.end(); ++ira) {
2892 if (PCF1_attr_name == (*ira)->name) {
2894 string pcf_value((*ira)->value.begin(),(*ira)->value.end());
2896 (*ira)->value.resize(pcf_value.size());
2898 (*ira)->fstrsize = pcf_value.size();
2900 (*ira)->strsize.resize(1);
2901 (*ira)->strsize[0] = pcf_value.size();
2903 copy(pcf_value.begin(),pcf_value.end(),(*ira)->value.begin());
2909 if(
true == find_group &&
true == find_attr)
2918 string unit_attrname =
"units";
2919 string nonll_cf_level_attrvalue =
"level";
2920 string lat_cf_unit_attrvalue =
"degrees_north";
2921 string lon_cf_unit_attrvalue =
"degrees_east";
2922 string tes_cf_pre_attrvalue =
"hPa";
2925 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
2926 irv !=this->cvars.end(); ++irv) {
2927 switch((*irv)->cvartype) {
2931 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
2932 ira != (*irv)->attrs.end(); ++ira) {
2933 if ((*ira)->newname ==unit_attrname) {
2935 string units_value((*ira)->value.begin(),(*ira)->value.end());
2936 if ((lat_cf_unit_attrvalue !=units_value) &&
2937 (((*irv)->name ==
"Latitude") ||
2938 ((this->eos5cfzas.size() > 0) && ((*irv)->name ==
"nLats")))) {
2939 units_value = lat_cf_unit_attrvalue;
2940 (*ira)->value.resize(units_value.size());
2942 (*ira)->fstrsize = units_value.size();
2944 (*ira)->strsize.resize(1);
2945 (*ira)->strsize[0] = units_value.size();
2946 copy(units_value.begin(),units_value.end(),(*ira)->value.begin());
2947 string tempstring((*ira)->value.begin(),(*ira)->value.end());
2949 else if ((lon_cf_unit_attrvalue !=units_value) && (*irv)->name ==
"Longitude"){
2950 units_value = lon_cf_unit_attrvalue;
2951 (*ira)->value.resize(units_value.size());
2953 (*ira)->fstrsize = units_value.size();
2955 (*ira)->strsize.resize(1);
2956 (*ira)->strsize[0] = units_value.size();
2958 copy(units_value.begin(),units_value.end(),(*ira)->value.begin());
2969 Add_Str_Attr(attr,unit_attrname,lat_cf_unit_attrvalue);
2970 (*irv)->attrs.push_back(attr);
2977 Add_Str_Attr(attr,unit_attrname,lon_cf_unit_attrvalue);
2978 (*irv)->attrs.push_back(attr);
2985 Add_Str_Attr(attr,unit_attrname,nonll_cf_level_attrvalue);
2986 (*irv)->attrs.push_back(attr);
2991 if (
true == this->isaura &&
TES == this->aura_name) {
2994 (*irv)->attrs.push_back(attr);
2999 throw1(
"Non-supported Coordinate Variable Type.");
3007 if (
false == this->iscoard)
3010 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
3011 irv !=this->cvars.end(); irv++) {
3012 if ((*irv)->dims.size()!=1)
3013 throw3(
"Coard coordinate variable ",(*irv)->name,
"is not 1D");
3014 if ((*irv)->newname != (((*irv)->dims)[0]->newname)) {
3015 ((*irv)->dims)[0]->newname = (*irv)->newname;
3018 for (vector<Var*>::iterator irv2 = this->
vars.begin();
3019 irv2 != this->
vars.end(); irv2++) {
3020 for (vector<Dimension *>::iterator ird = (*irv2)->dims.begin();
3021 ird !=(*irv2)->dims.end(); ird++) {
3026 if ((*ird)->name == ((*irv)->dims)[0]->name)
3027 (*ird)->newname = ((*irv)->dims)[0]->newname;
3039 if(
true == add_path) {
3044 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
3045 irv != this->cvars.end(); ++irv) {
3048 const string varname = (*irv)->name;
3049 const string attrname =
"origname";
3050 Add_Str_Attr(attr,attrname,varname);
3051 (*irv)->attrs.push_back(attr);
3055 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
3056 irv != this->cvars.end(); ++irv) {
3059 const string varname = (*irv)->fullpath;
3060 const string attrname =
"fullnamepath";
3061 Add_Str_Attr(attr,attrname,varname);
3062 (*irv)->attrs.push_back(attr);
3067 if(
true == this->iscoard ) {
3068 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
3069 irv != this->cvars.end(); ++irv) {
3072 const string attrname =
"orig_dimname";
3073 string orig_dimname = (((*irv)->dims)[0])->name;
3075 if (
"" == orig_dimname)
3076 throw2(
"wrong dimension name ",orig_dimname);
3077 if(orig_dimname.find(
"FakeDim") != string::npos)
3079 Add_Str_Attr(attr,attrname,orig_dimname);
3080 (*irv)->attrs.push_back(attr);
3084 for (vector<Var *>::iterator irv = this->vars.begin();
3085 irv != this->vars.end(); ++irv) {
3087 if ((*irv)->dims.size() >0 ) {
3089 if (1 == (*irv)->dims.size()) {
3090 const string attrname =
"orig_dimname";
3091 string orig_dimname = (((*irv)->dims)[0])->name;
3092 if (
""==orig_dimname) orig_dimname=
"NoDimName";
3094 if(orig_dimname.find(
"FakeDim") != string::npos) orig_dimname =
"NoDimName";
3095 Add_Str_Attr(attr,attrname,orig_dimname);
3098 const string attrname =
"orig_dimname_list";
3099 string orig_dimname_list;
3100 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
3101 ird != (*irv)->dims.end(); ++ird) {
3102 string orig_dimname =(*ird)->name;
3103 if (
""==orig_dimname) orig_dimname=
"NoDimName";
3105 if(orig_dimname.find(
"FakeDim") != string::npos) orig_dimname =
"NoDimName";
3106 if(
""==orig_dimname_list)
3107 orig_dimname_list = orig_dimname;
3109 orig_dimname_list = orig_dimname_list +
" "+orig_dimname;
3112 Add_Str_Attr(attr,attrname,orig_dimname_list);
3114 (*irv)->attrs.push_back(attr);
3123 string co_attrname =
"coordinates";
3124 string co_attrvalue=
"";
3129 for (vector<Var *>::iterator irv = this->
vars.begin();
3130 irv != this->
vars.end(); ++irv) {
3132 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
3133 ird != (*irv)->dims.end(); ++ ird) {
3134 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3135 ircv != this->cvars.end(); ++ircv) {
3136 if ((*ird)->name == (*ircv)->cfdimname)
3137 co_attrvalue = (co_attrvalue.empty())?(*ircv)->newname:co_attrvalue +
" "+(*ircv)->newname;
3140 if (
false == co_attrvalue.empty()) {
3143 (*irv)->attrs.push_back(attr);
3145 co_attrvalue.clear();
3149 bool has_2dlatlon_cv =
false;
3150 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3151 ircv != this->cvars.end(); ++ircv) {
3152 if (
true == (*ircv)->is_2dlatlon) {
3153 has_2dlatlon_cv =
true;
3158 if (
true == has_2dlatlon_cv) {
3160 string dimname1, dimname2;
3161 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3162 ircv != this->cvars.end(); ++ircv) {
3163 if (
true == (*ircv)->is_2dlatlon) {
3164 dimname1 = (((*ircv)->dims)[0])->name;
3165 dimname2 = (((*ircv)->dims)[1])->name;
3170 int num_latlondims = 0;
3172 for (vector<Var *>::iterator irv = this->
vars.begin();
3173 irv != this->
vars.end(); ++irv) {
3174 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
3175 ird != (*irv)->dims.end(); ++ ird) {
3176 if (dimname1 == (*ird)->name) num_latlondims++;
3177 if (dimname2 == (*ird)->name) num_latlondims++;
3179 if ((num_latlondims !=0) && (num_latlondims !=2)) {
3181 for (vector<Attribute *>::iterator ira = (*irv)->attrs.begin();
3182 ira != (*irv)->attrs.end(); ++ira) {
3183 if (co_attrname == (*ira)->name) {
3185 (*irv)->attrs.erase(ira);
3198 void EOS5File::Adjust_Special_EOS5CVar_Name() throw(
Exception) {
3200 int num_grids =this->eos5cfgrids.size();
3201 int num_swaths = this->eos5cfswaths.size();
3202 int num_zas = this->eos5cfzas.size();
3204 bool mixed_eos5typefile =
false;
3207 if (((num_grids > 0) && (num_swaths > 0)) ||
3208 ((num_grids > 0) && (num_zas > 0)) ||
3209 ((num_swaths >0) && (num_zas > 0)))
3210 mixed_eos5typefile =
true;
3213 if (
false == mixed_eos5typefile) {
3218 if ((1 == num_swaths) || ( 1 == num_zas) ||
3219 (1 == num_grids) || ((num_grids >1) && (this->grids_multi_latloncvs))) {
3221 string unit_attrname =
"units";
3222 string nonll_cf_level_attralue =
"level";
3223 string lat_cf_unit_attrvalue =
"degrees_north";
3224 string lon_cf_unit_attrvalue =
"degrees_east";
3226 for (vector<EOS5CVar *>::iterator irv = this->cvars.begin();
3227 irv != this->cvars.end(); irv++){
3228 switch((*irv)->eos_type) {
3234 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
3235 ira != (*irv)->attrs.end(); ira++) {
3236 if ((*ira)->name ==unit_attrname) {
3237 if ((*ira)->value.size() > 0) {
3238 string units_value((*ira)->value.begin(),(*ira)->value.end());
3239 if (lat_cf_unit_attrvalue ==units_value) (*irv)->newname =
"lat";
3240 if (lon_cf_unit_attrvalue ==units_value) (*irv)->newname =
"lon";
3248 for(vector <Attribute*>::iterator ira = (*irv)->attrs.begin();
3249 ira != (*irv)->attrs.end(); ira++) {
3250 if ((*ira)->name ==unit_attrname) {
3251 if ((*ira)->value.size() > 0) {
3252 string units_value((*ira)->value.begin(),(*ira)->value.end());
3253 if (nonll_cf_level_attralue ==units_value) {
3254 (*irv)->newname =
"lev";
3263 throw1(
"Non-supported coordinate variable type");
3274 EOS5Type eos5type,
int num_eos5data)
throw(Exception) {
3277 if (
"" == reduced_dimname)
throw2(
"wrong dimension name ",dimname);
3278 EOS5cvar->name = reduced_dimname;
3279 Create_Added_Var_NewName_FullPath(eos5type,eos5data->name,EOS5cvar->name,EOS5cvar->newname,EOS5cvar->fullpath);
3282 hsize_t eos5cvar_dimsize = (eos5data->dimnames_to_dimsizes)[dimname];
3284 eos5cvar_dim->
name = dimname;
3285 if (1 == num_eos5data)
3286 eos5cvar_dim->
newname = reduced_dimname;
3287 else eos5cvar_dim->
newname = dimname;
3289 EOS5cvar->dims.push_back(eos5cvar_dim);
3290 EOS5cvar->cfdimname = dimname;
3292 EOS5cvar->eos_type = eos5type;
3296 const string& varname,
string &var_newname,
3297 string &var_fullpath)
throw(Exception) {
3299 string fslash_str=
"/";
3300 string eos5typestr=
"";
3301 string top_eos5_groupname =
"/HDFEOS";
3306 eos5typestr =
"/GRIDS/";
3307 var_newname = eos5typestr + eos5_groupname + fslash_str +varname;
3308 var_fullpath = top_eos5_groupname + eos5typestr +eos5_groupname + fslash_str + varname;
3314 eos5typestr =
"/SWATHS/";
3315 var_newname = eos5typestr + eos5_groupname + fslash_str +varname;
3316 var_fullpath = top_eos5_groupname + eos5typestr +eos5_groupname + fslash_str + varname;
3323 eos5typestr =
"/ZAS/";
3324 var_newname = eos5typestr + eos5_groupname + fslash_str +varname;
3325 var_fullpath = top_eos5_groupname + eos5typestr +eos5_groupname + fslash_str + varname;
3331 throw1(
"Non-supported EOS type");
3337 if (
true == this->isaura &&
TES == this->aura_name) {
3338 const string ProHist_full_path =
"/HDFEOS/ADDITIONAL/FILE_ATTRIBUTES/ProductionHistory";
3339 for (vector<Var *>::iterator irv = this->
vars.begin();
3340 irv != this->
vars.end(); ++irv) {
3341 if (ProHist_full_path == (*irv)->fullpath) {
3343 this->
vars.erase(irv);
3350 if(dimname_to_dupdimnamelist.size() > 0) {
3355 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3356 ircv != this->cvars.end(); ircv++) {
3357 if((*ircv)->cvartype ==
CV_EXIST) {
3359 pair<multimap<string,string>::iterator,multimap<string,string>::iterator> mm_er_ret;
3360 multimap<string,string>::iterator itmm;
3361 for (itmm = dimname_to_dupdimnamelist.begin(); itmm!=dimname_to_dupdimnamelist.end();++itmm) {
3365 if((*ircv)->cfdimname == (*itmm).first) {
3368 for (vector<EOS5CVar *>::iterator irv2 = this->cvars.begin();
3369 irv2 != this->cvars.end(); irv2++) {
3375 if((*irv2)->cfdimname == (*itmm).second) {
3377 string dup_var_name = (*irv2)->newname;
3379 (*irv2)->newname = dup_var_name;
3380 (*irv2)->getDimensions()[0]->newname = dup_var_name;
3399 for (vector<Var *>::iterator irv = this->
vars.begin();
3400 irv != this->
vars.end(); ++irv) {
3403 if((*irv)->rank >=2) {
3405 for (vector<Dimension *>::iterator ird = (*irv)->dims.begin();
3406 ird != (*irv)->dims.end(); ++ ird) {
3407 pair<multimap<string,string>::iterator,multimap<string,string>::iterator> mm_er_ret;
3408 multimap<string,string>::iterator itmm;
3409 for (itmm = dimname_to_dupdimnamelist.begin(); itmm!=dimname_to_dupdimnamelist.end();++itmm) {
3410 cerr<<
"the original dim. name is "<<(*itmm).first <<endl;
3411 cerr<<
"the duplicate dim. name is "<<(*itmm).second <<endl;
3412 if((*irv)->name ==
"RetrievalAveragingKernelMatrixDay")
3413 cerr<<
"duplicate dimension name of a variable is "<<(*ird)->name <<endl;
3423 if((*itmm).second == (*ird)->name) {
3424 cerr<<
"coming to find the duplicate dim. name "<<endl;
3425 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3426 ircv != this->cvars.end(); ircv++) {
3427 if((*ircv)->cvartype ==
CV_EXIST) {
3428 cerr<<
"cf dim. name is "<<(*ircv)->cfdimname <<endl;
3430 if((*ircv)->cfdimname == (*itmm).first) {
3432 for (vector<EOS5CVar *>::iterator irv2 = this->cvars.begin();
3433 irv2 != this->cvars.end(); irv2++) {
3436 if((*irv2)->cfdimname == (*itmm).second) {
3437 string dup_var_name = (*irv2)->newname;
3439 (*irv2)->newname = dup_var_name;
3440 (*irv2)->getDimensions()[0]->newname = dup_var_name;
3466 void EOS5File:: Handle_SpVar_Attr() throw(Exception) {
3469 if(dimname_to_dupdimnamelist.size() > 0) {
3471 pair<multimap<string,string>::iterator,multimap<string,string>::iterator> mm_er_ret;
3472 multimap<string,string>::iterator itmm;
3473 for (itmm = dimname_to_dupdimnamelist.begin(); itmm!=dimname_to_dupdimnamelist.end();++itmm) {
3474 for (vector<EOS5CVar *>::iterator ircv = this->cvars.begin();
3475 ircv != this->cvars.end(); ircv++) {
3477 if((*ircv)->cvartype ==
CV_EXIST) {
3480 if((*ircv)->cfdimname == (*itmm).first) {
3484 for (vector<EOS5CVar *>::iterator irv2 = this->cvars.begin();
3485 irv2 != this->cvars.end(); irv2++) {
3490 if((*irv2)->cfdimname == (*itmm).second)
3508 target->cfdimname = src->cfdimname;
3509 target->cvartype = src->cvartype;
3510 target->eos_type = src->eos_type;
void EOS5Handle_nonlatlon_dimcvars(vector< HE5Var > &eos5varlist, EOS5Type, string groupname, map< string, string > &dnamesgeo1dvnames)
void Handle_NonLatLon_Swath_CVar(EOS5CFSwath *cfswath, set< string > &tempvardimnamelist)
void Handle_EOS5CVar_Unit_Attr()
void EOS5Handle_General_NameClashing(set< string > &objnameset, vector< T * > &objvec)
void Retrieve_H5_Attr_Value(Attribute *attr, string)
#define throw5(a1, a2, a3, a4, a5)
vector< Dimension * > dims
void Check_Aura_Product_Status()
Check if the HDF-EOS5 file is an Aura file. Special CF operations need to be used.
void Get_Unique_Name(set< string > &, string &)
string Create_Unique_FakeDimName(T *, EOS5Type)
This class represents one HDF5 dataset(CF variable)
void Handle_EOS5CVar_AttrNameClashing()
vector< HE5Dim > dim_list
vector< HE5Dim > dim_list
void Handle_EOS5CVar_Special_Attr()
void Add_Dim_Name(HE5Parser *)
Add the dimension name for HDF-EOS5 files.
float point_right
The rightmost coordinate value of a Grid.
void Handle_SpVar()
Handle special variables for HDF-EOS5 files.
virtual void Replace_Var_Info(Var *src, Var *target)
void Remove_MultiDim_LatLon_EOS5CFGrid()
vector< HE5Dim > dim_list
void Handle_GeneralObj_NameClashing(bool, set< string > &objnameset)
void Condense_EOS5Dim_List(vector< HE5Dim > &)
bool Check_Augmented_Var_Candidate(T *, Var *, EOS5Type)
virtual void Retrieve_H5_Info(const char *path, hid_t file_id, bool include_attr)
Retrieve DDS information from the HDF5 file. The reason to separate reading DDS from DAS is: DAP need...
void Handle_Obj_NameClashing(bool)
Handle the object name clashing for HDF-EOS5 products.
void Adjust_EOS5GridDimNames(EOS5CFGrid *)
void Adjust_Per_Var_Dim_NewName_Before_Flattening(T *, bool, int, int, int)
vector< HE5Var > data_var_list
void Handle_Unsupported_Dtype(bool)
Handle unsupported HDF5 datatypes for HDF-EOS5 products.
static void replace_double_quote(string &str)
This class simulates an HDF-EOS5 Swath.
void Adjust_EOS5Dim_Info(HE5Parser *strmeta_info)
Adjust HDF-EOS5 dimension information.
string Obtain_Var_EOS5Type_GroupName(Var *, EOS5Type)
virtual void Handle_Unsupported_Dtype(bool)
Handle unsupported HDF5 datatypes.
int Check_EOS5Swath_FieldType(Var *)
void Adjust_SharedLatLon_Grid_Var_Dim_Name()
EOS5GridPRType pixelregistration
void Obtain_Var_NewName(Var *)
bool Handle_Single_Nonaugment_Grid_CVar_OwnLatLon(EOS5CFGrid *, set< string > &)
virtual void Retrieve_H5_Supported_Attr_Values()
Retrieve attribute values for the supported HDF5 datatypes.
static void gen_unique_name(std::string &str, std::set< std::string > &namelist, int &clash_index)
void Handle_Augmented_Grid_CVar()
void Handle_Swath_CVar(bool)
virtual void Add_Supplement_Attrs(bool)
Add supplemental attributes such as fullpath and original name.
void Adjust_Var_Dim_NewName_Before_Flattening()
Adjust variable dimension names before the flattening for HDF-EOS5 files.
void Create_Added_Var_NewName_FullPath(EOS5Type, const string &, const string &, string &, string &)
void Adjust_EOS5Dim_List(vector< HE5Dim > &)
vector< Var * > vars
Var vectors.
virtual string get_CF_string(string)
bool Check_Augmented_Var_Attrs(Var *var)
void Handle_DimNameClashing()
Handle dimension name clashing. Since COARDS requires the change of cv names, So we need to handle di...
float point_left
The leftmost coordinate value of a Grid.
void Add_Str_Attr(Attribute *attr, const string &attrname, const string &strvalue)
void Handle_CVar()
Handle coordinate variable for HDF-EOS5 files.
void Handle_Single_Augment_CVar(T *, EOS5Type)
This class is a derived class of CVar. It represents a coordinate variable for HDF-EOS5 files...
EOS5GridPCType projection
virtual void Handle_Unsupported_Dspace()
Handle unsupported HDF5 dataspaces for datasets.
void Replace_Var_Info(EOS5CVar *src, EOS5CVar *target)
void Adjust_Obj_Name()
This method is a no-op operation. Leave here since the method in the base class is pure virtual...
bool Obtain_Var_Dims(Var *, HE5Parser *)
void Handle_Single_Nonaugment_Grid_CVar(EOS5CFGrid *)
void Handle_Unsupported_Dspace()
Handle unsupported HDF5 dataspaces for HDF-EOS5 products.
#define throw1(a1)
The followings are convenient functions to throw exceptions with different.
bool Set_Var_Dims(T *, Var *, vector< HE5Var > &, const string &, int, EOS5Type)
void Adjust_Var_NewName_After_Parsing()
Adjust variable names for HDF-EOS5 files.
bool Handle_Single_Nonaugment_Grid_CVar_EOS5LatLon(EOS5CFGrid *, set< string > &)
void Update_Dimnamelist()
void Handle_Za_CVar(bool)
float point_lower
The bottom coordinate value of a Grid.
float point_upper
The top coordinate value of a Grid.
void Create_Missing_CV(T *, EOS5CVar *, const string &, EOS5Type, int)
string get_CF_string(string s)
EOS5GridOriginType gridorigin
static std::string obtain_string_after_lastslash(const std::string s)
void Create_Unique_DimName(T *, set< string > &, Dimension *, int, EOS5Type)
void Add_EOS5File_Info(HE5Parser *, bool)
Add HDF-EOS5 dimension and coordinate variable related info. to EOS5Grid,EOS5Swath etc...
void Set_NonParse_Var_Dims(T *, Var *, map< hsize_t, string > &, int, EOS5Type)
void Retrieve_H5_Info(const char *path, hid_t file_id, bool include_attr)
Retrieve DDS information from the HDF5 file; a real implementation for HDF-EOS5 products.
virtual void Replace_Var_Attrs(Var *src, Var *target)
void Adjust_EOS5VarDim_Info(vector< HE5Dim > &, vector< HE5Dim > &, const string &, EOS5Type)
vector< Attribute * > attrs
This class simulates an HDF-EOS5 Zonal average object.
This class represents one attribute.
void Handle_Special_NonLatLon_Swath_CVar(EOS5CFSwath *cfswath, set< string > &tempvardimnamelist)
void Flatten_Obj_Name(bool include_attr)
Flatten the object name for HDF-EOS5 files.
void Set_COARDS_Status()
Set COARDS flag.
void Remove_NegativeSizeDims(vector< HE5Dim > &)
bool Check_All_DimNames(T *, string &, hsize_t)
This class simulates an HDF-EOS5 Grid. Currently only geographic projection is supported.
void Handle_EOS5CVar_NameClashing(set< string > &)
void Add_Supplement_Attrs(bool)
Add the supplemental attributes for HDF-EOS5 products.
#define throw3(a1, a2, a3)
vector< HE5Var > data_var_list
vector< HE5Var > data_var_list
EOS5Type Get_Var_EOS5_Type(Var *)
void Handle_Multi_Nonaugment_Grid_CVar()
bool unsupported_attr_dtype
vector< HE5Var > geo_var_list
This class repersents one dimension of an HDF5 dataset(variable).
void Adjust_Attr_Info()
Adjust the attribute info for HDF-EOS5 products.
vector< HE5Dim > dim_list
bool unsupported_var_dspace
static bool cf_strict_support_type(H5DataType dtype)
void EOS5SwathGrid_Set_LatLon_Flags(T *eos5gridswath, vector< HE5Var > &eos5varlist)
void Handle_Single_1DLatLon_Swath_CVar(EOS5CFSwath *cfswath, bool is_augmented)
bool Check_Augmentation_Status()
void Handle_Grid_CVar(bool)
void Handle_NonLatLon_Grid_CVar(EOS5CFGrid *, set< string > &)
#define throw4(a1, a2, a3, a4)
virtual void Flatten_Obj_Name(bool)
Flatten the object name.
This class represents an HDF5 group. The group will be flattened according to the CF conventions...
void Adjust_H5_Attr_Value(Attribute *attr)
void Handle_Single_2DLatLon_Swath_CVar(EOS5CFSwath *cfswath, bool is_augmented)
void Retrieve_H5_Supported_Attr_Values()
Retrieve attribute values for the supported HDF5 datatypes for HDF-EOS5 products. ...
vector< Attribute * > attrs
vector< Group * > groups
Non-root group vectors.
This class specifies the core engineering of mapping HDF5 to DAP by following CF. ...
void Handle_General_NameClashing(set< string > &objnameset, vector< T * > &objvec)
void Replace_Var_Attrs(EOS5CVar *src, EOS5CVar *target)
void Adjust_Dim_Name()
Adjust the dimension name for HDF-EOS5 products.
void Handle_Coor_Attr()
Handle the coordinates attribute for HDF-EOS5 products.