What do you mean by the DRdata datatype? I am not sure what you mean or how I would use it. This is my first time working with HDF5, sorry for some newbie questions.
On Tue, Jul 12, 2016 at 1:05 PM, David <[email protected]> wrote: > Use the DRdata datatype that's already in the file. > > On Tue, Jul 12, 2016 at 8:26 AM, Steven Walton <[email protected]> > wrote: > >> So I don't have too much experience with compound data but I thought I'd >> take a crack at it. I had an issue a while ago trying to use pointer >> arrays, hdf5 allowing me to use float* but not float**. There are two ways >> you can rewrite this, assuming the data isn't rank 1. You could use a ctype >> array and use malloc to allocate the space, or you can use >> boost::multi_array. I found the latter to be nicer to work with. Data needs >> to be contiguous for hdf5 to understand it. If that doesn't work are you >> able to pull out the whole compound data at once? It appears that you have >> a nested structure. >> >> If I am reading this right you have >> typedef struct >> { >> float f_i; >> float f_q; >> } iq_data; >> >> typedef struct >> { >> bunch of stuff >> iq_data nested; >> } DRdata; >> >> You could also always try opening the data with python's h5py. I find the >> tool useful as it just reads whatever data you throw at it. >> >> On Tue, Jul 12, 2016 at 7:57 AM, Todd Dobmeyer <[email protected]> >> wrote: >> >>> Binh-Minh >>> >>> Making your change keeps me from crashing, but unfortunately doesn't get >>> any of the data. So to better understand my data, I have 7500 pieces of >>> DATA in the DATASPACE. Inside 1 piece of data is an array of Compound >>> objects each containing 2 floats. The Compound object is called iq_data and >>> the 2 floats inside are f_i and f_q. >>> >>> I originally did the 2D array thinking I needed the outside dimension to >>> be 7500 and the inner dimensions to be 1000. But now I think I need a 1D >>> array that holds 7500*1000 compound objects or 7500*1000*2 floats. However, >>> I cannot figure out how to read the data. Do I read "iq_data" or do I try >>> and read "f_i" and "f_q"? >>> >>> Thanks again and I hope I clarified things! >>> Todd >>> >>> On Tue, Jul 12, 2016 at 2:14 AM, Binh-Minh Ribler <[email protected] >>> > wrote: >>> >>>> Hi Todd, >>>> >>>> >>>> I'm not sure I understood your data completely, but I wonder what you >>>> will get if you change this line: >>>> >>>> >>>> complex_t** iqData = new complex_t*[nelems]; >>>> >>>> >>>> to: >>>> >>>> >>>> complex_t* iqData = new complex_t[nelems]; >>>> >>>> >>>> and read without the for loop... >>>> >>>> >>>> Binh-Minh >>>> >>>> >>>> ------------------------------ >>>> *From:* Hdf-forum <[email protected]> on behalf of >>>> Todd Dobmeyer <[email protected]> >>>> *Sent:* Monday, July 11, 2016 3:10 PM >>>> *To:* [email protected] >>>> *Subject:* [Hdf-forum] Reading Nested Compound objects in C++ >>>> >>>> All >>>> >>>> I have an HDF5 file I need to read in a C++ application. I performed an >>>> h5dump on the data and have the following structure (with many items >>>> removed that I am not interested in). I have successfully read in all 7500 >>>> values of "num_samps" using the C++ HDF5 library. What I am struggling to >>>> figure out how to read is the array of compound "iq_data". I know in the >>>> datatype it says there are 1000 compound objects. I don't know if I can get >>>> this value out of the DataType, but I do know the num_samps points to this >>>> array size as well, which is fine since I can read this. Can any of you >>>> help me figure out how to read the "iq_data" array. Below is the sample >>>> data followed by my code I have so far. In my code "numSamps" is good, but >>>> "iqData" is not holding anything useful. I am sure I am missing something. >>>> >>>> Thanks for your help! >>>> Todd Dobmeyer >>>> >>>> --------------SAMPLE DATA------------------------- >>>> >>>> HDF5 "hdfFile.be01" { >>>> GROUP "/" { >>>> DATATYPE "DRdata" H5T_COMPOUND { >>>> H5T_ARRAY { [5] H5T_STD_U32LE } "guid"; >>>> H5T_STD_I32LE "version"; >>>> ... >>>> H5T_STD_U32LE "num_samps"; >>>> ... >>>> H5T_STD_U32LE "sequence_dummy"; >>>> H5T_ARRAY { [1000] H5T_COMPOUND { >>>> H5T_IEEE_F32LE "f_i"; >>>> H5T_IEEE_F32LE "f_q"; >>>> } } "iq_data"; >>>> } >>>> DATASET "DRx1data" { >>>> DATATYPE "/DRx1" >>>> DATASPACE SIMPLE { ( 7500 ) / ( H5S_UNLIMITED ) } >>>> DATA { >>>> (0): { >>>> [ 352430272, 25602, 2314, 1442149219, 43629 ], >>>> 1, >>>> 1.44215e+09, >>>> 1442149219, >>>> 0, >>>> 1, >>>> 1, >>>> 0, >>>> 1, >>>> 0, >>>> 0, >>>> 0, >>>> 3, >>>> 0, >>>> 0, >>>> 0, >>>> 0, >>>> 1, >>>> 31095000, >>>> 20000, >>>> 0, >>>> 1000, >>>> 1000, // (this is num_samps) >>>> 1, >>>> 1000, >>>> [ { >>>> 1.09068e+09, >>>> 4.53469e+08 >>>> }, { >>>> 4.03303e+08, >>>> 4.11846e+08 >>>> }, { >>>> -1.35295e+08, >>>> -1.70107e+08 >>>> }, ... >>>> >>>> --------------------CODE------------------ >>>> >>>> >>>> typedef struct { >>>> >>>> float f_i; >>>> >>>> float f_q; >>>> >>>> } complex_t; >>>> >>>> >>>> int main(int argc, char *argv[]) >>>> >>>> { >>>> >>>> std::string path = "/data/hdfFile.be01"; >>>> >>>> // Open the file, dataset, and dataspace >>>> >>>> H5::H5File file(path, H5F_ACC_RDONLY); >>>> >>>> H5::DataSet dataset = file.openDataSet("DRx1data"); >>>> >>>> H5::DataSpace dataspace = dataset.getSpace(); >>>> >>>> // Get the number of elements and number of samples >>>> >>>> int nelems = dataspace.getSimpleExtentNpoints(); >>>> >>>> int numSamps[nelems]; >>>> >>>> // Create number of samples type >>>> >>>> H5::CompType sampsType(sizeof(uint)); >>>> >>>> sampsType.insertMember("num_samps", 0, H5::PredType::STD_U32LE); >>>> >>>> // Read the number of samples >>>> >>>> dataset.read(numSamps, sampsType); >>>> >>>> // Now try to read the I/Q data >>>> >>>> H5::CompType iqDataType(sizeof(complex_t)); >>>> >>>> iqDataType.insertMember("f_i", HOFFSET(complex_t, f_i), >>>> H5::PredType::NATIVE_FLOAT); >>>> >>>> iqDataType.insertMember("f_q", HOFFSET(complex_t, f_q), >>>> H5::PredType::NATIVE_FLOAT); >>>> >>>> complex_t** iqData = new complex_t*[nelems]; >>>> >>>> for(int i = 0 ; i < nelems ; ++i) >>>> >>>> { >>>> >>>> iqData[i] = new complex_t[numSamps[i]]; >>>> >>>> } >>>> >>>> dataset.read(iqData, iqDataType); >>>> >>>> >>>> _______________________________________________ >>>> Hdf-forum is for HDF software users discussion. >>>> [email protected] >>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org >>>> Twitter: https://twitter.com/hdf5 >>>> >>> >>> >>> _______________________________________________ >>> Hdf-forum is for HDF software users discussion. >>> [email protected] >>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org >>> Twitter: https://twitter.com/hdf5 >>> >> >> >> _______________________________________________ >> Hdf-forum is for HDF software users discussion. >> [email protected] >> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org >> Twitter: https://twitter.com/hdf5 >> > > > _______________________________________________ > Hdf-forum is for HDF software users discussion. > [email protected] > http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org > Twitter: https://twitter.com/hdf5 >
_______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org Twitter: https://twitter.com/hdf5
