/*
* 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 javax.vecmath.Vector3d;
import org.apache.commons.lang.SerializationUtils;
import org.eclipse.dawnsci.analysis.api.diffraction.DetectorProperties;
import org.eclipse.dawnsci.analysis.api.diffraction.DiffractionCrystalEnvironment;
import org.eclipse.dawnsci.analysis.api.metadata.IDiffractionMetadata;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.metadata.IMetadata;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import uk.ac.diamond.scisoft.analysis.IOTestUtils;
public class DiffractionImageTest {
static String testfile1 = null;
static String testfile2 = null;
static String testfile3 = null;
static String TestFileFolder;
@BeforeClass
static public void setUpClass() {
TestFileFolder = IOTestUtils.getGDALargeTestFilesLocation();
testfile1 = TestFileFolder + "ADSCImageTest/F6_1_001.img";
testfile2 = TestFileFolder + "MARImageTest/mar225_001.mccd";
testfile3 = TestFileFolder + "CBFLoaderTest/xtal5e_1_0010.cbf";
}
/**
* Test Loading
*
* @throws Exception if the loading fails
*/
@Test
public void testLoaderFactory() throws Exception {
if (LoaderFactory.getData(testfile1, null) == null) throw new Exception();
if (LoaderFactory.getData(testfile2, null) == null) throw new Exception();
if (LoaderFactory.getData(testfile3, null) == null) throw new Exception();
}
DetectorProperties detprops;
DiffractionCrystalEnvironment dce;
/**
* Test Loading
*
* @throws Exception if the loading fails
*/
@Test
public void testMetadata() throws Exception {
DataHolder dh = new ADSCImageLoader(testfile1).loadFile();
IMetadata metadata = dh.getDataset(0).getMetadata();
if(metadata instanceof IDiffractionMetadata){
detprops = ((IDiffractionMetadata)metadata).getDetector2DProperties();
dce = ((IDiffractionMetadata)metadata).getDiffractionCrystalEnvironment();
}
double detSizeX = detprops.getDetectorSizeH();
double detSizeY = detprops.getDetectorSizeV();
double diagDetSize = Math.sqrt((detSizeX * detSizeX)
+ (detSizeY * detSizeY));
int[] detectorCorners = { 0, 0, 0, detprops.getPx(), detprops.getPy(), 0, detprops.getPx(), detprops.getPy() };
System.out.println("ADSC "+detSizeX +" pix size "+detprops.getHPxSize() +" num pix "+ detprops.getPx());
Vector3d px1topx4 = new Vector3d();
px1topx4.sub(detprops.pixelPosition(detectorCorners[0], detectorCorners[1]),detprops.pixelPosition(detprops.getPx(), detprops.getPy()));
Assert.assertEquals(diagDetSize, px1topx4.length(), 0.00001);
}
@Test
public void testMAR() throws Exception {
DataHolder dh = new MARLoader(testfile2).loadFile();
IMetadata metadata = dh.getDataset(0).getMetadata();
if(metadata instanceof IDiffractionMetadata){
detprops = ((IDiffractionMetadata)metadata).getDetector2DProperties();
dce = ((IDiffractionMetadata)metadata).getDiffractionCrystalEnvironment();
}
double detSizeX = detprops.getDetectorSizeH();
double detSizeY = detprops.getDetectorSizeV();
System.out.println("MAR "+detSizeX +" pix size "+detprops.getHPxSize() +" num pix "+ detprops.getPx());
double diagDetSize = Math.sqrt((detSizeX * detSizeX)
+ (detSizeY * detSizeY));
int[] detectorCorners = { 0, 0, 0, detprops.getPx(), detprops.getPy(), 0, detprops.getPx(), detprops.getPy() };
Vector3d px1topx4 = new Vector3d();
px1topx4.sub(detprops.pixelPosition(detectorCorners[0], detectorCorners[1]),detprops.pixelPosition(detprops.getPx(), detprops.getPy()));
Assert.assertEquals(diagDetSize, px1topx4.length(), 0.00001);
}
@Test
public void testminiCBF() throws Exception {
DataHolder dh = new CBFLoader(testfile3).loadFile();
IMetadata metadata = dh.getDataset(0).getMetadata();
if(metadata instanceof IDiffractionMetadata){
detprops = ((IDiffractionMetadata)metadata).getDetector2DProperties();
dce = ((IDiffractionMetadata)metadata).getDiffractionCrystalEnvironment();
}
double detSizeX = detprops.getDetectorSizeH();
double detSizeY = detprops.getDetectorSizeV();
System.out.println("mini cbf "+detSizeX +" pix size "+detprops.getHPxSize() +" num pix "+ detprops.getPx());
double diagDetSize = Math.sqrt((detSizeX * detSizeX)
+ (detSizeY * detSizeY));
int[] detectorCorners = { 0, 0, 0, detprops.getPx(), detprops.getPy(), 0, detprops.getPx(), detprops.getPy() };
Vector3d px1topx4 = new Vector3d();
px1topx4.sub(detprops.pixelPosition(detectorCorners[0], detectorCorners[1]),detprops.pixelPosition(detprops.getPx(), detprops.getPy()));
Assert.assertEquals(diagDetSize, px1topx4.length(), 0.00001);
}
@Test
public void testSerializability() throws Exception {
Dataset data;
data = new ADSCImageLoader(testfile1).loadFile().getDataset(0);
SerializationUtils.serialize(data.getMetadata());
data = new MARLoader(testfile2).loadFile().getDataset(0);
SerializationUtils.serialize(data.getMetadata());
data = new CBFLoader(testfile3).loadFile().getDataset(0);
SerializationUtils.serialize(data.getMetadata());
}
}