/*- * Copyright 2015 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 uk.ac.diamond.scisoft.analysis.diffraction.powder; import java.util.List; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.IDataset; import org.eclipse.january.dataset.Maths; import org.eclipse.january.dataset.Slice; import org.eclipse.dawnsci.analysis.api.metadata.IDiffractionMetadata; import org.junit.Assert; import org.junit.Test; import uk.ac.diamond.scisoft.analysis.roi.XAxis; public class Compare2Dto1DIntegrationTest extends AbstractPixelIntegrationTestBase { @Test public void compareNonSplitting2Dto1D() { IDataset data = getData(); if (data == null) { Assert.fail("Could not load test data"); return; } IDiffractionMetadata meta = getDiffractionMetadata(); PixelIntegrationBean bean = new PixelIntegrationBean(); bean.setAzimuthalIntegration(true); bean.setUsePixelSplitting(false); bean.setNumberOfBinsRadial(2000); bean.setAzimuthalRange(new double[]{0,90}); bean.setxAxis(XAxis.Q); PixelIntegrationCache info = new PixelIntegrationCache(meta, bean); List<Dataset> out1D = PixelIntegration.integrate(data, null, info); bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(false); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{0,360}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D = PixelIntegration.integrate(data, null, info); Dataset q1 = out1D.get(0); Dataset q2 = out2D.get(0); Dataset d1 = out1D.get(1); Dataset d2 = out2D.get(1); Dataset d21 = d2.getSlice(new Slice(1),null); d21.squeeze(); Assert.assertTrue(q1.equals(q2)); Assert.assertTrue(d21.equals(d1)); bean = new PixelIntegrationBean(); bean.setAzimuthalIntegration(true); bean.setUsePixelSplitting(false); bean.setNumberOfBinsRadial(2000); bean.setAzimuthalRange(new double[]{270,360}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); out1D = PixelIntegration.integrate(data, null, info); q1 = out1D.get(0); d1 = out1D.get(1); Dataset d23 = d2.getSlice(new Slice(3,4),null); d23.squeeze(); Assert.assertTrue(q1.equals(q2)); Assert.assertTrue(d23.equals(d1)); } @Test public void compareSplitting2Dto1D() { IDataset data = getData(); if (data == null) { Assert.fail("Could not load test data"); return; } IDiffractionMetadata meta = getDiffractionMetadata(); PixelIntegrationBean bean = new PixelIntegrationBean(); bean.setAzimuthalIntegration(true); bean.setUsePixelSplitting(true); bean.setNumberOfBinsRadial(2000); bean.setAzimuthalRange(new double[]{0,90}); bean.setxAxis(XAxis.Q); PixelIntegrationCache info = new PixelIntegrationCache(meta, bean); List<Dataset> out1D = PixelIntegration.integrate(data, null, info); bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(true); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{0,360}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D = PixelIntegration.integrate(data, null, info); Dataset q1 = out1D.get(0); Dataset q2 = out2D.get(0); Dataset d1 = out1D.get(1); Dataset d2 = out2D.get(1); Dataset d21 = d2.getSlice(new Slice(1),null); d21.squeeze(); Assert.assertTrue(q1.equals(q2)); Dataset max = Maths.subtract(d21, d1); double test = max.max().doubleValue(); Assert.assertTrue(test < 0.0000000001); bean = new PixelIntegrationBean(); bean.setAzimuthalIntegration(true); bean.setUsePixelSplitting(true); bean.setNumberOfBinsRadial(2000); bean.setAzimuthalRange(new double[]{270,360}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); out1D = PixelIntegration.integrate(data, null, info); q1 = out1D.get(0); d1 = out1D.get(1); Dataset d23 = d2.getSlice(new Slice(3,4),null); d23.squeeze(); Assert.assertTrue(q1.equals(q2)); max = Maths.subtract(d23, d1); test = max.max().doubleValue(); Assert.assertTrue(max.max().doubleValue() < 100); } @Test public void compareSplitting2Dto2D() { IDataset data = getData(); if (data == null) { Assert.fail("Could not load test data"); return; } IDiffractionMetadata meta = getDiffractionMetadata(); PixelIntegrationBean bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(true); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{0,360}); bean.setxAxis(XAxis.Q); PixelIntegrationCache info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D = PixelIntegration.integrate(data, null, info); bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(true); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{90,450}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D90 = PixelIntegration.integrate(data, null, info); Dataset q1 = out2D.get(0); Dataset q2 = out2D90.get(0); Assert.assertTrue(q1.equals(q2)); Dataset d12 = out2D.get(1).getSlice(new Slice(1,2),null).squeeze(); Dataset d01 = out2D90.get(1).getSlice(new Slice(1),null).squeeze(); Dataset max = Maths.subtract(d12, d01); //not identical due to move of discontinuity double test = max.max().doubleValue(); Assert.assertTrue(test < 110); } @Test public void compareNonSplitting2Dto2D() { IDataset data = getData(); if (data == null) { Assert.fail("Could not load test data"); return; } IDiffractionMetadata meta = getDiffractionMetadata(); PixelIntegrationBean bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(false); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{0,360}); bean.setxAxis(XAxis.Q); PixelIntegrationCache info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D = PixelIntegration.integrate(data, null, info); bean = new PixelIntegrationBean(); bean.setTo1D(false); bean.setUsePixelSplitting(false); bean.setNumberOfBinsRadial(2000); bean.setNumberOfBinsAzimuthal(4); bean.setAzimuthalRange(new double[]{90,450}); bean.setxAxis(XAxis.Q); info = new PixelIntegrationCache(meta, bean); List<Dataset> out2D90 = PixelIntegration.integrate(data, null, info); Dataset q1 = out2D.get(0); Dataset q2 = out2D90.get(0); Assert.assertTrue(q1.equals(q2)); Dataset d12 = out2D.get(1).getSlice(new Slice(1,2),null).squeeze(); Dataset d01 = out2D90.get(1).getSlice(new Slice(1),null).squeeze(); Assert.assertTrue(d12.equals(d01)); } }