/* * Copyright 2016 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.xpdf.views; import java.util.ArrayList; import java.util.List; /** * A class to load test data for the XPDF unit cell editor. * @author Timothy Spain, timothy.spain@diamond.ac.uk * */ class SampleTestData { /** * Creates and returns a example {@link XPDFSample}. * <p> * Returns a sample object, bases on matching one of the given names: * <ul> * <li> Barium Titanate </li> * <li> Rutile </li> * <li> Quartz Capillary </li> * <li> ceria </li> * </ul> * @param name * name of the sample to create * @return * the object of the created sample. */ public static XPDFSampleParameters createTestSample(String name) { XPDFSampleParameters sample = new XPDFSampleParameters(); switch (name) { case("Barium Titanate"): { sample.setName("Barium Titanate"); sample.addPhase(createTestPhase("BTO"), 0.9); sample.addPhase(createTestPhase("Calcium titanate"), 0.1); sample.setComposition("Ba0.9Ca0.1TiO3"); // Should be "Ba0.9Ca0.1TiO3" sample.setDensity(3.71); sample.setAsSample(); break; } case("Rutile"): { sample.setName("Rutile"); sample.addPhase(createTestPhase("TiO2")); sample.setComposition("TiO2"); sample.setDensity(6.67); sample.setAsSample(); break; } case("Quartz Capillary"): { sample.setName("Quartz Capillary"); sample.setAsContainer(); sample.addPhase(createTestPhase("cSiO2")); sample.setComposition("SiO2"); sample.setDensity(2.65); sample.setPackingFraction(1.0); sample.setShape("Cylinder"); sample.setDimensions(0.15, 0.16); break; } case("ceria"): { sample.setName("Ceria SRM"); sample.setAsSample(); sample.addPhase(createTestPhase("ceria")); sample.setComposition("CeO2"); sample.setDensity(7.65); break; } default: } return sample; } /** * Creates and returns a example {@link XPDFPhase}. * <p> * Returns a phase object, bases on matching one of the given names: * <ul> * <li> BTO </li> * <li> Calcium titanate </li> * <li> TiO2 </li> * <li> cSiO2 </li> * <li> Crown Glass </li> * <li> Flint Glass </li> * <li> ceria </li> * <li> microcline </li> * <li> cryolite </li> * <li> ilmenite </li> * </ul> * @param name * name of the sample to create * @return * the object of the created sample. */ public static XPDFPhase createTestPhase(String name) { XPDFPhase phase = new XPDFPhase(); switch (name) { case ("BTO"): { phase.setName("BTO"); phase.setSpaceGroup(99); // P4mm phase.setUnitCellLengths(3.9945, 3.9945, 4.0296); // Tetragonal, 90°, 90°, 90° phase.addComment("barium titanate"); break; } case ("Calcium titanate"): { phase.setName("calcium titanate"); phase.setSpaceGroup(62); // Pnma phase.setUnitCellLengths(5.447, 7.654, 5.388); // Orthorhombic, 90°, 90°, 90° phase.addComment("perovskite"); break; } case ("TiO2"): { phase.setName("TiO2"); phase.setSpaceGroup(136); // P42/mmm phase.setUnitCellLengths(4.5939, 4.5939, 2.9588); // Tetragonal, 90°, 90°, 90° phase.addComment("titanium dioxide"); phase.addComment("or rutile"); break; } case ("cSiO2"): { phase.setName("cSiO2"); phase.setSpaceGroup(152); // P3121 phase.setUnitCellLength(0, 4.9139); phase.setUnitCellLength(2, 5.4056); // Trigonal, 90°, 90°, 120° phase.addComment("Crystalline silica,"); phase.addComment("also known as quartz"); phase.addAtom(new XPDFAtom("si", 14, 1.0, new double[] {0.46970, 0.00000, 0.33333}, "a")); phase.addAtom(new XPDFAtom("ox", 8, 1.0, new double[] {0.41330, 0.26720, 0.77550}, "c")); // coordinates incorrect break; } case ("Crown Glass"): { phase.setName("Crown glass"); phase.setForm(XPDFPhaseForm.get(XPDFPhaseForm.Forms.GLASSY)); break; } case ("Flint Glass"): { phase.setName("Flint glass"); phase.setForm(XPDFPhaseForm.get(XPDFPhaseForm.Forms.GLASSY)); break; } case ("ceria"): { phase.setName("ceria"); phase.setSpaceGroup(225); //Fm-3m phase.setUnitCellLength(0, 5.41165); // Cubic, 90°, 90°, 90° phase.addComment("I love you, ceria!"); phase.addAtom(new XPDFAtom("ox", 8, 1.0, new double[] {0.25, 0.25, 0.25}, "c")); phase.addAtom(new XPDFAtom("ce", 58, 1.0, new double[] {0.0, 0.0, 0.0}, "a")); break; } case ("microcline"): { phase.setName("microcline"); phase.setSpaceGroup(2); // P-1 phase.setUnitCellLengths(8.5784, 12.96, 7.2112); phase.setUnitCellAngles(90.3, 116.05, 89); // Triclinic phase.addComment("bright blue"); break; } case ("cryolite"): { phase.setName("cryolite"); phase.setSpaceGroup(10); // P2/m phase.setUnitCellLengths(7.7564, 5.5959, 5.4024); phase.setUnitCellAngle(1, 90.18); // Monoclinic break; } case ("ilmenite"): { phase.setName("ilmenite"); phase.setSpaceGroup(XPDFSpaceGroup.get(148).asRhombohedral()); //phase.setUnitCellLengths(5.08854, 0, 14.0924); // Hexagonal setting axes phase.setUnitCellLength(0, 5.54051); phase.setUnitCellAngle(0, 54.6726); phase.addComment("ferrous titanate"); // Like haematite, but with titanium. This is the rhombohedral setting phase.addAtom(new XPDFAtom("Fe1", 26, 1.0, new double[] {0.333, 0.333, 0.333}, "c")); // phase.addAtom(new XPDFAtom("Fe2", 26, 1.0, new double[] {0.667, 0.667, 0.667})); phase.addAtom(new XPDFAtom("Ti1", 22, 1.0, new double[] {0.167, 0.167, 0.167}, "c")); // phase.addAtom(new XPDFAtom("Ti2", 22, 1.0, new double[] {0.833, 0.833, 0.833})); phase.addAtom(new XPDFAtom("O1", 8, 1.0, new double[] {0.583, 0.917, 0.250}, "f")); // phase.addAtom(new XPDFAtom("O2", 8, 1.0, new double[] {0.917, 0.250, 0.583})); // phase.addAtom(new XPDFAtom("O3", 8, 1.0, new double[] {0.250, 0.583, 0.917})); // phase.addAtom(new XPDFAtom("O4", 8, 1.0, new double[] {-0.583, -0.917, -0.250})); // phase.addAtom(new XPDFAtom("O5", 8, 1.0, new double[] {-0.917, -0.250, -0.583})); // phase.addAtom(new XPDFAtom("O6", 8, 1.0, new double[] {-0.250, -0.583, -0.917})); break; } case ("beryllium") : { phase.setName("beryllium"); phase.setSpaceGroup(194); // P63/mmc, hexagonal phase.setUnitCellLength(0, 2.29); phase.setUnitCellLength(2, 3.58); phase.addComment("elemental hcp beryllium"); // phase.addAtom(new XPDFAtom("Be1", 4, 1.0, new double[] {0,0,0}, "a")); break; } default: } return phase; } }