Exemple #1
0
    def test_isAllowedUnitCell_cubic(self):
        cubic = UnitCell(6, 6, 6)
        tetragonal = UnitCell(6, 6, 6.01)
        sg = SpaceGroupFactory.createSpaceGroup('P m -3')

        self.assertTrue(sg.isAllowedUnitCell(cubic))
        self.assertFalse(sg.isAllowedUnitCell(tetragonal))
Exemple #2
0
 def test_simple_constructor(self):
     u1 = UnitCell()
     self.assertEquals(u1.a1(), 1)
     self.assertEquals(u1.alpha(), 90)
     
     u2 = UnitCell(3,4,5)
     self.assertAlmostEquals(u2.b1(),1./3., 10)
     self.assertAlmostEquals(u2.alphastar(), 90, 10)
     
     u4 = u2
     self.assertAlmostEquals(u4.volume(),1./u2.recVolume(),10)
     u2.seta(3);
     self.assertAlmostEquals(u2.a(),3,10)
Exemple #3
0
    def test_setModVec_accepts_v3d(self):
        unit = UnitCell(3, 3, 3)

        vectors = (V3D(1, 2, 3), V3D(2, 1, 3), V3D(3, 2, 1))
        unit.setModVec1(vectors[0])
        unit.setModVec2(vectors[1])
        unit.setModVec3(vectors[2])

        for index, expected in enumerate(vectors):
            self.assertEquals(vectors[index], unit.getModVec(index))
Exemple #4
0
    def test_isAllowedUnitCell_trigonal(self):
        rhombohedral = UnitCell(5, 5, 5, 80, 80, 80)
        hexagonal = UnitCell(5, 5, 4, 90, 90, 120)

        sgRh = SpaceGroupFactory.createSpaceGroup('R -3 c :r')
        sgHex = SpaceGroupFactory.createSpaceGroup('R -3 c')

        sgP6m = SpaceGroupFactory.createSpaceGroup('P 6/m')

        self.assertTrue(sgRh.isAllowedUnitCell(rhombohedral))
        self.assertFalse(sgRh.isAllowedUnitCell(hexagonal))

        self.assertTrue(sgHex.isAllowedUnitCell(hexagonal))
        self.assertFalse(sgHex.isAllowedUnitCell(rhombohedral))

        self.assertTrue(sgP6m.isAllowedUnitCell(hexagonal))
        self.assertFalse(sgP6m.isAllowedUnitCell(rhombohedral))
Exemple #5
0
    def test_getSumWeights_hexagonal(self):
        cell = UnitCell(2, 2, 3, 90, 90, 120)

        matrix = self.builder._getMetricDependentWeights(cell)
        expected = np.array([[4. / 3., -2. / 3., 0.0],
                             [-2. / 3., 4. / 3., 0.0], [0.0, 0.0, 1.0]])

        self.assertTrue(np.all(np.abs(matrix - expected) < 1.e-9))
Exemple #6
0
    def test_getSumWeights_orthorhombic(self):
        cell = UnitCell(1, 2, 3, 90, 90, 90)

        matrix = self.builder._getMetricDependentWeights(cell)
        expected = np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0,
                                                                1.0]])

        self.assertTrue(np.all(np.abs(matrix - expected) < 1.e-9))
    def test_to_string(self):
        unit = UnitCell(3, 3, 3)
        expected_str = "UnitCell with lattice parameters: a = 3 b = 3 c = 3 "\
                       "alpha = 90 beta = 90 gamma = 90"
        expected_repr = "UnitCell(3, 3, 3, 90, 90, 90)"

        self.assertEqual(expected_str, str(unit))
        self.assertEqual(expected_repr, unit.__repr__())

        newUnit = eval(unit.__repr__())
        self.assertEqual(unit.a(), newUnit.a())
        self.assertEqual(unit.b(), newUnit.b())
        self.assertEqual(unit.c(), newUnit.c())

        self.assertEqual(unit.alpha(), newUnit.alpha())
        self.assertEqual(unit.beta(), newUnit.beta())
        self.assertEqual(unit.gamma(), newUnit.gamma())
    def test_numpy_array_conversion(self):
        row0 = (0.162546756312, 0.00815256992072, -0.00145274558861)
        row1 = (row0[1], 0.028262965555, 0.00102046431298)
        row2 = (row0[2], row1[2], 0.0156808990098)
        gstar = np.array([row0, row1, row2])

        u = UnitCell()
        testhelpers.assertRaisesNothing(self, u.recalculateFromGstar, gstar)
        self._check_cell(u)
Exemple #9
0
    def __init__(self, cifFile=None):
        if cifFile is not None:
            cifData = cifFile[list(cifFile.keys())[0]]

            self.spaceGroup = SpaceGroupBuilder(cifData).spaceGroup
            self.unitCell = UnitCellBuilder(cifData).unitCell

            self.atoms = AtomListBuilder(cifData, UnitCell(*[float(removeErrorEstimateFromNumber(x)) for x in
                                                             self.unitCell.split()])).atomList
