Skip to content

Commit

Permalink
Adding HDF group files
Browse files Browse the repository at this point in the history
Most of this will vanish when all examples are ported to C++.

Update #318
  • Loading branch information
eugenwintersberger committed Jan 5, 2019
1 parent 96ebc09 commit 52e4de9
Show file tree
Hide file tree
Showing 187 changed files with 16,600 additions and 7 deletions.
5 changes: 4 additions & 1 deletion examples/hdfgroup/H5D/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ add_executable(h5ex_d_chunk h5ex_d_chunk.cpp)
target_link_libraries(h5ex_d_chunk h5cpp)

add_executable(h5ex_d_compact h5ex_d_compact.cpp)
target_link_libraries(h5ex_d_compact h5cpp)
target_link_libraries(h5ex_d_compact h5cpp)

add_executable(h5ex_d_fillval h5ex_d_fillval.cpp)
target_link_libraries(h5ex_d_fillval h5cpp)
25 changes: 25 additions & 0 deletions examples/hdfgroup/H5D/C_sourcefiles.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#-----------------------------------------------------------------------------
# Define Sources, one file per application
#-----------------------------------------------------------------------------
set (examples
h5ex_d_alloc.c
h5ex_d_checksum.c
h5ex_d_chunk.c
h5ex_d_compact.c
h5ex_d_extern.c
h5ex_d_fillval.c
h5ex_d_gzip.c
h5ex_d_hyper.c
h5ex_d_nbit.c
h5ex_d_rdwr.c
h5ex_d_soint.c
h5ex_d_transform.c
h5ex_d_unlimmod.c
h5ex_d_shuffle.c
h5ex_d_sofloat.c
h5ex_d_unlimadd.c
h5ex_d_unlimgzip.c
)
if (HDF5_ENABLE_SZIP_SUPPORT)
set (examples ${examples} h5ex_d_szip.c)
endif ()
141 changes: 141 additions & 0 deletions examples/hdfgroup/H5D/h5ex_d_alloc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/************************************************************
This example shows how to set the space allocation time
for a dataset. The program first creates two datasets,
one with the default allocation time (late) and one with
early allocation time, and displays whether each has been
allocated and their allocation size. Next, it writes data
to the datasets, and again displays whether each has been
allocated and their allocation size.
This file is intended for use with HDF5 Library version 1.8
************************************************************/

#include "hdf5.h"
#include <stdio.h>
#include <stdlib.h>

#define FILE "h5ex_d_alloc.h5"
#define DATASET1 "DS1"
#define DATASET2 "DS2"
#define DIM0 4
#define DIM1 7
#define FILLVAL 99

