HDF5RecordingData::HDF5RecordingData(DataSet* data) { DataSpace dSpace; DSetCreatPropList prop; ScopedPointer<DataSet> dataSet = data; hsize_t dims[3], chunk[3]; dSpace = dataSet->getSpace(); prop = dataSet->getCreatePlist(); dimension = dSpace.getSimpleExtentDims(dims); prop.getChunk(dimension,chunk); this->size[0] = dims[0]; if (dimension > 1) this->size[1] = dims[1]; else this->size[1] = 1; if (dimension > 1) this->size[2] = dims[2]; else this->size[2] = 1; this->xChunkSize = chunk[0]; this->xPos = dims[0]; this->dSet = dataSet; this->rowXPos.clear(); this->rowXPos.insertMultiple(0,0,this->size[1]); }
int main (void) { hsize_t i, j; // Try block to detect exceptions raised by any of the calls inside it try { /* * Turn off the auto-printing when failure occurs so that we can * handle the errors appropriately */ Exception::dontPrint(); /* * Open the file and the dataset. */ H5File file( FILE_NAME, H5F_ACC_RDONLY ); DataSet dataset = file.openDataSet( DATASET_NAME ); /* * Get filespace for rank and dimension */ DataSpace filespace = dataset.getSpace(); /* * Get number of dimensions in the file dataspace */ int rank = filespace.getSimpleExtentNdims(); /* * Get and print the dimension sizes of the file dataspace */ hsize_t dims[2]; // dataset dimensions rank = filespace.getSimpleExtentDims( dims ); cout << "dataset rank = " << rank << ", dimensions " << (unsigned long)(dims[0]) << " x " << (unsigned long)(dims[1]) << endl; /* * Define the memory space to read dataset. */ DataSpace mspace1(RANK, dims); /* * Read dataset back and display. */ int data_out[NX][NY]; // buffer for dataset to be read dataset.read( data_out, PredType::NATIVE_INT, mspace1, filespace ); cout << "\n"; cout << "Dataset: \n"; for (j = 0; j < dims[0]; j++) { for (i = 0; i < dims[1]; i++) cout << data_out[j][i] << " "; cout << endl; } /* * dataset rank 2, dimensions 10 x 5 * chunk rank 2, dimensions 2 x 5 * Dataset: * 1 1 1 3 3 * 1 1 1 3 3 * 1 1 1 0 0 * 2 0 0 0 0 * 2 0 0 0 0 * 2 0 0 0 0 * 2 0 0 0 0 * 2 0 0 0 0 * 2 0 0 0 0 * 2 0 0 0 0 */ /* * Read the third column from the dataset. * First define memory dataspace, then define hyperslab * and read it into column array. */ hsize_t col_dims[1]; col_dims[0] = 10; DataSpace mspace2( RANKC, col_dims ); /* * Define the column (hyperslab) to read. */ hsize_t offset[2] = { 0, 2 }; hsize_t count[2] = { 10, 1 }; int column[10]; // buffer for column to be read /* * Define hyperslab and read. */ filespace.selectHyperslab( H5S_SELECT_SET, count, offset ); dataset.read( column, PredType::NATIVE_INT, mspace2, filespace ); cout << endl; cout << "Third column: " << endl; for (i = 0; i < 10; i++) cout << column[i] << endl; /* * Third column: * 1 * 1 * 1 * 0 * 0 * 0 * 0 * 0 * 0 * 0 */ /* * Get creation properties list. */ DSetCreatPropList cparms = dataset.getCreatePlist(); /* * Check if dataset is chunked. */ hsize_t chunk_dims[2]; int rank_chunk; if( H5D_CHUNKED == cparms.getLayout() ) { /* * Get chunking information: rank and dimensions */ rank_chunk = cparms.getChunk( 2, chunk_dims); cout << "chunk rank " << rank_chunk << "dimensions " << (unsigned long)(chunk_dims[0]) << " x " << (unsigned long)(chunk_dims[1]) << endl; /* * Define the memory space to read a chunk. */ DataSpace mspace3( rank_chunk, chunk_dims ); /* * Define chunk in the file (hyperslab) to read. */ offset[0] = 2; offset[1] = 0; count[0] = chunk_dims[0]; count[1] = chunk_dims[1]; filespace.selectHyperslab( H5S_SELECT_SET, count, offset ); /* * Read chunk back and display. */ int chunk_out[2][5]; // buffer for chunk to be read dataset.read( chunk_out, PredType::NATIVE_INT, mspace3, filespace ); cout << endl; cout << "Chunk:" << endl; for (j = 0; j < chunk_dims[0]; j++) { for (i = 0; i < chunk_dims[1]; i++) cout << chunk_out[j][i] << " "; cout << endl; } /* * Chunk: * 1 1 1 0 0 * 2 0 0 0 0 */ } } // end of try block // catch failure caused by the H5File operations catch( FileIException error ) { error.printErrorStack(); return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printErrorStack(); return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printErrorStack(); return -1; } return 0; }