Exemple #10
0
    def test_getReciprocalLengthMatrix(self):
        cell = UnitCell(1, 2, 3)

        matrix = self.builder._getReciprocalLengthSquaredMatrix(cell)

        expected = np.array([[(1.0 / 1.0 * 1.0 / 1.0), (1.0 / 1.0 * 1.0 / 2.0), (1.0 / 1.0 * 1.0 / 3.0)],
                             [(1.0 / 2.0 * 1.0 / 1.0), (1.0 / 2.0 * 1.0 / 2.0), (1.0 / 2.0 * 1.0 / 3.0)],
                             [(1.0 / 3.0 * 1.0 / 1.0), (1.0 / 3.0 * 1.0 / 2.0), (1.0 / 3.0 * 1.0 / 3.0)]])

        self.assertTrue(np.all(matrix == expected))
Exemple #11
0
    def test_isInvariant_tolerance(self):
        pg3barHex = PointGroupFactory.createPointGroup('-3')
        pg3barRh = PointGroupFactory.createPointGroup('-3 r')

        cellHex = UnitCell(3, 3, 6, 90, 90, 120)
        cellRh = UnitCell(3, 3, 3, 75, 75, 75)

        self.assertTrue(pg3barHex.isInvariant(cellHex.getG()))
        self.assertFalse(pg3barHex.isInvariant(cellRh.getG()))

        self.assertTrue(pg3barRh.isInvariant(cellRh.getG()))
        self.assertFalse(pg3barRh.isInvariant(cellHex.getG()))
Exemple #12
0
    def test_find_indexing_with_non_orthogonal_cell(self):
        cell = UnitCell(1, 1, 1, 90, 95, 103)
        cart_cell = cell.getB()
        qs = np.array([
            [.5, 0, 0],
            [0, .5, 0],
            [0, 0, .5],
            [0, 0, .25],
        ])

        qs = np.dot(qs, cart_cell)

        indices = indexing.index_q_vectors(qs)

        expected_indexing = np.array([[0, 0, 1], [0, 1, 0], [2, 0, 0],
                                      [1, 0, 0]])

        npt.assert_equal(indices,
                         expected_indexing,
                         err_msg="Indexing does not match expected.")
Exemple #13
0
    def test_to_string(self):
        unit = UnitCell(3,3,3)
        expected_str = "UnitCell with lattice parameters: a = 3 b = 3 c = 3 "\
                       "alpha = 90 beta = 90 gamma = 90"
        expected_repr = "UnitCell(3, 3, 3, 90, 90, 90)"

        self.assertEqual(expected_str, str(unit))
        self.assertEqual(expected_repr, unit.__repr__())

        newUnit = eval(unit.__repr__())
        self.assertEqual(unit.a(), newUnit.a())
        self.assertEqual(unit.b(), newUnit.b())
        self.assertEqual(unit.c(), newUnit.c())

        self.assertEqual(unit.alpha(), newUnit.alpha())
        self.assertEqual(unit.beta(), newUnit.beta())
        self.assertEqual(unit.gamma(), newUnit.gamma())
Exemple #14
0
    def test_find_bases_with_non_orthogonal_cell(self):
        cell = UnitCell(1, 1, 1, 90, 95, 103)
        cart_cell = cell.getB()
        qs = np.array([
            [.5, 0, 0],
            [0, .5, 0],
            [0, 0, .5],
            [0, 0, .25],
        ])

        qs = np.dot(qs, cart_cell)

        ndim, bases = indexing.find_bases(qs, 1e-5)
        self.assertEqual(ndim, 3, "Number of dimensions must be 3")

        expected_bases = np.array([[0., 0., 0.25], [0., .5, 0.],
                                   [0.51521732, 0.11589868, 0.04490415]])

        npt.assert_almost_equal(bases,
                                expected_bases,
                                err_msg="Basis vectors do not match")
    def test_find_bases_with_non_orthogonal_cell(self):
        cell = UnitCell(1, 1, 1, 90, 95, 103)
        cart_cell = cell.getB()
        qs = np.array([
            [.5, 0, 0],
            [0, .5, 0],
            [0, 0, .5],
            [0, 0, .25],
        ])

        qs = np.dot(qs, cart_cell)

        ndim, bases = indexing.find_bases(qs, 1e-5)
        self.assertEqual(ndim, 3, "Number of dimensions must be 3")

        expected_bases = np.array([
            [0., 0., 0.25],
            [0., .5, 0.],
            [0.51521732, 0.11589868, 0.04490415]
        ])

        npt.assert_almost_equal(bases, expected_bases, err_msg="Basis vectors do not match")
    def test_find_indexing_with_non_orthogonal_cell(self):
        cell = UnitCell(1, 1, 1, 90, 95, 103)
        cart_cell = cell.getB()
        qs = np.array([
            [.5, 0, 0],
            [0, .5, 0],
            [0, 0, .5],
            [0, 0, .25],
        ])

        qs = np.dot(qs, cart_cell)

        indices = indexing.index_q_vectors(qs)

        expected_indexing = np.array([
            [0, 0, 1],
            [0, 1, 0],
            [2, 0, 0],
            [1, 0, 0]
        ])

        npt.assert_equal(indices, expected_indexing, err_msg="Indexing does not match expected.")
