//-------------------------------------------------------------- size_t DataSet::loadFragment(const std::string & filePath, const std::string & particleType) { static const int stride = 1; ofxHDF5File h5File; h5File.open(filePath, true); ofxHDF5GroupPtr h5Group = h5File.loadGroup(particleType); // Load the coordinate data and convert angles to radians. auto coordDataSet = h5Group->loadDataSet("Coordinates"); int coordCount = coordDataSet->getDimensionSize(0) / stride; coordDataSet->setHyperslab(0, coordCount, stride); vector<glm::vec3> coordData(coordCount); coordDataSet->read(coordData.data()); // Load the mass data. auto massDataSet = h5Group->loadDataSet("Masses"); int massCount = massDataSet->getDimensionSize(0) / stride; massDataSet->setHyperslab(0, massCount, stride); vector<float> massData(massCount); massDataSet->read(massData.data()); // Load the star formation rate data. auto sfrDataSet = h5Group->loadDataSet("StarFormationRate"); int sfrCount = sfrDataSet->getDimensionSize(0) / stride; sfrDataSet->setHyperslab(0, sfrCount, stride); vector<float> sfrData(sfrCount); sfrDataSet->read(sfrData.data()); // Add valid points to the data set. size_t total = 0; for (int i = 0; i < coordData.size(); ++i) { if (coordData[i].z > 0.0f) { this->coordinates.push_back(glm::vec3(ofDegToRad(coordData[i].x), ofDegToRad(coordData[i].y), coordData[i].z)); this->minRadius = std::min(this->minRadius, coordData[i].z); this->maxRadius = std::max(this->maxRadius, coordData[i].z); this->masses.push_back(massData[i]); if (particleType == "PartType6") { this->starFormationRates.push_back(sfrData[i]); } else { // These are stars so just put in dummy data. this->starFormationRates.push_back(-1.0f); } ++total; } } return total; }
int ADIOS_Var::getNumDataElem() { int getNumElem = 1; for (int i=0; i<getNumDimension(); i++) { getNumElem *= getDimensionSize(i); } return getNumElem; }
int64_t ADIOS_Var::getDataLen() { uint64_t total_bytes = adios_type_size(getType(), readValue()); for (int i=0; i<getNumDimension(); i++) { total_bytes *= getDimensionSize(i); } return total_bytes; }
int64_t ADIOS_Var::getDimensionArray(std::vector<uint64_t>* dims) { dims->resize(getNumDimension()); for (int i=0; i<getNumDimension(); i++) { (*dims)[i] = getDimensionSize(i); } return dims->size(); }