Skip to content

PymatgenStructConverter

PymatgenStructureConverter

A PymatgenStructureConverter provides utilities for converting pylattica PeriodicStructure and Lattice objects to pymatgen's Structure and Lattice objects.

Source code in pylattica/atomic/pymatgen_struct_converter.py
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
class PymatgenStructureConverter:
    """A PymatgenStructureConverter provides utilities for converting pylattica
    PeriodicStructure and Lattice objects to pymatgen's Structure and Lattice objects.
    """

    def to_pylattica_lattice(self, pmg_lat: PmgLattice) -> PylLattice:
        """Converts a pymatgen Lattice to a pylattica Lattice

        Parameters
        ----------
        pmg_lat : PmgLattice
            The pymatgen lattice to convert

        Returns
        -------
        Lattice
            A pylattica lattice
        """
        pyl_lat = PylLattice(pmg_lat.matrix)
        return pyl_lat

    def to_pylattica_structure_builder(
        self, pmg_struct: PmgStructure
    ) -> StructureBuilder:
        """Converts a pymatgen Structure into a pylattica StructureBuilder which
        can be used to build pylattica Structures with the same symmetry as the
        input pymatgen Structure.

        Parameters
        ----------
        pmg_struct : PmgStructure
            The pymatgen structure to convert

        Returns
        -------
        StructureBuilder
            The resulting StructureBuilder
        """
        lat = self.to_pylattica_lattice(pmg_struct.lattice)

        struct_motif = {}

        for site in pmg_struct.sites:
            site_cls = site.species_string
            frac_coords = site.frac_coords

            if site_cls in struct_motif:
                struct_motif.get(site_cls).append(frac_coords)
            else:
                struct_motif[site_cls] = [frac_coords]

        struct_builder = StructureBuilder(lat, struct_motif)
        struct_builder.frac_coords = True
        return struct_builder

    def to_pylattica_structure_and_state(
        self, pmg_struct: PmgStructure
    ) -> Tuple[PeriodicStructure, SimulationState]:
        """Converts a pymatgen Structure into a pylattica StructureBuilder which
        can be used to build pylattica Structures with the same symmetry as the
        input pymatgen Structure.

        Parameters
        ----------
        pmg_struct : PmgStructure
            The pymatgen structure to convert

        Returns
        -------
        StructureBuilder
            The resulting StructureBuilder
        """
        struct_builder = self.to_pylattica_structure_builder(pmg_struct)

        struct = struct_builder.build(1)
        state = SimulationState.from_struct(struct)
        for site in pmg_struct.sites:
            site_id = struct.site_at(site.coords)[SITE_ID]
            state.set_site_state(site_id, {DISCRETE_OCCUPANCY: site.species_string})

        return struct, state

    def to_pymatgen_lattice(self, pyl_lat: PylLattice) -> PmgLattice:
        """Converts a pylattica Lattice object into a pymatgen Lattice object.

        Parameters
        ----------
        pyl_lat : PylLattice
            The pylattica Lattice to convert

        Returns
        -------
        PmgLattice
            The resulting pymatgen Lattice
        """
        return PmgLattice(pyl_lat.vecs)

    def to_pymatgen_structure(self, pyl_struct: PeriodicStructure) -> PmgStructure:
        """Converts a pylattica PeriodicStructure into a pymatgen

        Parameters
        ----------
        pyl_struct : PeriodicStructure
            The pylattica PeriodicStructure to convert

        Returns
        -------
        PmgStructure
            The resulting pymatgen Structure
        """
        pmg_lat = self.to_pymatgen_lattice(pyl_struct.lattice)

        species = []
        coords = []

        for sid in pyl_struct.site_ids:
            species.append(pyl_struct.site_class(sid))
            coords.append(
                pyl_struct.lattice.get_fractional_coords(pyl_struct.site_location(sid))
            )

        return PmgStructure(pmg_lat, species, coords)

to_pylattica_lattice(pmg_lat)

Converts a pymatgen Lattice to a pylattica Lattice

Parameters
PmgLattice

The pymatgen lattice to convert

Returns

Lattice A pylattica lattice

Source code in pylattica/atomic/pymatgen_struct_converter.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def to_pylattica_lattice(self, pmg_lat: PmgLattice) -> PylLattice:
    """Converts a pymatgen Lattice to a pylattica Lattice

    Parameters
    ----------
    pmg_lat : PmgLattice
        The pymatgen lattice to convert

    Returns
    -------
    Lattice
        A pylattica lattice
    """
    pyl_lat = PylLattice(pmg_lat.matrix)
    return pyl_lat

