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

Reply via email to