Example usage for org.apache.commons.beanutils ConvertUtils convert

List of usage examples for org.apache.commons.beanutils ConvertUtils convert

Introduction

In this page you can find the example usage for org.apache.commons.beanutils ConvertUtils convert.

Prototype

public static Object convert(String values[], Class clazz) 

Source Link

Document

Convert an array of specified values to an array of objects of the specified class (if possible).

For more details see ConvertUtilsBean.

Usage

From source file:uk.ac.diamond.scisoft.ncd.rcp.utils.NcdNexusUtilsTest.java

@Test
public void testSliceString() throws HDF5Exception {

    int[] datDimMake = Arrays.copyOfRange(frames, 0, frames.length - dim);
    ArrayList<int[]> list = NcdDataUtils.createSliceList(format, datDimMake);
    for (int i = 0; i < datDimMake.length; i++)
        datDimMake[i] = list.get(i).length;

    DataSliceIdentifiers dr_id = readDataId(inputPath, detector, "data", null)[0];
    long[] frames_long = (long[]) ConvertUtils.convert(frames, long[].class);

    SliceSettings drSlice = new SliceSettings(frames_long, 0, 1);
    int[] start = new int[] { 0, 0, 0, 0 };
    drSlice.setStart(start);/*  www .  ja va 2  s  .c o m*/
    Dataset data = NcdNexusUtils.sliceInputData(drSlice, dr_id);
    Dataset result = sliceInputData(dim, frames, format, dr_id);

    MultidimensionalCounter resultCounter = new MultidimensionalCounter(result.getShape());
    Iterator resIter = resultCounter.iterator();
    while (resIter.hasNext()) {
        resIter.next();
        int[] gridFrame = Arrays.copyOf(resIter.getCounts(), frames.length);
        for (int i = 0; i < datDimMake.length; i++)
            gridFrame[i] = list.get(i)[gridFrame[i]];
        float valResult = result.getFloat(resIter.getCounts());
        float valData = data.getFloat(gridFrame);
        double acc = Math.max(1e-6 * Math.abs(Math.sqrt(valResult * valResult + valData * valData)), 1e-10);

        assertEquals(String.format("Data slicing test for pixel %s has failed.",
                Arrays.toString(resIter.getCounts())), valData, valResult, acc);
    }
}

From source file:uk.ac.diamond.scisoft.ncd.rcp.utils.NcdNexusUtilsTest.java

