Here's a C file demonstrating this behavior for floating-point data.
The output of the program is (on my machine):
Data written:
1.129840 5.123983 2.129993 -2.199330
After immediate read:
1.129840 5.123983 2.129993 -2.199330
After reopening:
1.130670 5.120670 2.130670 -2.199330
Andrew
#include <stdio.h>
#include <stdlib.h>
#include "hdf5.h"
/* Demonstrates the effect of data caching when the scale-offset filter
is used.
*/
void print_data(float* data){
/* Print 4 elements */
int i;
for(i=0; i<4; i++){
fprintf(stdout, "%f ", data[i]);
}
fprintf(stdout, "\n");
}
int main(){
hid_t fid, dsid, sid, plist;
hsize_t dims[] = {4};
float data[] = {1.129839801,5.12398344,2.129993,-2.199330211};
float* data_out = (float*)malloc(sizeof(float)*4);
fid = H5Fcreate("test.hdf5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
sid = H5Screate_simple(1, dims, NULL);
plist = H5Pcreate(H5P_DATASET_CREATE);
H5Pset_chunk(plist, 1, dims);
H5Pset_scaleoffset(plist, H5Z_SO_FLOAT_DSCALE, 2);
dsid = H5Dcreate1(fid, "x", H5T_NATIVE_FLOAT, sid, plist);
H5Dwrite(dsid, H5T_NATIVE_FLOAT, sid, sid, H5P_DEFAULT, data);
H5Dread(dsid, H5T_NATIVE_FLOAT, sid, sid, H5P_DEFAULT, data_out);
fprintf(stdout, "Data written:\n");
print_data(data);
fprintf(stdout, "After immediate read:\n");
print_data(data_out);
H5Dclose(dsid);
dsid = H5Dopen1(fid, "x");
H5Dread(dsid, H5T_NATIVE_FLOAT, sid, sid, H5P_DEFAULT, data_out);
fprintf(stdout, "After reopening:\n");
print_data(data_out);
return 0;
}
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org