; docformat = 'rst' ;+ ; Example of writing chunks to an HDF 5 file without ever having to hold the ; entire data in memory. ;- pro mg_extend_h5_example compile_opt strictarr datFilename = filepath('head.dat', subdir=['examples', 'data']) hdfFilename = file_basename(datFilename, '.dat') + '.h5' openr, lun, datFilename, /get_lun im = assoc(lun, bytarr(80, 100)) if (file_test(hdfFilename)) then file_delete, hdfFilename fullDims = [57, 80, 100] dims = [1, 80, 100] fileId = h5f_create(hdfFilename) typeId = h5t_idl_create(1B) fullSpaceId = h5s_create_simple(dims, max_dimensions=fullDims) datasetId = h5d_create(fileId, 'head', typeId, fullSpaceId, $ chunk_dimensions=dims) memorySpaceId = h5d_get_space(datasetId) for f = 0L, 57L - 1L do begin h5d_extend, datasetId, [f + 1L, dims[1L:2L]] fileSpaceId = h5d_get_space(datasetId) h5s_select_hyperslab, fileSpaceId, [f, 0, 0], dims, /reset h5d_write, datasetId, reform(im[f], $ dims[0], dims[1], dims[2]), $ file_space=fileSpaceId, $ memory_space=memorySpaceId h5s_close, fileSpaceId endfor h5d_close, datasetId h5s_close, memorySpaceId h5s_close, fullSpaceId h5t_close, typeId h5f_close, fileId free_lun, lun end ; main-level example ; convert head.dat to head.h5 mg_extend_h5_example ; read HDF 5 data to check it data = h5_parse('head.h5', /read_data) ; display for visual check of data window, /free, xsize=80, ysize=100 tv, reform(data.head._data[30, *, *]) end