Exemple #17
0
    def test_getAtoms_aniso_b_orthogonal(self):
        bElements = {'11': [u'1.0', u'2.0'], '12': [u'0.0', u'0.0'], '13': [u'0.0', u'0.0'],
                     '22': [u'1.0', u'2.0'], '23': [u'0.0', u'0.0'], '33': [u'4.0', u'5.0']}

        bDict = dict([(u'_atom_site_aniso_b_{0}'.format(key), value) for key, value in iteritems(bElements)])
        bDict.update(dict([(u'_atom_site_label', [u'Si', u'Al']),
                           (u'_atom_site_aniso_label', [u'Si', u'Al'])
                           ]))

        data = self._getData(bDict)
        cell = UnitCell(5.4, 4.3, 3.2)

        self.assertEqual(self.builder._getAtoms(data, cell),
                         'Si 1/8 1/8 1/8 1.0 0.02533;Al 0.34 0.56 0.23 1.0 0.038')
Exemple #18
0
    def test_getAtoms_aniso_u_orthogonal(self):
        uElements = {'11': [u'0.01', u'0.02'], '12': [u'0.0', u'0.0'], '13': [u'0.0', u'0.0'], '22': [u'0.01', u'0.02'],
                     '23': [u'0.0', u'0.0'], '33': [u'0.04', u'0.05']}

        uDict = dict([(u'_atom_site_aniso_u_{0}'.format(key), value) for key, value in iteritems(uElements)])
        uDict.update(dict([(u'_atom_site_label', [u'Si', u'Al']),
                           (u'_atom_site_aniso_label', [u'Si', u'Al'])
                           ]))

        data = self._getData(uDict)
        cell = UnitCell(5.4, 4.3, 3.2)

        # u_equiv should be (0.01 + 0.01 + 0.04)/3 = 0.02 and (0.2 + 0.2 + 0.5)/3 = 0.03
        self.assertEqual(self.builder._getAtoms(data, cell),
                         'Si 1/8 1/8 1/8 1.0 0.02;Al 0.34 0.56 0.23 1.0 0.03')
Exemple #19
0
    def test_getAtoms_iso_preferred(self):
        uElements = {'11': [u'0.01', u'0.02'], '12': [u'0.0', u'0.0'], '13': [u'0.0', u'0.0'],
                     '22': [u'0.01', u'0.02'], '23': [u'0.0', u'0.0'], '33': [u'0.04', u'0.05']}

        uDict = dict([(u'_atom_site_aniso_u_{0}'.format(key), value) for key, value in iteritems(uElements)])
        uDict.update(dict([(u'_atom_site_label', [u'Si', u'Al']),
                           (u'_atom_site_aniso_label', [u'Si', u'Al']),
                           (u'_atom_site_u_iso_or_equiv', [u'0.01', u'0.02'])
                           ]))

        data = self._getData(uDict)
        cell = UnitCell(5.4, 4.3, 3.2)

        self.assertEqual(self.builder._getAtoms(data, cell),
                         'Si 1/8 1/8 1/8 1.0 0.01;Al 0.34 0.56 0.23 1.0 0.02')
Exemple #20
0
    def test_isInvariant_tolerance(self):
        pg3barHex = PointGroupFactory.createPointGroup('-3')
        pg3barRh = PointGroupFactory.createPointGroup('-3 r')

        cellHex = UnitCell(3, 3, 6, 90, 90, 120)
        cellRh = UnitCell(3, 3, 3, 75, 75, 75)

        self.assertTrue(pg3barHex.isInvariant(cellHex.getG()))
        self.assertFalse(pg3barHex.isInvariant(cellRh.getG()))

        self.assertTrue(pg3barRh.isInvariant(cellRh.getG()))
        self.assertFalse(pg3barRh.isInvariant(cellHex.getG()))
Exemple #21
0
    def test_getModVec_returns_v3d(self):
        unit = UnitCell(3, 3, 3)

        self.assertTrue(isinstance(unit.getModVec(0), V3D))
        self.assertTrue(isinstance(unit.getModVec(1), V3D))
        self.assertTrue(isinstance(unit.getModVec(2), V3D))
Exemple #22
0
    def test_simple_constructor(self):
        u1 = UnitCell()
        self.assertEquals(u1.a1(), 1)
        self.assertEquals(u1.alpha(), 90)

        u2 = UnitCell(3, 4, 5)
        self.assertAlmostEquals(u2.b1(), 1. / 3., 10)
        self.assertAlmostEquals(u2.alphastar(), 90, 10)

        u4 = u2
        self.assertAlmostEquals(u4.volume(), 1. / u2.recVolume(), 10)
        u2.seta(3)
        self.assertAlmostEquals(u2.a(), 3, 10)
Exemple #23
0
    def test_getMaxOrder_returns_int(self):
        unit = UnitCell(3, 3, 3)

        self.assertTrue(isinstance(unit.getMaxOrder(), int))
Exemple #24
0
    def test_setMaxOrder_accepts_int(self):
        unit = UnitCell(3, 3, 3)

        unit.setMaxOrder(2)

        self.assertEquals(2, unit.getMaxOrder())