/*-----------------------------------------------------------------------*/
pNXDS sumNXDataset(pNXDS source, int dimNo, int start, int end){
  int newDim[NX_MAXRANK], targetDim[NX_MAXRANK], sourceDim[NX_MAXRANK];
  pNXDS result = NULL;
  int i, count;

  if(dimNo < 0 || dimNo > source->rank-1) {
    fprintf(stderr,"ERROR: invalid dimension for summing requested");
    return NULL;
  }

  /*
    make result dataset with missing summed dimension
  */
  for(i = 0, count = 0; i < source->rank; i++){
    if(i != dimNo){
      newDim[count] = source->dim[i];
      count++;
    }
  }
  result = createNXDataset(source->rank-1, source->type, newDim);
  if(result == NULL){
    fprintf(stderr,"ERROR: out of memory creating result dataset");
    return NULL;
  }
  sumData(source,result,sourceDim,targetDim,0,
	  dimNo, start, end, 0);
  return result;
}
/*-----------------------------------------------------------------------*/
pNXDS cutNXDataset(pNXDS source, int start[], int end[]){
  pNXDS result = NULL;
  int newDim[NX_MAXRANK], i;
  int sourceDim[NX_MAXRANK], targetDim[NX_MAXRANK];

  for(i = 0; i < source->rank; i++){
    if(start[i] < 0 || end[i] > source->dim[i]){
      fprintf(stderr,"ERROR: invalid boundaries specified for cutting");
      return NULL;
    }
    newDim[i] = end[i] - start[i];
    if(newDim[i] <= 0){
      fprintf(stderr,"ERROR: invalid cut limits specified for cutting dataset");
      return NULL;
    }
  }
  result = createNXDataset(source->rank, source->type, newDim);
  if(result == NULL){
    fprintf(stderr,"ERROR: out of memory creating result dataset");
    return NULL;
  }
  
  copyCutData(source, result, sourceDim, targetDim, start, end, 0);

  return result;
}
Exemple #3
0
/*--------------------------------------------------------------------*/
pNXDS createNXDataset32(int rank, int typecode, int dim[])
{
  int64_t newDim[NX_MAXRANK];
  int i;

  for(i = 0; i < rank; i++){
    newDim[i] = dim[i];
  }
  return createNXDataset(rank,typecode, newDim);
}