int
main (void)
{
hid_t file, space, dset1, dset2, dcpl;
/* Handles */
herr_t status;
H5D_space_status_t space_status;
hsize_t dims[2] = {DIM0, DIM1},
storage_size;
int wdata[DIM0][DIM1], /* Write buffer */
i, j;

/*
* Initialize data.
*/
for (i=0; i<DIM0; i++)
for (j=0; j<DIM1; j++)
wdata[i][j] = i * j - j;

/*
* Create a new file using the default properties.
*/
file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

/*
* Create dataspace. Setting maximum size to NULL sets the maximum
* size to be the current size.
*/
space = H5Screate_simple (2, dims, NULL);

/*
* Create the dataset creation property list, and set the chunk
* size.
*/
dcpl = H5Pcreate (H5P_DATASET_CREATE);

/*
* Set the allocation time to "early". This way we can be sure
* that reading from the dataset immediately after creation will
* return the fill value.
*/
status = H5Pset_alloc_time (dcpl, H5D_ALLOC_TIME_EARLY);

printf ("Creating datasets...\n");
printf ("%s has allocation time H5D_ALLOC_TIME_LATE\n", DATASET1);
printf ("%s has allocation time H5D_ALLOC_TIME_EARLY\n\n", DATASET2);

/*
* Create the dataset using the dataset creation property list.
*/
dset1 = H5Dcreate (file, DATASET1, H5T_STD_I32LE, space, H5P_DEFAULT,
H5P_DEFAULT, H5P_DEFAULT);
dset2 = H5Dcreate (file, DATASET2, H5T_STD_I32LE, space, H5P_DEFAULT, dcpl,
H5P_DEFAULT);

/*
* Retrieve and print space status and storage size for dset1.
*/
status = H5Dget_space_status (dset1, &space_status);
storage_size = H5Dget_storage_size (dset1);
printf ("Space for %s has%sbeen allocated.\n", DATASET1,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf ("Storage size for %s is: %ld bytes.\n", DATASET1,
(long) storage_size);

/*
* Retrieve and print space status and storage size for dset2.
*/
status = H5Dget_space_status (dset2, &space_status);
storage_size = H5Dget_storage_size (dset2);
printf ("Space for %s has%sbeen allocated.\n", DATASET2,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf ("Storage size for %s is: %ld bytes.\n", DATASET2,
(long) storage_size);

printf ("\nWriting data...\n\n");

/*
* Write the data to the datasets.
*/
status = H5Dwrite (dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
wdata[0]);
status = H5Dwrite (dset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
wdata[0]);

/*
* Retrieve and print space status and storage size for dset1.
*/
status = H5Dget_space_status (dset1, &space_status);
storage_size = H5Dget_storage_size (dset1);
printf ("Space for %s has%sbeen allocated.\n", DATASET1,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf ("Storage size for %s is: %ld bytes.\n", DATASET1,
(long) storage_size);

/*
* Retrieve and print space status and storage size for dset2.
*/
status = H5Dget_space_status (dset2, &space_status);
storage_size = H5Dget_storage_size (dset2);
printf ("Space for %s has%sbeen allocated.\n", DATASET2,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf ("Storage size for %s is: %ld bytes.\n", DATASET2,
(long) storage_size);

/*
* Close and release resources.
*/
status = H5Pclose (dcpl);
status = H5Dclose (dset1);
status = H5Dclose (dset2);
status = H5Sclose (space);
status = H5Fclose (file);

return 0;
}
197 changes: 197 additions & 0 deletions examples/hdfgroup/H5D/h5ex_d_checksum.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
/************************************************************
This example shows how to read and write data to a dataset
using the Fletcher32 checksum filter. The program first
checks if the Fletcher32 filter is available, then if it
is it writes integers to a dataset using Fletcher32, then
closes the file. Next, it reopens the file, reads back
the data, checks if the filter detected an error and
outputs the type of filter and the maximum value in the
dataset to the screen.
This file is intended for use with HDF5 Library version 1.8
************************************************************/

#include "hdf5.h"
#include <stdio.h>
#include <stdlib.h>

#define FILE "h5ex_d_checksum.h5"
#define DATASET "DS1"
#define DIM0 32
#define DIM1 64
#define CHUNK0 4
#define CHUNK1 8

int
main (void)
{
hid_t file, space, dset, dcpl;
/* Handles */
herr_t status;
htri_t avail;
H5Z_filter_t filter_type;
hsize_t dims[2] = {DIM0, DIM1},
chunk[2] = {CHUNK0, CHUNK1};
size_t nelmts;
unsigned int flags,
filter_info;
int wdata[DIM0][DIM1], /* Write buffer */
rdata[DIM0][DIM1], /* Read buffer */
max,
i, j;

/*
* Check if the Fletcher32 filter is available and can be used for
* both encoding and decoding. Normally we do not perform error
* checking in these examples for the sake of clarity, but in this
* case we will make an exception because this filter is an
* optional part of the hdf5 library.
*/
avail = H5Zfilter_avail(H5Z_FILTER_FLETCHER32);
if (!avail) {
printf ("Fletcher32 filter not available.\n");
return 1;
}
status = H5Zget_filter_info (H5Z_FILTER_FLETCHER32, &filter_info);
if ( !(filter_info & H5Z_FILTER_CONFIG_ENCODE_ENABLED) ||
!(filter_info & H5Z_FILTER_CONFIG_DECODE_ENABLED) ) {
printf ("Fletcher32 filter not available for encoding and decoding.\n");
return 1;
}

/*
* Initialize data.
*/
for (i=0; i<DIM0; i++)
for (j=0; j<DIM1; j++)
wdata[i][j] = i * j - j;

/*
* Create a new file using the default properties.
*/
file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

/*
* Create dataspace. Setting maximum size to NULL sets the maximum
* size to be the current size.
*/
space = H5Screate_simple (2, dims, NULL);

/*
* Create the dataset creation property list, add the Fletcher32 filter
* and set the chunk size.
*/
dcpl = H5Pcreate (H5P_DATASET_CREATE);
status = H5Pset_fletcher32 (dcpl);
status = H5Pset_chunk (dcpl, 2, chunk);

/*
* Create the dataset.
*/
dset = H5Dcreate (file, DATASET, H5T_STD_I32LE, space, H5P_DEFAULT, dcpl,
H5P_DEFAULT);

/*
* Write the data to the dataset.
*/
status = H5Dwrite (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
wdata[0]);

/*
* Close and release resources.
*/
status = H5Pclose (dcpl);
status = H5Dclose (dset);
status = H5Sclose (space);
status = H5Fclose (file);


/*
* Now we begin the read section of this example.
*/

/*
* Open file and dataset using the default properties.
*/
file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
dset = H5Dopen (file, DATASET, H5P_DEFAULT);

/*
* Retrieve dataset creation property list.
*/
dcpl = H5Dget_create_plist (dset);

/*
* Retrieve and print the filter type. Here we only retrieve the
* first filter because we know that we only added one filter.
*/
nelmts = 0;
filter_type = H5Pget_filter (dcpl, 0, &flags, &nelmts, NULL, 0, NULL,
&filter_info);
printf ("Filter type is: ");
switch (filter_type) {
case H5Z_FILTER_DEFLATE:
printf ("H5Z_FILTER_DEFLATE\n");
break;
case H5Z_FILTER_SHUFFLE:
printf ("H5Z_FILTER_SHUFFLE\n");
break;
case H5Z_FILTER_FLETCHER32:
printf ("H5Z_FILTER_FLETCHER32\n");
break;
case H5Z_FILTER_SZIP:
printf ("H5Z_FILTER_SZIP\n");
break;
case H5Z_FILTER_NBIT:
printf ("H5Z_FILTER_NBIT\n");
break;
case H5Z_FILTER_SCALEOFFSET:
printf ("H5Z_FILTER_SCALEOFFSET\n");
}

/*
* Read the data using the default properties.
*/
status = H5Dread (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
rdata[0]);

/*
* Check if the read was successful. Normally we do not perform
* error checking in these examples for the sake of clarity, but in
* this case we will make an exception because this is how the
* fletcher32 checksum filter reports data errors.
*/
if (status<0) {
fprintf (stderr, "Dataset read failed!\n");
status = H5Pclose (dcpl);
status = H5Dclose (dset);
status = H5Fclose (file);
return 2;
}

/*
* Find the maximum value in the dataset, to verify that it was
* read correctly.
*/
max = rdata[0][0];
for (i=0; i<DIM0; i++)
for (j=0; j<DIM1; j++)
if (max < rdata[i][j])
max = rdata[i][j];

/*
* Print the maximum value.
*/
printf ("Maximum value in %s is: %d\n", DATASET, max);

/*
* Close and release resources.
*/
status = H5Pclose (dcpl);
status = H5Dclose (dset);
status = H5Fclose (file);

return 0;
}
Loading

0 comments on commit 52e4de9

Please sign in to comment.