Example usage for org.apache.commons.math3.util MultidimensionalCounter iterator

List of usage examples for org.apache.commons.math3.util MultidimensionalCounter iterator

Introduction

In this page you can find the example usage for org.apache.commons.math3.util MultidimensionalCounter iterator.

Prototype

public Iterator iterator() 

Source Link

Document

Create an iterator over this counter.

Usage

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 };
}