/* * Copyright (c) 2012 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.dawnsci.analysis.dataset.roi; import org.eclipse.dawnsci.analysis.dataset.roi.LinearROI; import org.eclipse.dawnsci.analysis.dataset.roi.ROISliceUtils; import org.eclipse.dawnsci.analysis.dataset.roi.RectangularROI; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.Slice; import org.junit.Assert; import org.junit.Test; public class ROISliceTest { @Test public void testNDSlices() throws Exception { Dataset input = DatasetFactory.ones(new int[] {10,20,30,40}, Dataset.FLOAT32); RectangularROI roi = new RectangularROI(10, 10, 5, 5, 0); Slice[] slices = new Slice[input.getRank()]; slices[0] = new Slice(0, 1); int[] order = new int[] {3,2,1,0}; Dataset output = ROISliceUtils.getDataset(input,roi, slices, new int[]{order[0],order[1]}, 1, null); output.squeeze(); int[] shape = output.getShape(); Assert.assertArrayEquals(new int[]{20, 5,5}, shape); output = ROISliceUtils.getDataset(input,roi, slices, new int[]{order[0],order[1]}, 1, null); Dataset mean; if (order[0] > order[1]) mean = output.mean(order[0]).mean(order[1]); else mean = output.mean(order[1]).mean(order[0]); mean.squeeze(); shape = mean.getShape(); Assert.assertEquals(20, shape[0]); } @Test public void getAxisDatasetTrapzSumTestNDSlices() throws Exception { //TODO test different dimensions //Create ND array and axes Dataset input = DatasetFactory.ones(new int[] {10,20,30,40}, Dataset.FLOAT32); // Dataset axis0 = DatasetFactory.createLinearSpace(0, 9, 10, Dataset.FLOAT32); // Dataset axis1 = DatasetFactory.createLinearSpace(0, 19, 20, Dataset.FLOAT32); // Dataset axis2 = DatasetFactory.createLinearSpace(0, 29, 30, Dataset.FLOAT32); Dataset axis3 = DatasetFactory.createLinearSpace(0, 39, 40, Dataset.FLOAT32); //Create ROI and slices RectangularROI roi = new RectangularROI(10, 10, 5, 5, 0); Slice[] slices = new Slice[input.getRank()]; //Test basic slice from 0-1 slices[0] = new Slice(0, 1); int[] order = new int[] {3,2,1,0}; Dataset out0 = ROISliceUtils.getAxisDatasetTrapzSum(input, axis3,roi, slices, order[0], 1, null); //Dataset out0 = (Dataset)ROISliceUtils.getAxisDatasetTrapzSum(axis0, input, roi, 0); Assert.assertArrayEquals(new int[]{20, 30},out0.getShape()); Assert.assertEquals(5.0, out0.getDouble(0, 0),0); //Test basic slice from 3-4 slices[0] = new Slice(3, 4); out0 = ROISliceUtils.getAxisDatasetTrapzSum(input, axis3,roi, slices, order[0], 1, null); Assert.assertArrayEquals(new int[]{20, 30},out0.getShape()); Assert.assertEquals(5.0, out0.getDouble(0, 0),0); //Test basic slice from 3-4, reduced range slices[0] = new Slice(3, 4); slices[2] = new Slice(5, 15); out0 = ROISliceUtils.getAxisDatasetTrapzSum(input, axis3,roi, slices, order[0], 1, null); Assert.assertArrayEquals(new int[]{20, 10},out0.getShape()); Assert.assertEquals(5.0, out0.getDouble(0, 0),0); } @Test public void getDatasetLineROINDSlices() throws Exception { Dataset input = DatasetFactory.ones(new int[] {10,20,30,40}, Dataset.FLOAT32); // Dataset axis0 = DatasetFactory.createLinearSpace(0, 9, 10, Dataset.FLOAT32); // Dataset axis1 = DatasetFactory.createLinearSpace(0, 19, 20, Dataset.FLOAT32); // Dataset axis2 = DatasetFactory.createLinearSpace(0, 29, 30, Dataset.FLOAT32); // Dataset axis3 = DatasetFactory.createLinearSpace(0, 39, 40, Dataset.FLOAT32); LinearROI roi = new LinearROI(new double[]{2.0,2.0}, new double[]{15.0,20.0}); Slice[] slices = new Slice[input.getRank()]; slices[0] = new Slice(0, 1); int[] order = new int[] {3,2,1,0}; Dataset output = (Dataset) ROISliceUtils.getDataset(input, roi,slices, new int[]{order[0],order[1]},1, null); int[] shape = output.getShape(); Assert.assertEquals(23,shape[0],0); Assert.assertEquals(20,shape[1],0); output = (Dataset) ROISliceUtils.getDataset(input, roi,slices, new int[]{order[1],order[0]},1, null); shape = output.getShape(); Assert.assertEquals(23,shape[0],0); Assert.assertEquals(20,shape[1],0); output = (Dataset) ROISliceUtils.getDataset(input, roi,slices, new int[]{order[0],order[2]},1, null); shape = output.getShape(); Assert.assertEquals(23,shape[0],0); Assert.assertEquals(30,shape[1],0); } }