Пример #1
0
def get_matched_structure_mapping(base: Structure, inserted: Structure,
                                  sm: StructureMatcher):
    """
    Get the mapping from the inserted structure onto the base structure,
    assuming that the inserted structure sans the working ion is some kind
    of SC of the base.

    Args:
        base: host structure, smaller cell
        inserted: bigger cell
        sm: StructureMatcher instance

    Returns:
        sc_m : supercell matrix to apply to s1 to get s2
        total-t : translation to apply on s1 * sc_m to get s2
    """
    s1, s2 = sm._process_species([base, inserted])
    fu, _ = sm._get_supercell_size(s1, s2)
    try:
        val, dist, sc_m, total_t, mapping = sm._strict_match(s1,
                                                             s2,
                                                             fu=fu,
                                                             s1_supercell=True)
    except TypeError:
        return None
    sc = s1 * sc_m
    sc.lattice = Lattice.from_parameters(*sc.lattice.abc,
                                         *sc.lattice.angles,
                                         vesta=True)  # type: ignore
    return sc_m, total_t
Пример #2
0
    def test_get_supercell_size(self):
        l = Lattice.cubic(1)
        l2 = Lattice.cubic(0.9)
        s1 = Structure(l, ['Mg', 'Cu', 'Ag', 'Cu', 'Ag'], [[0] * 3] * 5)
        s2 = Structure(l2, ['Cu', 'Cu', 'Ag'], [[0] * 3] * 3)

        sm = StructureMatcher(supercell_size='volume')
        self.assertEqual(sm._get_supercell_size(s1, s2), (1, True))
        self.assertEqual(sm._get_supercell_size(s2, s1), (1, True))

        sm = StructureMatcher(supercell_size='num_sites')
        self.assertEqual(sm._get_supercell_size(s1, s2), (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1), (2, True))

        sm = StructureMatcher(supercell_size='Ag')
        self.assertEqual(sm._get_supercell_size(s1, s2), (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1), (2, True))

        sm = StructureMatcher(supercell_size='wfieoh')
        self.assertRaises(ValueError, sm._get_supercell_size, s1, s2)
Пример #3
0
    def test_get_supercell_size(self):
        l = Lattice.cubic(1)
        l2 = Lattice.cubic(0.9)
        s1 = Structure(l, ["Mg", "Cu", "Ag", "Cu", "Ag"], [[0] * 3] * 5)
        s2 = Structure(l2, ["Cu", "Cu", "Ag"], [[0] * 3] * 3)

        sm = StructureMatcher(supercell_size="volume")
        self.assertEqual(sm._get_supercell_size(s1, s2), (1, True))
        self.assertEqual(sm._get_supercell_size(s2, s1), (1, True))

        sm = StructureMatcher(supercell_size="num_sites")
        self.assertEqual(sm._get_supercell_size(s1, s2), (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1), (2, True))

        sm = StructureMatcher(supercell_size="Ag")
        self.assertEqual(sm._get_supercell_size(s1, s2), (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1), (2, True))

        sm = StructureMatcher(supercell_size="wfieoh")
        self.assertRaises(ValueError, sm._get_supercell_size, s1, s2)
Пример #4
0
    def test_get_supercell_size(self):
        l = Lattice.cubic(1)
        l2 = Lattice.cubic(0.9)
        s1 = Structure(l, ['Mg', 'Cu', 'Ag', 'Cu', 'Ag'], [[0] * 3] * 5)
        s2 = Structure(l2, ['Cu', 'Cu', 'Ag'], [[0] * 3] * 3)

        sm = StructureMatcher(supercell_size='volume')
        self.assertEqual(sm._get_supercell_size(s1, s2),
                         (1, True))
        self.assertEqual(sm._get_supercell_size(s2, s1),
                         (1, True))

        sm = StructureMatcher(supercell_size='num_sites')
        self.assertEqual(sm._get_supercell_size(s1, s2),
                         (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1),
                         (2, True))

        sm = StructureMatcher(supercell_size='Ag')
        self.assertEqual(sm._get_supercell_size(s1, s2),
                         (2, False))
        self.assertEqual(sm._get_supercell_size(s2, s1),
                         (2, True))

        sm = StructureMatcher(supercell_size='wfieoh')
        self.assertRaises(ValueError, sm._get_supercell_size, s1, s2)
Пример #5
0
    def test_get_supercell_size(self):
        l = Lattice.cubic(1)
        l2 = Lattice.cubic(0.9)
        s1 = Structure(l, ['Mg', 'Cu', 'Ag', 'Cu', 'Ag'], [[0]*3]*5)
        s2 = Structure(l2, ['Cu', 'Cu', 'Ag'], [[0]*3]*3)

        sm = StructureMatcher(supercell_size='volume')
        result = sm._get_supercell_size(s1, s2)
        self.assertEqual(result[0], 1)
        self.assertEqual(result[1], True)

        result = sm._get_supercell_size(s2, s1)
        self.assertEqual(result[0], 1)
        self.assertEqual(result[1], True)

        sm = StructureMatcher(supercell_size='num_sites')
        result = sm._get_supercell_size(s1, s2)
        self.assertEqual(result[0], 2)
        self.assertEqual(result[1], False)

        result = sm._get_supercell_size(s2, s1)
        self.assertEqual(result[0], 2)
        self.assertEqual(result[1], True)
Пример #6
0
    def test_get_supercell_size(self):
        l = Lattice.cubic(1)
        l2 = Lattice.cubic(0.9)
        s1 = Structure(l, ['Mg', 'Cu', 'Ag', 'Cu', 'Ag'], [[0]*3]*5)
        s2 = Structure(l2, ['Cu', 'Cu', 'Ag'], [[0]*3]*3)

        sm = StructureMatcher(supercell_size='volume')
        result = sm._get_supercell_size(s1, s2)
        self.assertEqual(result[0], 1)
        self.assertEqual(result[1], True)

        result = sm._get_supercell_size(s2, s1)
        self.assertEqual(result[0], 1)
        self.assertEqual(result[1], True)

        sm = StructureMatcher(supercell_size='num_sites')
        result = sm._get_supercell_size(s1, s2)
        self.assertEqual(result[0], 2)
        self.assertEqual(result[1], False)

        result = sm._get_supercell_size(s2, s1)
        self.assertEqual(result[0], 2)
        self.assertEqual(result[1], True)