class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1,2,3,4,5], DataY=[1,2,3,4,5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9) def test_crystal_structure_handling(self): sample = self._ws.sample() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) cs = CrystalStructure('5.43 5.43 5.43', 'F d -3 m', 'Si 0 0 0 1.0 0.01') sample.setCrystalStructure(cs) self.assertEquals(sample.hasCrystalStructure(), True) cs_from_sample = sample.getCrystalStructure() self.assertEquals(cs.getSpaceGroup().getHMSymbol(), cs_from_sample.getSpaceGroup().getHMSymbol()) self.assertEquals(cs.getUnitCell().a(), cs_from_sample.getUnitCell().a()) self.assertEquals(len(cs.getScatterers()), len(cs_from_sample.getScatterers())) self.assertEquals(cs.getScatterers()[0], cs_from_sample.getScatterers()[0]) sample.clearCrystalStructure() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) def test_material(self): SetSampleMaterial(self._ws,"Al2 O3",SampleMassDensity=4) material = self._ws.sample().getMaterial() self.assertAlmostEqual(material.numberDensity, 0.0236, places=4) self.assertAlmostEqual(material.relativeMolecularMass(), 101.961, places=3) atoms, numatoms = material.chemicalFormula() self.assertEquals(len(atoms), len(numatoms)) self.assertEquals(len(atoms), 2) self.assertEquals(numatoms[0], 2) self.assertEquals(numatoms[1], 3) xs0 = atoms[0].neutron() xs1 = atoms[1].neutron() xs = ( xs0['coh_scatt_xs']*2 + xs1['coh_scatt_xs']*3 ) / 5 self.assertAlmostEquals(material.cohScatterXSection(), xs, places=4)
def test_simple(self): input_x = np.array([0.1, 0.2, 0.3, 0.4, 0.5]) input_y = np.array([1., 2, 3, 2, 1]) input_e = np.array([0.1, 0.14, 0.17, 0.14, 0.1]) sq = CreateWorkspace(DataX=input_x, DataY=input_y, DataE=input_e, UnitX='MomentumTransfer') SetSampleMaterial(InputWorkspace=sq, ChemicalFormula='Ar') fq = PDConvertReciprocalSpace(InputWorkspace=sq, To='F(Q)', From='S(Q)') x = fq.readX(0) y = fq.readY(0) e = fq.readE(0) self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.array_equal(y, input_x * (input_y - 1))) self.assertTrue(np.array_equal(e, input_x * input_e)) fkq = PDConvertReciprocalSpace(InputWorkspace=sq, To='FK(Q)', From='S(Q)') x = fkq.readX(0) y = fkq.readY(0) e = fkq.readE(0) bsq = sq.sample().getMaterial().cohScatterLengthSqrd() self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.allclose(y, bsq * (input_y - 1))) self.assertTrue(np.allclose(e, bsq * input_e))
def test_simple(self): input_x = np.array([0.1,0.2,0.3,0.4,0.5]) input_y = np.array([1.,2,3,2,1]) input_e = np.array([0.1,0.14,0.17,0.14,0.1]) sq = CreateWorkspace(DataX=input_x, DataY=input_y, DataE=input_e, UnitX='MomentumTransfer') SetSampleMaterial(InputWorkspace=sq, ChemicalFormula='Ar') fq = PDConvertReciprocalSpace(InputWorkspace=sq, To='F(Q)', From='S(Q)') x=fq.readX(0) y=fq.readY(0) e=fq.readE(0) self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.array_equal(y, input_x*(input_y-1))) self.assertTrue(np.array_equal(e, input_x*input_e)) fkq = PDConvertReciprocalSpace(InputWorkspace=sq, To='FK(Q)', From='S(Q)') x=fkq.readX(0) y=fkq.readY(0) e=fkq.readE(0) bsq = sq.sample().getMaterial().cohScatterLengthSqrd() self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.allclose(y, bsq*(input_y-1))) self.assertTrue(np.allclose(e, bsq*input_e))
def test_material(self): ws = CreateWorkspace(DataX=[1], DataY=[1], StoreInADS=False) sample = ws.sample() SetSampleMaterial(ws, "Al2 O3", SampleMassDensity=4, StoreInADS=False) material = sample.getMaterial() self.assertAlmostEqual(material.numberDensity, 0.1181, places=4) self.assertAlmostEqual(material.relativeMolecularMass(), 101.961, places=3) atoms, numatoms = material.chemicalFormula() self.assertEqual(len(atoms), len(numatoms)) self.assertEqual(len(atoms), 2) self.assertEqual(numatoms[0], 2) self.assertEqual(numatoms[1], 3) xs0 = atoms[0].neutron() xs1 = atoms[1].neutron() # the correct way to calculate for coherent cross section # is to average the scattering lengths then convert to a cross section b_real = (xs0['coh_scatt_length_real'] * 2 + xs1['coh_scatt_length_real'] * 3) / 5 b_imag = (xs0['coh_scatt_length_img'] * 2 + xs1['coh_scatt_length_img'] * 3) / 5 xs = .04 * pi * (b_real * b_real + b_imag * b_imag) self.assertAlmostEquals(material.cohScatterXSection(), xs, places=4)
def test_simple(self): input_x = np.array([0.1, 0.2, 0.3, 0.4, 0.5]) input_y = np.array([1., 2, 3, 2, 1]) input_e = np.array([0.1, 0.14, 0.17, 0.14, 0.1]) Gr = CreateWorkspace(DataX=input_x, DataY=input_y, DataE=input_e) SetSampleMaterial(InputWorkspace=Gr, ChemicalFormula='Ar') GKr = PDConvertRealSpace(InputWorkspace=Gr, To='GK(r)', From='G(r)') x = GKr.readX(0) y = GKr.readY(0) e = GKr.readE(0) bsq = Gr.sample().getMaterial().cohScatterLengthSqrd() rho = Gr.sample().getMaterial().numberDensity factor = bsq / (4. * np.pi * rho) self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.allclose(y, factor * input_y / input_x)) self.assertTrue(np.allclose(e, factor * input_e / input_x))
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1, 2, 3, 4, 5], DataY=[1, 2, 3, 4, 5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9) def test_crystal_structure_handling(self): sample = self._ws.sample() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) cs = CrystalStructure('5.43 5.43 5.43', 'F d -3 m', 'Si 0 0 0 1.0 0.01') sample.setCrystalStructure(cs) self.assertEquals(sample.hasCrystalStructure(), True) cs_from_sample = sample.getCrystalStructure() self.assertEquals(cs.getSpaceGroup().getHMSymbol(), cs_from_sample.getSpaceGroup().getHMSymbol()) self.assertEquals(cs.getUnitCell().a(), cs_from_sample.getUnitCell().a()) self.assertEquals(len(cs.getScatterers()), len(cs_from_sample.getScatterers())) self.assertEquals(cs.getScatterers()[0], cs_from_sample.getScatterers()[0]) sample.clearCrystalStructure() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure)
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1,2,3,4,5], DataY=[1,2,3,4,5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9) def test_crystal_structure_handling(self): sample = self._ws.sample() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) cs = CrystalStructure('5.43 5.43 5.43', 'F d -3 m', 'Si 0 0 0 1.0 0.01') sample.setCrystalStructure(cs) self.assertEquals(sample.hasCrystalStructure(), True) cs_from_sample = sample.getCrystalStructure() self.assertEquals(cs.getSpaceGroup().getHMSymbol(), cs_from_sample.getSpaceGroup().getHMSymbol()) self.assertEquals(cs.getUnitCell().a(), cs_from_sample.getUnitCell().a()) self.assertEquals(len(cs.getScatterers()), len(cs_from_sample.getScatterers())) self.assertEquals(cs.getScatterers()[0], cs_from_sample.getScatterers()[0]) sample.clearCrystalStructure() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure)
def test_simple(self): input_x = np.array([0.1,0.2,0.3,0.4,0.5]) input_y = np.array([1.,2,3,2,1]) input_e = np.array([0.1,0.14,0.17,0.14,0.1]) Gr = CreateWorkspace(DataX=input_x, DataY=input_y, DataE=input_e) SetSampleMaterial(InputWorkspace=Gr, ChemicalFormula='Ar') GKr = PDConvertRealSpace(InputWorkspace=Gr, To='GK(r)', From='G(r)') x=GKr.readX(0) y=GKr.readY(0) e=GKr.readE(0) bsq = Gr.sample().getMaterial().cohScatterLengthSqrd() rho = Gr.sample().getMaterial().numberDensity factor = bsq / (4. * np.pi *rho) self.assertTrue(np.array_equal(x, input_x)) self.assertTrue(np.allclose(y, factor*input_y/input_x)) self.assertTrue(np.allclose(e, factor*input_e/input_x))
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1,2,3,4,5], DataY=[1,2,3,4,5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9)
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1, 2, 3, 4, 5], DataY=[1, 2, 3, 4, 5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9)
def _parseStructure(self, structure): from mantid.simpleapi import mtd, LoadCIF, CreateWorkspace, DeleteWorkspace import uuid self._fromCIF = False if isinstance(structure, string_types): if mtd.doesExist(structure): try: self._cryst = self._copyCrystalStructure(mtd[structure].sample().getCrystalStructure()) self._getUniqueAtoms() except RuntimeError: raise ValueError('Workspace ''%s'' has no valid CrystalStructure' % (structure)) else: tmpws = CreateWorkspace(1, 1, OutputWorkspace='_tempPointCharge_'+str(uuid.uuid4())[:8]) try: LoadCIF(tmpws, structure) # Attached CrystalStructure object gets destroyed when workspace is deleted self._cryst = self._copyCrystalStructure(tmpws.sample().getCrystalStructure()) except: DeleteWorkspace(tmpws) raise else: DeleteWorkspace(tmpws) self._getUniqueAtoms() elif isinstance(structure, list): if (len(structure) == 4 and all([isinstance(x, (int, float)) for x in structure])): structure = [structure] if (all([isinstance(x, list) and (len(x) == 4) and all([isinstance(y, (int, float)) for y in x]) for x in structure])): self._ligands = structure else: raise ValueError('Incorrect ligands direct input. Must be a 4-element list or a list ' 'of 4-element list. Each ligand must be of the form [charge, x, y, z]') elif hasattr(structure, 'getScatterers'): self._cryst = structure self._getUniqueAtoms() else: if not hasattr(structure, 'sample'): raise ValueError('First input must be a Mantid CrystalStructure object, workspace or string ' '(name of CIF file or workspace)') try: self._cryst = self._copyCrystalStructure(structure.sample().getCrystalStructure()) self._getUniqueAtoms() except RuntimeError: raise ValueError('Workspace ''%s'' has no valid CrystalStructure' % (structure.name()))
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1, 2, 3, 4, 5], DataY=[1, 2, 3, 4, 5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEqual(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEqual(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEqual(sample.getWidth(), 5.9) def test_crystal_structure_handling(self): sample = self._ws.sample() self.assertEqual(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) cs = CrystalStructure('5.43 5.43 5.43', 'F d -3 m', 'Si 0 0 0 1.0 0.01') sample.setCrystalStructure(cs) self.assertEqual(sample.hasCrystalStructure(), True) cs_from_sample = sample.getCrystalStructure() self.assertEqual(cs.getSpaceGroup().getHMSymbol(), cs_from_sample.getSpaceGroup().getHMSymbol()) self.assertEqual(cs.getUnitCell().a(), cs_from_sample.getUnitCell().a()) self.assertEqual(len(cs.getScatterers()), len(cs_from_sample.getScatterers())) self.assertEqual(cs.getScatterers()[0], cs_from_sample.getScatterers()[0]) sample.clearCrystalStructure() self.assertEqual(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) def test_material(self): SetSampleMaterial(self._ws, "Al2 O3", SampleMassDensity=4) material = self._ws.sample().getMaterial() self.assertAlmostEqual(material.numberDensity, 0.1181, places=4) self.assertAlmostEqual(material.relativeMolecularMass(), 101.961, places=3) atoms, numatoms = material.chemicalFormula() self.assertEqual(len(atoms), len(numatoms)) self.assertEqual(len(atoms), 2) self.assertEqual(numatoms[0], 2) self.assertEqual(numatoms[1], 3) xs0 = atoms[0].neutron() xs1 = atoms[1].neutron() # the correct way to calculate for coherent cross section # is to average the scattering lengths then convert to a cross section b_real = (xs0['coh_scatt_length_real'] * 2 + xs1['coh_scatt_length_real'] * 3) / 5 b_imag = (xs0['coh_scatt_length_img'] * 2 + xs1['coh_scatt_length_img'] * 3) / 5 xs = .04 * pi * (b_real * b_real + b_imag * b_imag) self.assertAlmostEquals(material.cohScatterXSection(), xs, places=4) def test_get_shape(self): sample = self._ws.sample() self.assertEqual(type(sample.getShape()), CSGObject) def test_get_shape_xml(self): sample = self._ws.sample() shape = sample.getShape() xml = shape.getShapeXML() self.assertEqual(type(xml), str)
class SampleTest(unittest.TestCase): def setUp(self): self._ws = CreateWorkspace(DataX=[1,2,3,4,5], DataY=[1,2,3,4,5], OutputWorkspace="dummy") def test_geometry_getters_and_setters(self): sample = self._ws.sample() sample.setThickness(12.5) self.assertEquals(sample.getThickness(), 12.5) sample.setHeight(10.2) self.assertEquals(sample.getHeight(), 10.2) sample.setWidth(5.9) self.assertEquals(sample.getWidth(), 5.9) def test_crystal_structure_handling(self): sample = self._ws.sample() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) cs = CrystalStructure('5.43 5.43 5.43', 'F d -3 m', 'Si 0 0 0 1.0 0.01') sample.setCrystalStructure(cs) self.assertEquals(sample.hasCrystalStructure(), True) cs_from_sample = sample.getCrystalStructure() self.assertEquals(cs.getSpaceGroup().getHMSymbol(), cs_from_sample.getSpaceGroup().getHMSymbol()) self.assertEquals(cs.getUnitCell().a(), cs_from_sample.getUnitCell().a()) self.assertEquals(len(cs.getScatterers()), len(cs_from_sample.getScatterers())) self.assertEquals(cs.getScatterers()[0], cs_from_sample.getScatterers()[0]) sample.clearCrystalStructure() self.assertEquals(sample.hasCrystalStructure(), False) self.assertRaises(RuntimeError, sample.getCrystalStructure) def test_material(self): SetSampleMaterial(self._ws,"Al2 O3",SampleMassDensity=4) material = self._ws.sample().getMaterial() self.assertAlmostEqual(material.numberDensity, 0.1181, places=4) self.assertAlmostEqual(material.relativeMolecularMass(), 101.961, places=3) atoms, numatoms = material.chemicalFormula() self.assertEquals(len(atoms), len(numatoms)) self.assertEquals(len(atoms), 2) self.assertEquals(numatoms[0], 2) self.assertEquals(numatoms[1], 3) xs0 = atoms[0].neutron() xs1 = atoms[1].neutron() # the correct way to calculate for coherent cross section # is to average the scattering lengths then convert to a cross section b_real = (xs0['coh_scatt_length_real']*2 + xs1['coh_scatt_length_real']*3) / 5 b_imag = (xs0['coh_scatt_length_img']*2 + xs1['coh_scatt_length_img']*3) / 5 xs = .04 * pi * (b_real * b_real + b_imag * b_imag) self.assertAlmostEquals(material.cohScatterXSection(), xs, places=4) def test_get_shape(self): sample = self._ws.sample() self.assertEquals(type(sample.getShape()), CSGObject) def test_get_shape_xml(self): sample = self._ws.sample() shape = sample.getShape() xml = shape.getShapeXML() self.assertEquals(type(xml), str)