/* * 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 java.util.Collection; import java.util.Map; import org.apache.commons.lang.SerializationUtils; import org.eclipse.dawnsci.analysis.api.io.IDataHolder; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.ILazyDataset; import org.eclipse.january.metadata.IMetadata; import org.junit.Test; public class DatLoaderTest { /** * This method tests for SciSoft trac #496 */ @Test public void testFeKedge_1_15() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/FeKedge_1_15.dat"; final DataHolder dh = new DatLoader(testfile1).loadFile(); if (dh.getNames().length!=73) throw new Exception("There should be 73 columns!"); // Test some of the data if (dh.getDataset("Energy").getDouble(0)!=6912.0000d) throw new Exception("The first value of energy should be 6912.0000!"); if (dh.getDataset("Energy").getDouble(488)!=7962.0000d) throw new Exception("The 488 value of energy should be 7962.0000!"); if (dh.getDataset("Element 1").getDouble(0)!=-39259.72d) throw new Exception("The first value of Element 1 should be -39259.72!"); if (dh.getDataset("Element 1").getDouble(488)!=327272.07d) throw new Exception("The 488 value of energy should be 327272.07!"); } /** * This method tests for SciSoft trac #496 */ @Test public void testMoFoil() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/MoFoil.dat"; final DataHolder dh = new DatLoader(testfile1).loadFile(); if (dh.getNames().length!=13) throw new Exception("There should be 13 columns!"); if (dh.getDataset("Unknown").getDouble(0)!=3556d) throw new Exception("The first value of Unknown should be 3556!"); if (dh.getDataset("Unknown").getDouble(898)!=1067d) throw new Exception("The 898 value of Unknown should be 1067!"); } /** * This method tests for SciSoft trac #496 */ @Test public void testMoFoilLoaderFactory() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/MoFoil.dat"; final IDataHolder dh = LoaderFactory.getData(testfile1, null); if (dh.getNames().length!=13) throw new Exception("There should be 13 columns!"); if (dh.getDataset("Unknown").getDouble(0)!=3556d) throw new Exception("The first value of Unknown should be 3556!"); if (dh.getDataset("Unknown").getDouble(898)!=1067d) throw new Exception("The 898 value of Unknown should be 1067!"); } /** * This method tests for SciSoft trac #496 */ @Test public void testMoFoilLoaderFactoryMeta() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/MoFoil.dat"; final IMetadata meta = LoaderFactory.getMetadata(testfile1, null); if (meta.getDataNames().size()!=13) throw new Exception("There should be 13 columns!"); if (!meta.getDataNames().contains("(13 fluo channels)")) throw new Exception("There should be a (13 fluo channels) column!"); if (meta.getDataNames().contains("")) throw new Exception("There should be no empty string column!"); } /** * File with data but without a header line. Therefore the * code has to work * @throws Exception */ @Test public void testHorribleId143DatFile() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/bsa_013_01.dat"; final IMetadata meta = LoaderFactory.getMetadata(testfile1, null); final Collection<String> names = meta.getDataNames(); if (!names.contains("Unknown1")) throw new Exception("No Unknown1 in meta data!"); if (!names.contains("Unknown2")) throw new Exception("No Unknown2 in meta data!"); final IDataHolder dh = LoaderFactory.getData(testfile1, null); final Map<String,ILazyDataset> data = dh.toLazyMap(); for (String name : data.keySet()) { if (!data.get(name).getName().equals(name)) throw new Exception("DatLoader did not set dataset name correctly!"); } } /** * File with data but without a header line. Therefore the * code has to work * @throws Exception */ @Test public void testPlainDatFile() throws Exception { final String testfile1 = "testfiles/gda/analysis/io/DatLoaderTest/noheader.dat"; final IMetadata meta = LoaderFactory.getMetadata(testfile1, null); final Collection<String> names = meta.getDataNames(); if (!names.contains("Column_1")) throw new Exception("No Unknown1 in meta data!"); if (!names.contains("Column_2")) throw new Exception("No Unknown2 in meta data!"); final IDataHolder dh = LoaderFactory.getData(testfile1, null); final Map<String,ILazyDataset> data = dh.toLazyMap(); for (String name : data.keySet()) { if (!data.get(name).getName().equals(name)) throw new Exception("DatLoader did not set dataset name correctly!"); } } @Test public void testSerializability() throws Exception { DataHolder loader = new DatLoader("testfiles/gda/analysis/io/DatLoaderTest/MoFoil.dat").loadFile(); Dataset data = loader.getDataset(0); SerializationUtils.serialize(data.getMetadata()); } }