/*- * 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 static org.junit.Assert.assertArrayEquals; import org.eclipse.dawnsci.analysis.api.metadata.IDiffractionMetadata; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.DoubleDataset; import org.eclipse.january.dataset.IndexIterator; import org.junit.Test; public class IntensityCorrectionsTest extends AbstractPixelIntegrationTestBase { @Test public void testSolidAngle() { IDiffractionMetadata md = getDiffractionMetadata(); int[] shape = new int[]{2048,2048}; DoubleDataset correctionArray = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray.iadd(1); Dataset tth = PixelIntegrationUtils.generate2ThetaArrayRadians(md); long start = System.currentTimeMillis(); PixelIntegrationUtils.solidAngleCorrection(correctionArray, tth); long stop = System.currentTimeMillis(); System.out.println(stop-start); DoubleDataset correctionArray2 = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray2.iadd(1); start = System.currentTimeMillis(); IndexIterator it = correctionArray2.getIterator(); while (it.hasNext()) correctionArray2.setAbs(it.index, PixelIntegrationUtils.solidAngleCorrection(correctionArray2.getAbs(it.index), tth.getElementDoubleAbs(it.index))); stop = System.currentTimeMillis(); System.out.println(stop-start); assertArrayEquals(correctionArray.getData(), correctionArray2.getData(), 0); } @Test public void testPolarisation() { IDiffractionMetadata md = getDiffractionMetadata(); int[] shape = new int[]{2048,2048}; DoubleDataset correctionArray = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray.iadd(1); Dataset tth = PixelIntegrationUtils.generate2ThetaArrayRadians(md); Dataset angle = PixelIntegrationUtils.generateAzimuthalArray(md, true); long start = System.currentTimeMillis(); PixelIntegrationUtils.polarisationCorrection(correctionArray, tth, angle, 0.9); long stop = System.currentTimeMillis(); System.out.println(stop-start); System.out.println(correctionArray.getAbs(0)); DoubleDataset correctionArray2 = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray2.iadd(1); start = System.currentTimeMillis(); IndexIterator it = correctionArray.getIterator(); double val = 0; while (it.hasNext()) { val = PixelIntegrationUtils.polarisationCorrection(correctionArray2.getAbs(it.index), tth.getElementDoubleAbs(it.index), angle.getElementDoubleAbs(it.index), 0.9); correctionArray2.setAbs(it.index, val); } stop = System.currentTimeMillis(); assertArrayEquals(correctionArray.getData(), correctionArray2.getData(), 1e-12); } @Test public void testTransmission() { IDiffractionMetadata md = getDiffractionMetadata(); int[] shape = new int[]{2048,2048}; DoubleDataset correctionArray = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray.iadd(1); Dataset tth = PixelIntegrationUtils.generate2ThetaArrayRadians(md); long start = System.currentTimeMillis(); PixelIntegrationUtils.detectorTranmissionCorrection(correctionArray, tth, 0.17); long stop = System.currentTimeMillis(); System.out.println(stop-start); DoubleDataset correctionArray2 = DatasetFactory.zeros(DoubleDataset.class, shape); correctionArray2.iadd(1); start = System.currentTimeMillis(); IndexIterator it = correctionArray2.getIterator(); while (it.hasNext()) correctionArray2.setAbs(it.index, PixelIntegrationUtils.detectorTranmissionCorrection(correctionArray2.getAbs(it.index), tth.getElementDoubleAbs(it.index),0.17)); stop = System.currentTimeMillis(); System.out.println(stop-start); assertArrayEquals(correctionArray.getData(), correctionArray2.getData(), 0); } }