/* * 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 uk.ac.diamond.scisoft.analysis.io; import org.apache.commons.lang.SerializationUtils; import org.eclipse.january.dataset.Dataset; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import uk.ac.diamond.scisoft.analysis.IOTestUtils; /** * */ public class CBFLoaderTest { static String testpath = null; static String TestFileFolder; @BeforeClass static public void setUpClass() { TestFileFolder = IOTestUtils.getGDALargeTestFilesLocation(); TestFileFolder += "CBFLoaderTest/"; testpath = TestFileFolder; if (testpath.matches("^/[a-zA-Z]:.*")) // Windows path testpath = testpath.substring(1); // strip leading slash } static String testfile1 = null; /** * * * @throws Exception if the file could not be loaded */ @Test public void testExistingFile() throws Exception { new CBFLoader(testpath + "F6_1_001.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile1() throws Exception { new CBFLoader(testpath + "adscconverted_flat_orig.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile2() throws Exception { new CBFLoader(testpath + "converted_flat_orig.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile3() throws Exception { new CBFLoader(testpath + "mb_LP_1_001_orig.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile4() throws Exception { new CBFLoader(testpath + "F6_1_001_xReverse.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile5() throws Exception { new CBFLoader(testpath + "F6_1_001_yReverse.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile6() throws Exception { new CBFLoader(testpath + "F6_1_001_bothReverse.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile7() throws Exception { new CBFLoader(testpath + "F6_1_001_transpose.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile8() throws Exception { new CBFLoader(testpath + "xtal5e_1_0010.cbf").loadFile(); } /** * * * @throws Exception if the file could not be loaded */ // @Test // public void testExampleFile81() throws Exception { // ScanFileHolder sfhLoad = new ScanFileHolder(); // sfhLoad.load(new CBFLoader(testpath + "ins_c_9_1999.cbf")); // } /** * * * @throws Exception if the file could not be loaded */ @Test public void testExampleFile9() throws Exception { new CBFLoader(testpath + "insulin_pilatus6mconverted_orig.cbf").loadFile(); } /** * Test Loading * * @throws Exception if the loading fails */ @Test public void testLoaderFactory() throws Exception { if (LoaderFactory.getData(testpath + "F6_1_001_bothReverse.cbf", null)==null) throw new Exception(); if (LoaderFactory.getData(testpath + "xtal5e_1_0010.cbf", null)==null) throw new Exception(); if (LoaderFactory.getData(testpath + "insulin_pilatus6mconverted_orig.cbf", null)==null) throw new Exception(); } @Test public void testSerializability() throws Exception { DataHolder loader = new CBFLoader(testpath + "xtal5e_1_0010.cbf").loadFile(); Dataset data = loader.getDataset(0); SerializationUtils.serialize(data.getMetadata()); } private int[] iterateAllOld(int xLength, int yLength, boolean isRowsX, boolean xIncreasing, boolean yIncreasing) { int index = 0; int position = 0; int numPixels = xLength*yLength; int[] array = new int[numPixels]; for (int j = 0; j < yLength; j++) { for (int i = 0; i < xLength; i++) { if (isRowsX) { if (xIncreasing) { if (!yIncreasing) { // note that image in GDA is plotted so Y increases from top to bottom index = position; // top left x increasing (same as j*xLength + i) } else { index = ((yLength - 1 - j) * xLength + i); // bottom left } } else { if (!yIncreasing) { index = j * xLength + (xLength - 1 - i); // top right x decreasing } else { index = numPixels - position - 1; // bottom right } } } else { if (xIncreasing) { if (!yIncreasing) { index = i * yLength + j; } else { index = (xLength - 1 - i) * yLength + j; } } else { if (!yIncreasing) { index = i * yLength + (yLength - 1 - j); } else { index = (xLength - 1 - i) * yLength + (yLength - 1 - j); } } } array[index] = position++; } } return array; } private int[] iterateAllNew(int xLength, int yLength, boolean isRowsX, boolean xIncreasing, boolean yIncreasing) { int numPixels = xLength*yLength; int[] array = new int[numPixels]; int stride1; // stride is change in position on n-th dim int stride2; int start; // start is offset in position if (!isRowsX) { // swap row and column directions boolean b = yIncreasing; yIncreasing = !xIncreasing; xIncreasing = !b; } if (!yIncreasing) { // note that image in GDA is plotted so Y increases from top to bottom stride1 = xLength; start = 0; } else { stride1 = -xLength; start = xLength*yLength - xLength; } if (xIncreasing) { stride2 = 1; } else { stride2 = -1; start += xLength - 1; } int rows; int cols; int rstep; int cstep; if (isRowsX) { rows = yLength; cols = xLength; rstep = stride1; cstep = stride2; } else { rows = xLength; cols = yLength; rstep = stride2; cstep = stride1; } int index = 0; int lposition = start; for (int j = 0; j < rows; j++) { int position = lposition; for (int i = 0; i < cols; i++) { array[index++] = position; position += cstep; } lposition += rstep; } return array; } @Test public void testIteration() { int x = 7; int y = 3; int[] oArray, nArray; boolean[] values = new boolean[] {true, false}; for (boolean a : values) { a = !a; for (boolean b : values) { for (boolean c : values) { c = !c; oArray = iterateAllOld(x, y, a, b, c); // System.err.printf("%b,%b,%b: %s\n", a, b, c, Arrays.toString(oArray)); nArray = iterateAllNew(x, y, a, b, c); // System.err.printf("%b,%b,%b: %s\n", a, b, c, Arrays.toString(nArray)); for (int i = 0; i < x*y; i++) { Assert.assertEquals("Arrays (" + a + "," + b + "," + c + ") do not match at " + i, oArray[i], nArray[i]); } } } } } }