List of usage examples for org.apache.commons.beanutils ConvertUtils convert
public static Object convert(String values[], Class clazz)
Convert an array of specified values to an array of objects of the specified class (if possible).
For more details see ConvertUtilsBean
.
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; }