/*-----------------------------------------------------------------------*/ 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; }
/*--------------------------------------------------------------------*/ 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); }