package uk.ac.diamond.scisoft.xpdf.test;
import org.eclipse.dawnsci.analysis.api.io.IDataHolder;
import org.eclipse.january.DatasetException;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.dataset.DatasetUtils;
import org.eclipse.january.dataset.Maths;
import junit.framework.TestCase;
import uk.ac.diamond.scisoft.analysis.io.LoaderFactory;
import uk.ac.diamond.scisoft.xpdf.XPDFBeamData;
import uk.ac.diamond.scisoft.xpdf.XPDFComponentCylinder;
import uk.ac.diamond.scisoft.xpdf.XPDFComponentForm;
import uk.ac.diamond.scisoft.xpdf.XPDFComponentGeometry;
import uk.ac.diamond.scisoft.xpdf.XPDFCoordinates;
import uk.ac.diamond.scisoft.xpdf.XPDFQSquaredIntegrator;
import uk.ac.diamond.scisoft.xpdf.XPDFTargetComponent;
public class XPDFTargetComponentTest extends TestCase {
public void testGetKroghMoeSum() {
double KroghMoeSumExpected = 964.425331596;
XPDFTargetComponent ceriaComponent = generateCeriaComponent();
double KroghMoeSum = ceriaComponent.getKroghMoeSum();
double difference = KroghMoeSum - KroghMoeSumExpected;
assertTrue("Difference in Krogh-Moe sum too large: "+difference, Math.abs(difference/KroghMoeSumExpected) < 1e-2);
}
public void testGetSelfScattering() throws DatasetException {
XPDFTargetComponent ceriaComponent = generateCeriaComponent();
// double selfScatteringIntegralExpected = 463628.661954;
double selfScatteringIntegralExpected = 544918.666;
String dataPath = "/home/rkl37156/ceria_dean_data/testData/";
IDataHolder dh = null;
String scattererName, attenuatorName;
try {
dh = LoaderFactory.getData(dataPath+"self_scattering.xy");
} catch (Exception e) {
}
Dataset twoTheta = Maths.toRadians(DatasetUtils.convertToDataset(dh.getLazyDataset("Column_1").getSlice(new int[] {0}, new int[]{1951}, new int[] {1})));
XPDFBeamData beamData = new XPDFBeamData();
beamData.setBeamEnergy(76.6);
XPDFCoordinates coords = new XPDFCoordinates();
coords.setBeamData(beamData);
coords.setTwoTheta(twoTheta);
// Set up the q² integrator class
XPDFQSquaredIntegrator qSquaredIntegrator = new XPDFQSquaredIntegrator(coords);
// Difference ofKrogh-Moe sum and integral of Thomson self-scattering
double selfScatteringIntegral = qSquaredIntegrator.ThomsonIntegral(ceriaComponent.getSelfScattering(coords));
double difference = selfScatteringIntegral/selfScatteringIntegralExpected - 1;
assertTrue("Difference in self scattering integral too large: "+difference*100+"%", Math.abs(difference/selfScatteringIntegralExpected) < 1e-6);
}
private XPDFTargetComponent generateCeriaComponent() {
XPDFTargetComponent ceriaComponent = new XPDFTargetComponent();
XPDFComponentForm formMeta = new XPDFComponentForm();
XPDFComponentGeometry geomMeta = null;
geomMeta = new XPDFComponentCylinder();
geomMeta.setDistances(0.0, 0.5);
formMeta.setMatName("CeO2");
formMeta.setDensity(7.65);
formMeta.setPackingFraction(0.6);
formMeta.setGeom(geomMeta);
ceriaComponent.setForm(formMeta);
ceriaComponent.setName("Ceria powder");
ceriaComponent.setSample(true);
return ceriaComponent;
}
}