public static Dataset sliceInputData(int dim, int[] frames, String format, DataSliceIdentifiers ids)
        throws HDF5Exception {
    int[] datDimMake = Arrays.copyOfRange(frames, 0, frames.length - dim);
    int[] imageSize = Arrays.copyOfRange(frames, frames.length - dim, frames.length);
    ArrayList<int[]> list = NcdDataUtils.createSliceList(format, datDimMake);
    for (int i = 0; i < datDimMake.length; i++)
        datDimMake[i] = list.get(i).length;
    int[] framesTotal = ArrayUtils.addAll(datDimMake, imageSize);

    long[] block = new long[frames.length];
    block = Arrays.copyOf((long[]) ConvertUtils.convert(frames, long[].class), block.length);
    Arrays.fill(block, 0, block.length - dim, 1);
    int[] block_int = (int[]) ConvertUtils.convert(block, int[].class);

    long[] count = new long[frames.length];
    Arrays.fill(count, 1);/*w  ww .j a  v a2  s .  c o m*/

    int dtype = HDF5Loader.getDtype(ids.dataclass_id, ids.datasize_id);
    Dataset data = DatasetFactory.zeros(block_int, dtype);
    Dataset result = null;

    MultidimensionalCounter bgFrameCounter = new MultidimensionalCounter(datDimMake);
    Iterator iter = bgFrameCounter.iterator();
    while (iter.hasNext()) {
        iter.next();
        long[] bgFrame = (long[]) ConvertUtils.convert(iter.getCounts(), long[].class);
        long[] gridFrame = new long[datDimMake.length];
        for (int i = 0; i < datDimMake.length; i++)
            gridFrame[i] = list.get(i)[(int) bgFrame[i]];

        long[] start = new long[frames.length];
        start = Arrays.copyOf(gridFrame, frames.length);

        int memspace_id = H5.H5Screate_simple(block.length, block, null);
        H5.H5Sselect_hyperslab(ids.dataspace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block);
        H5.H5Dread(ids.dataset_id, ids.datatype_id, memspace_id, ids.dataspace_id, HDF5Constants.H5P_DEFAULT,
                data.getBuffer());
        if (result == null) {
            result = data.clone();
        } else {
            result = DatasetUtils.append(result, data, block.length - dim - 1);
        }
    }

    if (result != null) {
        result.setShape(framesTotal);
    }
    return result;
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyAverage.java

public void configure(int dimension, int[] inputFrames, int processing_group_id, int frameBatch)
        throws HDF5Exception {

    dim = dimension;//ww  w  .j ava 2 s  .c  o m
    frames_int = inputFrames;
    frames = (long[]) ConvertUtils.convert(frames_int, long[].class);

    // Calculate shape of the averaged dataset based on the dimensions selected for averaging
    framesAve = Arrays.copyOf(frames, frames.length);
    for (int idx : averageIndices) {
        framesAve[idx - 1] = 1;
    }

    framesAve_int = (int[]) ConvertUtils.convert(framesAve, int[].class);

    ave_group_id = NcdNexusUtils.makegroup(processing_group_id, LazyAverage.name, Nexus.DETECT);
    int type = H5.H5Tcopy(HDF5Constants.H5T_NATIVE_FLOAT);
    ave_data_id = NcdNexusUtils.makedata(ave_group_id, "data", type, framesAve, true, "counts");
    ave_errors_id = NcdNexusUtils.makedata(ave_group_id, "errors", type, framesAve, true, "counts");
    H5.H5Tclose(type);

    sliceDim = 0;
    sliceSize = frames_int[0];

    // We will slice only 2D data. 1D data is loaded into memory completely
    if (averageIndices.length > 0 || dim == 2) {
        // Find dimension that needs to be sliced
        int dimCounter = 1;
        for (int idx = (frames.length - 1 - dim); idx >= 0; idx--) {
            if (ArrayUtils.contains(averageIndices, idx + 1)) {
                sliceDim = idx;
                sliceSize = frames_int[idx];
                dimCounter *= frames[idx];
                if (dimCounter >= frameBatch) {
                    sliceSize = frameBatch * frames_int[idx] / dimCounter;
                    break;
                }
            }
        }
    }
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyAverage.java

public void execute(DataSliceIdentifiers input_ids, DataSliceIdentifiers input_errors_ids)
        throws HDF5Exception {

    // Loop over dimensions that aren't averaged
    int[] iter_array = Arrays.copyOf(framesAve_int, framesAve_int.length);
    int[] step = Arrays.copyOf(framesAve_int, framesAve_int.length);
    Arrays.fill(step, 0, framesAve_int.length - dim, 1);
    SliceND slice = new SliceND(iter_array, null, iter_array, step);
    IndexIterator iter = new SliceIterator(iter_array, AbstractDataset.calcSize(iter_array), slice);

    // This loop iterates over the output averaged dataset image by image
    while (iter.hasNext()) {

        if (monitor.isCanceled()) {
            return;
        }//from   w w w  .j  a  v  a2s  . c  om

        int[] currentFrame = iter.getPos();
        int[] data_stop = Arrays.copyOf(currentFrame, currentFrame.length);
        long[] data_iter_array = Arrays.copyOf(frames, frames.length);
        Arrays.fill(data_iter_array, 0, frames.length - dim, 1);
        for (int i = 0; i < currentFrame.length; i++) {
            if (i < currentFrame.length - dim) {
                data_stop[i]++;
            } else {
                data_stop[i] = frames_int[i];
            }
        }
        int[] data_start = Arrays.copyOf(currentFrame, currentFrame.length);
        int[] data_step = Arrays.copyOf(step, currentFrame.length);
        Arrays.fill(data_step, 0, currentFrame.length - dim, 1);
        for (int idx : averageIndices) {
            int i = idx - 1;
            data_start[i] = 0;
            data_stop[i] = frames_int[i];
            data_iter_array[i] = frames_int[i];
            if (i > sliceDim) {
                data_step[i] = frames_int[i];
            } else {
                if (i == sliceDim) {
                    data_step[i] = sliceSize;
                }
            }
        }

        slice = new SliceND(data_stop, data_start, data_stop, data_step);
        IndexIterator data_iter = new SliceIterator(data_stop, AbstractDataset.calcSize(data_stop), slice);

        int[] aveShape = Arrays.copyOfRange(framesAve_int, framesAve_int.length - dim, framesAve_int.length);
        Dataset ave_frame = DatasetFactory.zeros(aveShape, Dataset.FLOAT32);
        Dataset ave_errors_frame = DatasetFactory.zeros(aveShape, Dataset.FLOAT32);

        // This loop iterates over chunks of data that need to be averaged for the current output image
        int totalFrames = 0;
        SliceSettings sliceSettings = new SliceSettings(data_iter_array, sliceDim, sliceSize);
        while (data_iter.hasNext()) {

            if (monitor.isCanceled()) {
                return;
            }

            sliceSettings.setStart(data_iter.getPos());
            Dataset data_slice = NcdNexusUtils.sliceInputData(sliceSettings, input_ids);
            Dataset errors_slice;
            if (input_errors_ids.dataset_id != -1) {
                errors_slice = NcdNexusUtils.sliceInputData(sliceSettings, input_errors_ids);
                errors_slice.ipower(2);
            } else {
                errors_slice = data_slice.clone();
            }
            int data_slice_rank = data_slice.getRank();

            if (monitor.isCanceled()) {
                return;
            }

            int totalFramesBatch = 1;
            for (int idx = (data_slice_rank - dim - 1); idx >= sliceDim; idx--) {
                if (ArrayUtils.contains(averageIndices, idx + 1)) {
                    totalFramesBatch *= data_slice.getShape()[idx];
                    data_slice = data_slice.sum(idx);
                    errors_slice = errors_slice.sum(idx);
                }
            }
            totalFrames += totalFramesBatch;
            ave_frame = ave_frame.iadd(data_slice);
            ave_errors_frame = ave_errors_frame.iadd(errors_slice);
        }

        if (monitor.isCanceled()) {
            return;
        }

        ave_frame = ave_frame.idivide(totalFrames);
        ave_errors_frame = ave_errors_frame.ipower(0.5).idivide(totalFrames);

        if (monitor.isCanceled()) {
            return;
        }

        int filespace_id = H5.H5Dget_space(ave_data_id);
        int type_id = H5.H5Dget_type(ave_data_id);
        long[] ave_start = (long[]) ConvertUtils.convert(currentFrame, long[].class);
        long[] ave_step = (long[]) ConvertUtils.convert(step, long[].class);
        long[] ave_count_data = new long[frames.length];
        Arrays.fill(ave_count_data, 1);
        int memspace_id = H5.H5Screate_simple(ave_step.length, ave_step, null);

        H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, ave_start, ave_step, ave_count_data,
                ave_step);
        H5.H5Dwrite(ave_data_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT,
                ave_frame.getBuffer());

        H5.H5Sclose(filespace_id);
        H5.H5Sclose(memspace_id);
        H5.H5Tclose(type_id);

        filespace_id = H5.H5Dget_space(ave_errors_id);
        type_id = H5.H5Dget_type(ave_errors_id);
        memspace_id = H5.H5Screate_simple(ave_step.length, ave_step, null);

        H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, ave_start, ave_step, ave_count_data,
                ave_step);
        H5.H5Dwrite(ave_errors_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT,
                ave_errors_frame.getBuffer());

        H5.H5Sclose(filespace_id);
        H5.H5Sclose(memspace_id);
        H5.H5Tclose(type_id);

        monitor.worked(1);
    }

    input_ids.setIDs(ave_group_id, ave_data_id);
    input_errors_ids.setIDs(ave_group_id, ave_errors_id);
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyBackgroundSubtraction.java

public void configure(int dim, long[] frames, int processing_group_id) throws HDF5Exception {
    bg_group_id = NcdNexusUtils.makegroup(processing_group_id, LazyBackgroundSubtraction.name, Nexus.DETECT);
    int type = HDF5Constants.H5T_NATIVE_FLOAT;
    bg_data_id = NcdNexusUtils.makedata(bg_group_id, "data", type, frames, true, "counts");
    type = HDF5Constants.H5T_NATIVE_DOUBLE;
    bg_errors_id = NcdNexusUtils.makedata(bg_group_id, "errors", type, frames, true, "counts");

    int fapl = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
    H5.H5Pset_fclose_degree(fapl, HDF5Constants.H5F_CLOSE_WEAK);
    background_file_handle = H5.H5Fopen(bgFile, HDF5Constants.H5F_ACC_RDONLY, fapl);
    H5.H5Pclose(fapl);/*from  w  w  w. j  a  v a 2s.co  m*/
    background_entry_group_id = H5.H5Gopen(background_file_handle, "entry1", HDF5Constants.H5P_DEFAULT);
    background_detector_group_id = H5.H5Gopen(background_entry_group_id, bgDetector, HDF5Constants.H5P_DEFAULT);
    background_input_data_id = H5.H5Dopen(background_detector_group_id, "data", HDF5Constants.H5P_DEFAULT);
    background_input_errors_id = H5.H5Dopen(background_detector_group_id, "errors", HDF5Constants.H5P_DEFAULT);
    bgIds = new DataSliceIdentifiers();
    bgIds.setIDs(background_detector_group_id, background_input_data_id);
    bgErrorsIds = new DataSliceIdentifiers();
    bgErrorsIds.setIDs(background_detector_group_id, background_input_errors_id);

    int bgRank = H5.H5Sget_simple_extent_ndims(bgIds.dataspace_id);
    bgFrames = new long[bgRank];
    H5.H5Sget_simple_extent_dims(bgIds.dataspace_id, bgFrames, null);
    bgFrames_int = (int[]) ConvertUtils.convert(bgFrames, int[].class);

    if (qaxis != null) {
        writeQaxisData(bgRank, bg_group_id);
    }
    writeNcdMetadata(bg_group_id);

    // Store background filename used in data reduction
    int str_type = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
    H5.H5Tset_size(str_type, bgFile.length());
    int metadata_id = NcdNexusUtils.makedata(bg_group_id, "filename", str_type, new long[] { 1 });

    int filespace_id = H5.H5Dget_space(metadata_id);
    int memspace_id = H5.H5Screate_simple(1, new long[] { 1 }, null);
    H5.H5Sselect_all(filespace_id);
    H5.H5Dwrite(metadata_id, str_type, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT, bgFile.getBytes());

    H5.H5Sclose(filespace_id);
    H5.H5Sclose(memspace_id);
    H5.H5Tclose(str_type);
    H5.H5Dclose(metadata_id);
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyBackgroundSubtraction.java

public void preprocess(int dim, long[] frames, int frameBatch) throws HDF5Exception {
    if (bgFrames != null) {
        if (!Arrays.equals(bgFrames, frames)) {
            ArrayList<Integer> bgAverageIndices = new ArrayList<Integer>();
            int bgRank = bgFrames.length;
            for (int i = (bgRank - dim - 1); i >= 0; i--) {
                int fi = i - bgRank + frames.length;
                if ((bgFrames[i] != 1) && (fi < 0 || (bgFrames[i] != frames[fi]))) {
                    bgAverageIndices.add(i + 1);
                    bgFrames[i] = 1;//  w w  w  . j  a  v a 2  s . c  o m
                }
            }
            if (bgAverageIndices.size() > 0) {
                LazyAverage lazyAverage = new LazyAverage();
                lazyAverage
                        .setAverageIndices(ArrayUtils.toPrimitive(bgAverageIndices.toArray(new Integer[] {})));
                lazyAverage.configure(dim, bgFrames_int, bg_group_id, frameBatch);
                lazyAverage.execute(bgIds, bgErrorsIds);
                if (bgIds != null) {
                    lazyAverage.writeNcdMetadata(bgIds.datagroup_id);
                    if (qaxis != null) {
                        lazyAverage.setQaxis(qaxis, qaxisUnit);
                        lazyAverage.writeQaxisData(bgFrames.length, bgIds.datagroup_id);
                    }
                }

                bgFrames_int = (int[]) ConvertUtils.convert(bgFrames, int[].class);
            }
        }

        // Make link to the background dataset and store background filename
        H5.H5Lcreate_external(bgFile, "/entry1/" + bgDetector + "/data", bg_group_id, "background",
                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
        H5.H5Lcreate_external(bgFile, "/entry1/" + bgDetector + "/errors", bg_group_id, "background_errors",
                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
    }
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyBackgroundSubtraction.java

public Dataset execute(int dim, Dataset data, Dataset bgData, SliceSettings sliceData, ILock lock)
        throws HDF5Exception {

    if (bgScaling != null) {
        bgData.imultiply(bgScaling);/*from w w w .  ja  v  a2s.  c  o m*/
        if (bgData.hasErrors()) {
            Serializable bgErrorBuffer = bgData.getErrorBuffer();
            if (bgErrorBuffer instanceof Dataset) {
                DoubleDataset bgError = new DoubleDataset((Dataset) bgErrorBuffer);
                bgError.imultiply(bgScaling * bgScaling);
                bgData.setErrorBuffer(bgError);
            }
        } else {
            DoubleDataset bgErrors = new DoubleDataset((double[]) bgData.getBuffer(), bgData.getShape());
            bgErrors.imultiply(bgScaling * bgScaling);
            bgData.setErrorBuffer(bgErrors);
        }
    }

    int[] dataShape = data.getShape();

    data = flattenGridData(data, dim);
    Dataset errors = data.getErrorBuffer();

    Dataset background = bgData.squeeze();

    BackgroundSubtraction bs = new BackgroundSubtraction();
    bs.setBackground(background);

    int[] flatShape = data.getShape();
    Object[] myobj = bs.process(data.getBuffer(), errors.getBuffer(), flatShape);
    float[] mydata = (float[]) myobj[0];
    double[] myerror = (double[]) myobj[1];

    Dataset myres = new FloatDataset(mydata, dataShape);
    myres.setErrorBuffer(myerror);

    try {
        lock.acquire();

        long[] frames = sliceData.getFrames();
        long[] start_pos = (long[]) ConvertUtils.convert(sliceData.getStart(), long[].class);
        int sliceDim = sliceData.getSliceDim();
        int sliceSize = sliceData.getSliceSize();

        long[] start = Arrays.copyOf(start_pos, frames.length);

        long[] block = Arrays.copyOf(frames, frames.length);
        Arrays.fill(block, 0, sliceData.getSliceDim(), 1);
        block[sliceDim] = Math.min(frames[sliceDim] - start_pos[sliceDim], sliceSize);

        long[] count = new long[frames.length];
        Arrays.fill(count, 1);

        int filespace_id = H5.H5Dget_space(bg_data_id);
        int type_id = H5.H5Dget_type(bg_data_id);
        int memspace_id = H5.H5Screate_simple(block.length, block, null);
        H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block);
        H5.H5Dwrite(bg_data_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT,
                myres.getBuffer());

        int err_filespace_id = H5.H5Dget_space(bg_errors_id);
        int err_type_id = H5.H5Dget_type(bg_errors_id);
        int err_memspace_id = H5.H5Screate_simple(block.length, block, null);
        H5.H5Sselect_hyperslab(err_filespace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block);
        H5.H5Dwrite(bg_errors_id, err_type_id, err_memspace_id, err_filespace_id, HDF5Constants.H5P_DEFAULT,
                myres.getError().getBuffer());

    } finally {
        lock.release();
    }

    return myres;

}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyDataReduction.java

public void writeQaxisData(int dim, int datagroup_id) throws HDF5Exception {
    long[] qaxisShape = (long[]) ConvertUtils.convert(qaxis.getShape(), long[].class);

    UnitFormat unitFormat = UnitFormat.getUCUMInstance();
    String units = unitFormat.format(qaxisUnit);
    int qaxis_id = NcdNexusUtils.makeaxis(datagroup_id, "q", HDF5Constants.H5T_NATIVE_FLOAT, qaxisShape,
            new int[] { dim }, 1, units);

    int filespace_id = H5.H5Dget_space(qaxis_id);
    int type_id = H5.H5Dget_type(qaxis_id);
    int memspace_id = H5.H5Screate_simple(qaxis.getRank(), qaxisShape, null);
    H5.H5Sselect_all(filespace_id);/*from   ww  w  .ja va2s  . co  m*/
    H5.H5Dwrite(qaxis_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT, qaxis.getBuffer());

    H5.H5Sclose(filespace_id);
    H5.H5Sclose(memspace_id);
    H5.H5Tclose(type_id);
    H5.H5Dclose(qaxis_id);

    if (qaxis.hasErrors()) {
        long[] qaxisShapeError = (long[]) ConvertUtils.convert(qaxis.getShape(), long[].class);
        int qaxis_error_id = NcdNexusUtils.makedata(datagroup_id, "q_errors", HDF5Constants.H5T_NATIVE_DOUBLE,
                qaxisShapeError, false, units);

        filespace_id = H5.H5Dget_space(qaxis_error_id);
        type_id = H5.H5Dget_type(qaxis_error_id);
        memspace_id = H5.H5Screate_simple(qaxis.getRank(), qaxisShapeError, null);
        H5.H5Sselect_all(filespace_id);
        H5.H5Dwrite(qaxis_error_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT,
                qaxis.getError().getBuffer());

        H5.H5Sclose(filespace_id);
        H5.H5Sclose(memspace_id);
        H5.H5Tclose(type_id);
        H5.H5Dclose(qaxis_error_id);
    }

}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyDetectorResponse.java

public void configure(int dim, long[] frames, int entry_group_id, int processing_group_id)
        throws HDF5Exception {

    dr_group_id = NcdNexusUtils.makegroup(processing_group_id, LazyDetectorResponse.name, Nexus.DETECT);
    int type = HDF5Constants.H5T_NATIVE_FLOAT;
    dr_data_id = NcdNexusUtils.makedata(dr_group_id, "data", type, frames, true, "counts");
    type = HDF5Constants.H5T_NATIVE_DOUBLE;
    dr_errors_id = NcdNexusUtils.makedata(dr_group_id, "errors", type, frames, true, "counts");

    int fapl = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
    H5.H5Pset_fclose_degree(fapl, HDF5Constants.H5F_CLOSE_WEAK);
    int nxsfile_handle = H5.H5Fopen(drFile, HDF5Constants.H5F_ACC_RDONLY, fapl);
    H5.H5Pclose(fapl);/*w ww .ja va  2  s .c om*/

    int dr_entry_group_id = H5.H5Gopen(nxsfile_handle, "entry1", HDF5Constants.H5P_DEFAULT);
    int dr_instrument_group_id = H5.H5Gopen(dr_entry_group_id, "instrument", HDF5Constants.H5P_DEFAULT);
    int dr_detector_group_id = H5.H5Gopen(dr_instrument_group_id, detector, HDF5Constants.H5P_DEFAULT);

    int input_data_id = H5.H5Dopen(dr_detector_group_id, "data", HDF5Constants.H5P_DEFAULT);
    int input_dataspace_id = H5.H5Dget_space(input_data_id);
    int input_datatype_id = H5.H5Dget_type(input_data_id);
    int input_dataclass_id = H5.H5Tget_class(input_datatype_id);
    int input_datasize_id = H5.H5Tget_size(input_datatype_id);

    int rank = H5.H5Sget_simple_extent_ndims(input_dataspace_id);
    int dtype = HDF5Utils.getDtype(input_dataclass_id, input_datasize_id);

    long[] drFrames = new long[rank];
    H5.H5Sget_simple_extent_dims(input_dataspace_id, drFrames, null);
    int memspace_id = H5.H5Screate_simple(rank, drFrames, null);

    int[] drFrames_int = (int[]) ConvertUtils.convert(drFrames, int[].class);
    drData = DatasetFactory.zeros(drFrames_int, dtype);

    if ((input_data_id >= 0) && (input_dataspace_id >= 0) && (memspace_id >= 0)) {
        H5.H5Dread(input_data_id, input_datatype_id, memspace_id, input_dataspace_id, HDF5Constants.H5P_DEFAULT,
                drData.getBuffer());
    }

    H5.H5Sclose(memspace_id);
    H5.H5Sclose(input_dataspace_id);
    H5.H5Tclose(input_datatype_id);
    H5.H5Dclose(input_data_id);
    H5.H5Gclose(dr_detector_group_id);
    H5.H5Gclose(dr_instrument_group_id);
    H5.H5Gclose(dr_entry_group_id);
    H5.H5Fclose(nxsfile_handle);

    writeNcdMetadata(dr_group_id);
}

From source file:uk.ac.diamond.scisoft.ncd.reduction.LazyDetectorResponse.java

public Dataset execute(int dim, Dataset data, SliceSettings sliceData, ILock lock) throws HDF5Exception {

    DetectorResponse dr = new DetectorResponse();
    int[] dataShape = data.getShape();

    data = flattenGridData(data, dim);/*from  ww  w.  j  a v  a 2 s . com*/
    Dataset errors = data.getErrorBuffer();
    Dataset response = drData.squeeze();
    dr.setResponse(response);

    if (data.getRank() != response.getRank() + 1) {
        throw new IllegalArgumentException("response of wrong dimensionality");
    }

    int[] flatShape = data.getShape();
    Object[] myobj = dr.process(data.getBuffer(), errors.getBuffer(), flatShape[0], flatShape);
    float[] mydata = (float[]) myobj[0];
    double[] myerrors = (double[]) myobj[1];

    Dataset myres = new FloatDataset(mydata, dataShape);
    myres.setErrorBuffer(new DoubleDataset(myerrors, dataShape));

    try {
        lock.acquire();

        long[] frames = sliceData.getFrames();
        long[] start_pos = (long[]) ConvertUtils.convert(sliceData.getStart(), long[].class);
        int sliceDim = sliceData.getSliceDim();
        int sliceSize = sliceData.getSliceSize();

        long[] start = Arrays.copyOf(start_pos, frames.length);

        long[] block = Arrays.copyOf(frames, frames.length);
        Arrays.fill(block, 0, sliceData.getSliceDim(), 1);
        block[sliceDim] = Math.min(frames[sliceDim] - start_pos[sliceDim], sliceSize);

        long[] count = new long[frames.length];
        Arrays.fill(count, 1);

        int filespace_id = H5.H5Dget_space(dr_data_id);
        int type_id = H5.H5Dget_type(dr_data_id);
        int memspace_id = H5.H5Screate_simple(block.length, block, null);
        H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block);
        H5.H5Dwrite(dr_data_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT, mydata);

        filespace_id = H5.H5Dget_space(dr_errors_id);
        type_id = H5.H5Dget_type(dr_errors_id);
        memspace_id = H5.H5Screate_simple(block.length, block, null);
        H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block);
        H5.H5Dwrite(dr_errors_id, type_id, memspace_id, filespace_id, HDF5Constants.H5P_DEFAULT,
                myres.getError().getBuffer());
    } finally {
        lock.release();
    }

    return myres;
}