/*
* 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 static org.junit.Assert.assertEquals;
import org.eclipse.dawnsci.analysis.api.io.IDataHolder;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.dataset.DatasetUtils;
import org.eclipse.january.dataset.IDataset;
import org.eclipse.january.dataset.IntegerDataset;
import org.eclipse.january.metadata.IMetadata;
import org.junit.BeforeClass;
import org.junit.Test;
import uk.ac.diamond.scisoft.analysis.IOTestUtils;
public class PilatusEdfLoaderTest {
static String testScratchDirectoryName = null;
final static String testFileFolder = "testfiles/gda/analysis/io/EdfLoaderTest/";
static String TestFileFolder;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
TestFileFolder = IOTestUtils.getGDALargeTestFilesLocation();
testScratchDirectoryName = IOTestUtils.generateDirectorynameFromClassname(PilatusEdfLoaderTest.class.getCanonicalName());
IOTestUtils.makeScratchDirectory(testScratchDirectoryName);
}
@Test
public void testUnsignedShortFiles() throws Exception {
testShortFile(TestFileFolder + "/EDFLoaderTest/billeA_4201_EF_XRD_5000.edf");
testShortFile(TestFileFolder + "/EDFLoaderTest/billeA_4201_EF_XRD_5873.edf");
}
private void testShortFile(final String filePath) throws Exception {
IDataHolder dataHolder = LoaderFactory.getData(filePath, null);
if (dataHolder.toLazyMap().size()!=1) throw new Exception("Should only be one data set");
final Dataset set = DatasetUtils.sliceAndConvertLazyDataset(dataHolder.toLazyMap().values().iterator().next());
final int[] shape = set.getShape();
if (shape[0]!=2048) throw new Exception("Wrong size of dimension 0, should be 2048!");
if (shape[1]!=2048) throw new Exception("Wrong size of dimension 1, should be 2048!");
}
@Test
public void testBoundsOnIntegerDataSet() throws Exception {
IDataHolder dataHolder = LoaderFactory.getData(testFileFolder+"diff6105.edf", null);
IntegerDataset dataSet = (IntegerDataset)dataHolder.getDataset(PilatusEdfLoader.DATA_NAME);
final int min = dataSet.min().intValue();
final int max = dataSet.max().intValue();
final int[] data = dataSet.getData();
int realMin = Integer.MAX_VALUE;
int realMax = Integer.MIN_VALUE;
for (int i = 0; i < data.length; i++) {
realMin = Math.min(realMin, data[i]);
realMax = Math.max(realMax, data[i]);
}
if (min!=realMin) throw new Exception("Maths incorrect in IntegerDataset incorrect minimum calculated!");
if (max!=realMax) throw new Exception("Maths incorrect in IntegerDataset incorrect maximum calculated!");
}
@Test
public void testUseLoaderFactory() throws Exception {
IDataHolder dataHolder = LoaderFactory.getData(testFileFolder+"diff6105.edf", null);
IDataset data = dataHolder.getDataset(PilatusEdfLoader.DATA_NAME);
assertEquals(data.getDouble(0, 0), 98, 0.0);
assertEquals(data.getDouble(2047, 2047), 199, 0.0);
}
@Test
public void testUseMetaDataLoaderFactory() throws Exception {
IMetadata meta = LoaderFactory.getMetadata(testFileFolder+"diff6105.edf", null);
assertEquals(meta.getMetaValue("HeaderID"), "EH:000001:000000:000000");
assertEquals(meta.getMetaValue("Image"), "1");
assertEquals(meta.getMetaValue("ByteOrder"), "LowByteFirst");
assertEquals(meta.getMetaValue("DataType"), "UnsignedShort");
assertEquals(meta.getMetaValue("Dim_1"), "2048");
assertEquals(meta.getMetaValue("Dim_2"), "2048");
assertEquals(meta.getMetaValue("Size"), "8388608");
assertEquals(meta.getMetaValue("time"), "Thu Jun 18 04:24:25 2009");
assertEquals(meta.getMetaValue("count_time"), "Na");
assertEquals(meta.getMetaValue("title"), "ESPIA FRELON Image 6105");
assertEquals(meta.getMetaValue("run"), "6105");
}
@Test
public void loadDiff6105() throws Exception {
PilatusEdfLoader edfLoader = new PilatusEdfLoader(testFileFolder+"diff6105.edf");
DataHolder dataHolder = edfLoader.loadFile();
assertEquals(edfLoader.getMetadata().getMetaValue("HeaderID"), "EH:000001:000000:000000");
assertEquals(edfLoader.getMetadata().getMetaValue("Image"), "1");
assertEquals(edfLoader.getMetadata().getMetaValue("ByteOrder"), "LowByteFirst");
assertEquals(edfLoader.getMetadata().getMetaValue("DataType"), "UnsignedShort");
assertEquals(edfLoader.getMetadata().getMetaValue("Dim_1"), "2048");
assertEquals(edfLoader.getMetadata().getMetaValue("Dim_2"), "2048");
assertEquals(edfLoader.getMetadata().getMetaValue("Size"), "8388608");
assertEquals(edfLoader.getMetadata().getMetaValue("time"), "Thu Jun 18 04:24:25 2009");
assertEquals(edfLoader.getMetadata().getMetaValue("count_time"), "Na");
assertEquals(edfLoader.getMetadata().getMetaValue("title"), "ESPIA FRELON Image 6105");
assertEquals(edfLoader.getMetadata().getMetaValue("run"), "6105");
Dataset data = dataHolder.getDataset(PilatusEdfLoader.DATA_NAME);
assertEquals(data.getDouble(0, 0), 98.0, 0.0);
assertEquals(data.getDouble(2047, 2047),199.0, 0.0);
}
@Test
public void load() throws Exception {
PilatusEdfLoader edfLoader = new PilatusEdfLoader(testFileFolder+"pilatus300k.edf");
DataHolder dataHolder = edfLoader.loadFile();
assertEquals(edfLoader.getMetadata().getMetaValue("HeaderID"), "EH:000001:000000:000000");
assertEquals(edfLoader.getMetadata().getMetaValue("Image"), "1");
assertEquals(edfLoader.getMetadata().getMetaValue("VersionNumber"), "0.10");
assertEquals(edfLoader.getMetadata().getMetaValue("ByteOrder"), "LowByteFirst");
assertEquals(edfLoader.getMetadata().getMetaValue("DataType"), "SignedInteger");
assertEquals(edfLoader.getMetadata().getMetaValue("Dim_1"), "1475");
assertEquals(edfLoader.getMetadata().getMetaValue("Dim_2"), "195");
assertEquals(edfLoader.getMetadata().getMetaValue("Size"), "1150500");
assertEquals(edfLoader.getMetadata().getMetaValue("Date"), "Wed Jun 16 19:14:09 2010");
assertEquals(edfLoader.getMetadata().getMetaValue("count_time"), "1.000000000");
assertEquals(edfLoader.getMetadata().getMetaValue("title"), "# Pixel_size 172e-6 m x 172e-6 m");
assertEquals(edfLoader.getMetadata().getMetaValue("run"), "0");
Dataset data = dataHolder.getDataset(PilatusEdfLoader.DATA_NAME);
// Check the first 5 data points
assertEquals(data.getDouble(0, 0), 38.0, 0.0);
assertEquals(data.getDouble(0, 1), 38.0, 0.0);
assertEquals(data.getDouble(0, 2), 34.0, 0.0);
assertEquals(data.getDouble(0, 3), 36.0, 0.0);
assertEquals(data.getDouble(0, 4), 30.0, 0.0);
// Check the last 5 data points
assertEquals(data.getDouble(194, 1470), 223.0, 0.0);
assertEquals(data.getDouble(194, 1471), 212.0, 0.0);
assertEquals(data.getDouble(194, 1472), 179.0, 0.0);
assertEquals(data.getDouble(194, 1473), 191.0, 0.0);
assertEquals(data.getDouble(194, 1474), 229.0, 0.0);
}
}