Exemplo n.º 1
0
bool DatasetAdapter::nextChar() {
	return (++charIndex < (getDatasetSize() - 1));
}
Exemplo n.º 2
0
bool DatasetAdapter::isLastChar() {
	return (charIndex == (getDatasetSize() - 2));
}
Exemplo n.º 3
0
// 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 */