/** * @param attribute * @return */ Attribute HDF5FileReader::getGlobalAttribute(const std::string& attribute) { //first, check if the attribute has already been requested. If so, return stored value boost::unordered_map<std::string, Attribute>::iterator iter = gAttributes.find(attribute); if (iter != gAttributes.end()) return (*iter).second; // std::cout << "after search in getGlobalAttribute(const std::string& attribute)" << std::endl; // std::cout << "attribute: " << attribute << std::endl; H5::Group group = this->current_file->openGroup("/"); H5::Attribute h5attribute = group.openAttribute(attribute); long attrNum = h5attribute.getId(); H5::DataType dataType = h5attribute.getDataType(); // std::cout << "attrNum after attribute: " << attrNum << std::endl; Attribute current_attribute; if (attrNum < 0) { std::cout << "attrNum: " << attrNum << " returned for " << attribute << std::endl; } else { // std::cout << "attribute: " << attribute << " attribute number: " << attrNum << std::endl; // std::cout << "attempting to get attribute without using attribute number\n"; if (dataType.getClass() == H5T_STRING) { std::string attributeValue = "NULL"; h5attribute.read(dataType, attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); current_attribute.setAttributeName(attributeName); //std::cout << "name: '" << attributeName << "' string attributeBuffer: '" << attributeValue << "'"<< std::endl; current_attribute.setAttributeValue(attributeValue); gAttributeByID[(int)attrNum] = current_attribute; gAttributes[current_attribute.getAttributeName()] = current_attribute; //return attribute; } else if (dataType.getClass() == H5T_INTEGER) { //int attributeValue = 0.f; int attributeBuffer;// = new int[1]; h5attribute.read(dataType, &attributeBuffer); std::string attributeName = ""; attributeName = h5attribute.getName(); current_attribute.setAttributeName(attributeName); //std::cout << "int attributeBuffer: '" << attributeBuffer << "'"<< std::endl; current_attribute.setAttributeValue(attributeBuffer); gAttributeByID[(int)attrNum] = current_attribute; gAttributes[current_attribute.getAttributeName()] = current_attribute; //return attribute; } else if (dataType.getClass() == H5T_FLOAT)//CDF_FLOAT { //int attributeValue = 0.f; float attributeValue;// = new int[1]; h5attribute.read(dataType, &attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); current_attribute.setAttributeName(attributeName); //std::cout << "float attributeBuffer: '" << attributeValue << "'"<< std::endl; current_attribute.setAttributeValue(attributeValue); gAttributeByID[(int)attrNum] = current_attribute; gAttributes[current_attribute.getAttributeName()] = current_attribute; //return attribute; } }//gAttributes[attribute] = current_attribute; return current_attribute; // return Attribute(); }
/** * @param variable * @param vattribute * @return */ Attribute HDF5FileReader::getVariableAttribute(const std::string& variable, const std::string& vattribute) { //first, check the vAttributes map // std::cout<<"Checking variable attributes map\n"; boost::unordered_map<std::string, boost::unordered_map< std::string, Attribute> >::iterator iter = vAttributes.find(variable); if (iter != vAttributes.end()) { boost::unordered_map< std::string, Attribute>::iterator iter2 = vAttributes[variable].find(vattribute); if (iter2 != vAttributes[variable].end()) { return (*iter2).second; } } // std::cout<<"Attribute not loaded, opening Variables group\n"; H5::Group group = this->current_file->openGroup("Variables"); // std::cout<<"Group opened. Creating memory for H5::DataSet\n"; H5::DataSet * dataset = new H5::DataSet(group.openDataSet(variable)); // std::cout<<"creating h5attribute for variable\n"; H5::Attribute h5attribute = dataset->openAttribute(vattribute); //changed from group.openAttribute(vattribute); // std::cout<<"attribute opened, obtaining data type\n"; H5::DataType dataType = h5attribute.getDataType(); Attribute attribute; // std::cerr<<"Retrieving Variable attribute info:"<<std::endl; if (dataType.getClass() == H5T_STRING) { // std::cout<<"String type variable attribute\n"; std::string attributeValue = "NULL"; h5attribute.read(dataType, &attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); //std::cout << "attributeBuffer: " << attributeBuffer << endl; attribute.setAttributeValue(attributeValue); //return attribute; } else if (dataType.getClass() == H5T_INTEGER) //shouldn't this be H5T_INT or something? { // std::cout<<"Int type variable attribute\n"; //int attributeValue = 0.f; int attributeBuffer;// = new int[1]; h5attribute.read(dataType, &attributeBuffer); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); attribute.setAttributeValue(attributeBuffer); //return attribute; } else if (dataType.getClass() == H5T_FLOAT)//CDF_FLOAT { // std::cout<<"Float type variable attribute\n"; //int attributeValue = 0.f; float attributeValue;// = new int[1]; h5attribute.read(dataType, &attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); attribute.setAttributeValue(attributeValue); //return attribute; } //cout << "added: " << i << " name: " << attribute.getAttributeName() << endl; //std::cout << "Attribute: " << attribute.toString() << std::endl; (vAttributes[variable])[vattribute] = attribute; return attribute; }
/** * @param i The attribute number * @return */ Attribute HDF5FileReader::getGlobalAttribute(long i) { std::cerr << "entered " << BOOST_CURRENT_FUNCTION << " i = " << (int)i << std::endl; H5::Group group = this->current_file->openGroup("/"); std::cout<< "group assigned\n"; H5::Attribute h5attribute = group.openAttribute((unsigned int)i); std::cout<< "attribute opened\n"; H5::DataType dataType = h5attribute.getDataType(); std::cout<< "dataType retrieved\n"; Attribute attribute; std::cout << "checking dataType"<<std::endl; if (dataType.getClass() == H5T_STRING) { std::string attributeValue = "NULL"; h5attribute.read(dataType, attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); //std::cout << "name: '" << attributeName << "' string attributeBuffer: '" << attributeValue << "'"<< std::endl; attribute.setAttributeValue(attributeValue); gAttributeByID[i] = attribute; gAttributes[attribute.getAttributeName()] = attribute; //return attribute; } else if (dataType.getClass() == H5T_INTEGER) { //int attributeValue = 0.f; int attributeBuffer;// = new int[1]; h5attribute.read(dataType, &attributeBuffer); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); //std::cout << "int attributeBuffer: '" << attributeBuffer << "'"<< std::endl; attribute.setAttributeValue(attributeBuffer); gAttributeByID[i] = attribute; gAttributes[attribute.getAttributeName()] = attribute; //return attribute; } else if (dataType.getClass() == H5T_FLOAT)//CDF_FLOAT { //int attributeValue = 0.f; float attributeValue;// = new int[1]; h5attribute.read(dataType, &attributeValue); std::string attributeName = ""; attributeName = h5attribute.getName(); attribute.setAttributeName(attributeName); //std::cout << "float attributeBuffer: '" << attributeValue << "'"<< std::endl; attribute.setAttributeValue(attributeValue); gAttributeByID[i] = attribute; gAttributes[attribute.getAttributeName()] = attribute; //return attribute; } //std::cout << "added: " << i << " name: '" << attribute.getAttributeName() << "'" << endl; //std::cout << "Attribute: " << attribute.toString() << std::endl; return attribute; }