bool DatasetAdapter::nextChar() { return (++charIndex < (getDatasetSize() - 1)); }
bool DatasetAdapter::isLastChar() { return (charIndex == (getDatasetSize() - 2)); }
// read file data into element struct // return > 0 is OK int read_hdf5_height_file(char *fname, struct ElementType *elmp) { hid_t file_id; /* group_id */ int nw, nl, nu, i, j; /* slicecount= 1, */ struct SurfaceType *sf; char buffer[255]; #ifdef DEBUG printf("debug: read_hdf5_height_file called! file: %s\n", __FILE__); #endif sf = &elmp->surf; // clean up if (sf->u) XFREE(sf->u); if (sf->w) XFREE(sf->w); if (sf->l) XFREE(sf->l); sf->nw= sf->nl= 0; if ( !fexists(fname) ) { beep(5); fprintf(stderr, "warning: surface error file >>%s<< not found - return\n", fname); return 0; } if ( !check_hdf5_4_height(fname, elmp->elementname, 1) ) return 0; #ifdef HAVE_HDF5 /* Open an existing file. */ file_id = myH5Fopen(fname); snprintf(buffer, 254, "/%s/wvec", elmp->elementname); nw = getDatasetSize(file_id, buffer); snprintf(buffer, 254, "/%s/lvec", elmp->elementname); nl = getDatasetSize(file_id, buffer); #endif nu = nw*nl; // double buffer_w[nw]; // double buffer_l[nl]; // double buffer_u[nu]; if (nu != nw*nl) { printf("stderr: read_hdf5_height_file: error on the vector sizes of the surface profile %s\n", __FILE__); printf("stderr: read_hdf5_height_file: surface file %s\n", fname); return 0; } #ifdef DEBUG1 printf("debug: read_hdf5_height_file: number of points wvec= %d, lvec= %d\n", nw, nl);; printf("debug: read_hdf5_height_file: number of height points %d\n", nu); #endif sf->w = XMALLOC(double, nw); // allocate memory sf->l = XMALLOC(double, nl); sf->u = XMALLOC(double, nu); // load the values to the beamline->element->surface object WG snprintf(buffer, 254, "/%s/height_vec", elmp->elementname); #ifdef HAVE_HDF5 readDataDouble(file_id, buffer, sf->u, nu); snprintf(buffer, 254, "/%s/wvec", elmp->elementname); readDataDouble(file_id, buffer, sf->w, nw); snprintf(buffer, 254, "/%s/lvec", elmp->elementname); readDataDouble(file_id, buffer, sf->l, nl); #endif sf->nw= nw; sf->nl= nl; for (i= 0; i < nw; i++) sf->w[i] = sf->w[i]* 1e3; for (i= 0; i < nl; i++) sf->l[i] = sf->l[i]* 1e3; for (i= 0; i < nu; i++) sf->u[i] = sf->u[i]* 1e3; // *sf->u=buffer_u; //convertion from m (hdf5) to mm (phase standard) // *sf->w=buffer_w; // *sf->l=buffer_l; #ifdef HAVE_HDF5 H5Fclose(file_id); #endif printf("read_hdf5_height_file: %s => done\n", fname); // #ifdef DEBUG1 // for (i= 0; i < nw - 1; i = i + 1) // { // for (j= 0; j < nl - 1; j= j + 1) // { // printf("(i, j, p) = %d, %d, %d\n", i, j, j*nw+i); // printf("(w, l, u) = %g, %g, %g\n", sf->w[i], sf->l[j], sf->u[j*nw+i]); // } // } // #endif return 1; } /* read_hdf5_file */