to_pylattica_structure_and_state(pmg_struct)

Converts a pymatgen Structure into a pylattica StructureBuilder which can be used to build pylattica Structures with the same symmetry as the input pymatgen Structure.

Parameters
PmgStructure

The pymatgen structure to convert

Returns

StructureBuilder The resulting StructureBuilder

Source code in pylattica/atomic/pymatgen_struct_converter.py
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
def to_pylattica_structure_and_state(
    self, pmg_struct: PmgStructure
) -> Tuple[PeriodicStructure, SimulationState]:
    """Converts a pymatgen Structure into a pylattica StructureBuilder which
    can be used to build pylattica Structures with the same symmetry as the
    input pymatgen Structure.

    Parameters
    ----------
    pmg_struct : PmgStructure
        The pymatgen structure to convert

    Returns
    -------
    StructureBuilder
        The resulting StructureBuilder
    """
    struct_builder = self.to_pylattica_structure_builder(pmg_struct)

    struct = struct_builder.build(1)
    state = SimulationState.from_struct(struct)
    for site in pmg_struct.sites:
        site_id = struct.site_at(site.coords)[SITE_ID]
        state.set_site_state(site_id, {DISCRETE_OCCUPANCY: site.species_string})

    return struct, state

to_pylattica_structure_builder(pmg_struct)

Converts a pymatgen Structure into a pylattica StructureBuilder which can be used to build pylattica Structures with the same symmetry as the input pymatgen Structure.

Parameters
PmgStructure

The pymatgen structure to convert

Returns

StructureBuilder The resulting StructureBuilder

Source code in pylattica/atomic/pymatgen_struct_converter.py
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def to_pylattica_structure_builder(
    self, pmg_struct: PmgStructure
) -> StructureBuilder:
    """Converts a pymatgen Structure into a pylattica StructureBuilder which
    can be used to build pylattica Structures with the same symmetry as the
    input pymatgen Structure.

    Parameters
    ----------
    pmg_struct : PmgStructure
        The pymatgen structure to convert

    Returns
    -------
    StructureBuilder
        The resulting StructureBuilder
    """
    lat = self.to_pylattica_lattice(pmg_struct.lattice)

    struct_motif = {}

    for site in pmg_struct.sites:
        site_cls = site.species_string
        frac_coords = site.frac_coords

        if site_cls in struct_motif:
            struct_motif.get(site_cls).append(frac_coords)
        else:
            struct_motif[site_cls] = [frac_coords]

    struct_builder = StructureBuilder(lat, struct_motif)
    struct_builder.frac_coords = True
    return struct_builder

to_pymatgen_lattice(pyl_lat)

Converts a pylattica Lattice object into a pymatgen Lattice object.

Parameters
PylLattice

The pylattica Lattice to convert

Returns

PmgLattice The resulting pymatgen Lattice

Source code in pylattica/atomic/pymatgen_struct_converter.py
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
def to_pymatgen_lattice(self, pyl_lat: PylLattice) -> PmgLattice:
    """Converts a pylattica Lattice object into a pymatgen Lattice object.

    Parameters
    ----------
    pyl_lat : PylLattice
        The pylattica Lattice to convert

    Returns
    -------
    PmgLattice
        The resulting pymatgen Lattice
    """
    return PmgLattice(pyl_lat.vecs)

to_pymatgen_structure(pyl_struct)

Converts a pylattica PeriodicStructure into a pymatgen

Parameters
PeriodicStructure

The pylattica PeriodicStructure to convert

Returns

PmgStructure The resulting pymatgen Structure

Source code in pylattica/atomic/pymatgen_struct_converter.py
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
def to_pymatgen_structure(self, pyl_struct: PeriodicStructure) -> PmgStructure:
    """Converts a pylattica PeriodicStructure into a pymatgen

    Parameters
    ----------
    pyl_struct : PeriodicStructure
        The pylattica PeriodicStructure to convert

    Returns
    -------
    PmgStructure
        The resulting pymatgen Structure
    """
    pmg_lat = self.to_pymatgen_lattice(pyl_struct.lattice)

    species = []
    coords = []

    for sid in pyl_struct.site_ids:
        species.append(pyl_struct.site_class(sid))
        coords.append(
            pyl_struct.lattice.get_fractional_coords(pyl_struct.site_location(sid))
        )

    return PmgStructure(pmg_lat, species, coords)