List of usage examples for org.apache.commons.math3.util MultidimensionalCounter iterator
public Iterator iterator()
From source file:uk.ac.diamond.scisoft.ncd.passerelle.actors.core.NcdProcessingObjectTransformer.java
@Override protected void process(ActorContext ctxt, ProcessRequest request, ProcessResponse response) throws ProcessingException { ManagedMessage receivedMsg = request.getMessage(input); try {//from www. ja v a2 s.c o m NcdProcessingObject receivedObject = (NcdProcessingObject) receivedMsg.getBodyContent(); inputGroupID = receivedObject.getInputGroupID(); inputDataID = receivedObject.getInputDataID(); inputErrorsID = receivedObject.getInputErrorsID(); lock = receivedObject.getLock(); lock.lock(); configureActorParameters(); int[] resultShape = getResultDataShape(); MultidimensionalCounter frameCounter = new MultidimensionalCounter(selectedShape); Iterator iter = frameCounter.iterator(); Dataset data = DatasetFactory.zeros(resultShape, Dataset.FLOAT32); data.setName(datasetName); Dataset errors = null; if (hasErrors) { errors = DatasetFactory.zeros(resultShape, Dataset.FLOAT64); } while (iter.hasNext()) { iter.next(); int[] frame = iter.getCounts(); int[] gridFrame = new int[resultShape.length]; Arrays.fill(gridFrame, 0); for (int i = 0; i < selectedShape.length; i++) { gridFrame[i] = indexList.get(i)[frame[i]]; } SliceSettings sliceData = new SliceSettings(frames, frames.length - dimension - 1, 1); sliceData.setStart(gridFrame); DataSliceIdentifiers ids = new DataSliceIdentifiers(); ids.setIDs(inputGroupID, inputDataID); Dataset value = NcdNexusUtils.sliceInputData(sliceData, ids); int[] start = Arrays.copyOf(frame, resultShape.length); int[] stop = Arrays.copyOf(resultShape, resultShape.length); for (int i = 0; i < selectedShape.length; i++) { stop[i] = start[i] + 1; } data.setSlice(value, start, stop, null); if (hasErrors && errors != null) { DataSliceIdentifiers errors_ids = new DataSliceIdentifiers(); errors_ids.setIDs(inputGroupID, inputErrorsID); Dataset error = NcdNexusUtils.sliceInputData(sliceData, errors_ids); errors.setSlice(error, start, stop, null); } } if (hasErrors && errors != null) { data.setErrorBuffer(errors); } ManagedMessage outputMsg = createMessageFromCauses(receivedMsg); DataMessageComponent obj = new DataMessageComponent(); obj.addList(datasetName, data); outputMsg.setBodyContent(obj, "application/octet-stream"); response.addOutputMessage(output, outputMsg); } catch (MessageException e) { throw new ProcessingException(ErrorCode.ACTOR_EXECUTION_ERROR, e.getMessage(), this, e); } catch (HDF5Exception e) { throw new ProcessingException(ErrorCode.ACTOR_EXECUTION_ERROR, e.getMessage(), this, e); } finally { if (lock != null && lock.isHeldByCurrentThread()) { lock.unlock(); } } }
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);//from ww w .ja v a 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);/*from w ww .j a va 2 s. co 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.LazySelection.java
public DataSliceIdentifiers[] execute(int dim, DataSliceIdentifiers ids, DataSliceIdentifiers error_ids, int output_group_id) 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; }/* w w w . ja v a 2 s. c om*/ long[] framesTotal = (long[]) ConvertUtils.convert(ArrayUtils.addAll(datDimMake, imageSize), long[].class); 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); int dtype = HDF5Utils.getDtype(ids.dataclass_id, ids.datasize_id); Dataset data = DatasetFactory.zeros(block_int, dtype); int output_data_id = NcdNexusUtils.makedata(output_group_id, "data", ids.datatype_id, framesTotal, true, "counts"); int output_dataspace_id = H5.H5Dget_space(output_data_id); Dataset errors = DatasetFactory.zeros(block_int, dtype); int errors_datatype_id = H5.H5Tcopy(HDF5Constants.H5T_NATIVE_DOUBLE); int errors_data_id = NcdNexusUtils.makedata(output_group_id, "errors", errors_datatype_id, framesTotal, true, "counts"); int errors_dataspace_id = H5.H5Dget_space(errors_data_id); MultidimensionalCounter frameCounter = new MultidimensionalCounter(datDimMake); Iterator iter = frameCounter.iterator(); while (iter.hasNext()) { iter.next(); long[] frame = (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) frame[i]]; } long[] start = new long[frames.length]; start = Arrays.copyOf(gridFrame, frames.length); long[] writePosition = new long[frames.length]; writePosition = Arrays.copyOf(frame, 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()); int errors_memspace_id = H5.H5Screate_simple(block.length, block, null); if (error_ids.dataset_id >= 0) { H5.H5Sselect_hyperslab(error_ids.dataspace_id, HDF5Constants.H5S_SELECT_SET, start, block, count, block); H5.H5Dread(error_ids.dataset_id, error_ids.datatype_id, errors_memspace_id, error_ids.dataspace_id, HDF5Constants.H5P_DEFAULT, errors.getBuffer()); data.setError(errors); } else { Object obj = DatasetUtils.createJavaArray(data); Dataset error = DatasetFactory.createFromObject(obj); error.ipower(0.5); data.setError(error); } H5.H5Sselect_hyperslab(output_dataspace_id, HDF5Constants.H5S_SELECT_SET, writePosition, block, count, block); H5.H5Dwrite(output_data_id, ids.datatype_id, memspace_id, output_dataspace_id, HDF5Constants.H5P_DEFAULT, data.getBuffer()); H5.H5Sselect_hyperslab(errors_dataspace_id, HDF5Constants.H5S_SELECT_SET, writePosition, block, count, block); H5.H5Dwrite(errors_data_id, errors_datatype_id, errors_memspace_id, errors_dataspace_id, HDF5Constants.H5P_DEFAULT, data.getError().getBuffer()); if (monitor.isCanceled()) { return null; } monitor.worked(1); } DataSliceIdentifiers outputDataIds = new DataSliceIdentifiers(); outputDataIds.setIDs(output_group_id, output_data_id); DataSliceIdentifiers outputErrorsIds = new DataSliceIdentifiers(); outputErrorsIds.setIDs(output_group_id, errors_data_id); return new DataSliceIdentifiers[] { outputDataIds, outputErrorsIds }; }