Example #1
0
    def __init__(self, structure, symprec=1e-5, angle_tolerance=5):
        """
        Args:
            structure:
                Structure object
            symprec:
                Tolerance for symmetry finding
            angle_tolerance:
                Angle tolerance for symmetry finding.
        """
        self._symprec = symprec
        self._angle_tol = angle_tolerance
        self._structure = structure
        self._lattice = structure.lattice.matrix
        self._positions = np.array([site.frac_coords for site in structure])
        unique_species = []
        zs = []

        for species, g in itertools.groupby(structure, key=lambda site: site.species_and_occu):
            try:
                ind = unique_species.index(species)
                zs.extend([ind + 1] * len(tuple(g)))
            except ValueError:
                unique_species.append(species)
                zs.extend([len(unique_species)] * len(tuple(g)))

        self._unique_species = unique_species
        self._numbers = np.array(zs)

        self._spacegroup_data = spg.spacegroup(self._lattice.transpose().copy(), self._positions.copy(), self._numbers, self._symprec, self._angle_tol)
Example #2
0
def get_spacegroup(bulk, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """
    # Atomic positions have to be specified by scaled positions for spglib.
    return spg.spacegroup(bulk.get_cell().T.copy(),
                          bulk.get_scaled_positions().copy(),
                          np.intc(bulk.get_atomic_numbers()).copy(), symprec,
                          angle_tolerance)
Example #3
0
def get_spacegroup(bulk, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """
    # Atomic positions have to be specified by scaled positions for spglib.
    return spg.spacegroup(bulk.get_cell().T.copy(),
                          bulk.get_scaled_positions().copy(),
                          np.intc(bulk.get_atomic_numbers()).copy(),
                          symprec,
                          angle_tolerance)
Example #4
0
def get_spacegroup(bulk, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """
    # Atomic positions have to be specified by scaled positions for spglib.
    return spg.spacegroup(
        np.array(bulk.get_cell().T, dtype='double', order='C'),
        np.array(bulk.get_scaled_positions(), dtype='double', order='C'),
        np.array(bulk.get_atomic_numbers(), dtype='intc'),
        symprec,
        angle_tolerance)
Example #5
0
def get_spacegroup(structure, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """
    cell = structure.cell.T.copy(),
    scaled = structure.site_coords.copy()
    comps = structure.site_compositions
    numbers = [comps.index(c) for c in comps]
    numbers = np.array(numbers, dtype='intc')
    # Atomic positions have to be specified by scaled positions for spglib.
    return int(
        spg.spacegroup(cell, coords, numbers, symprec,
                       angle_tolerance).strip(' ()'))
def get_spacegroup(structure, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """
    cell = structure.cell.T.copy(),
    scaled = structure.site_coords.copy()
    comps = structure.site_compositions
    numbers = [ comps.index(c) for c in comps ]
    numbers = np.array(numbers, dtype='intc')
    # Atomic positions have to be specified by scaled positions for spglib.
    return int(spg.spacegroup(cell,
                          coords,
                          numbers,
                          symprec,
                          angle_tolerance).strip(' ()'))
Example #7
0
def get_spacegroup(bulk, symprec=1e-5, angle_tolerance=-1.0):
    """
    Return space group in international table symbol and number
    as a string.
    """

    lattice = np.array(bulk.cell * bulk.scale, dtype='double', order='C')
    #    print 'vladan get_spacegroup: lattice:\n', lattice

    posMat = np.array([
        np.dot(atom.pos, np.linalg.inv(np.transpose(bulk.cell)))
        for atom in bulk
    ],
                      dtype='double',
                      order='C')
    #    print 'vladan get_spacegroup: posMat:\n', posMat

    syms = np.array(
        [periodic_table.symbols.index(atom.type) + 1 for atom in bulk],
        dtype='intc')
    #    print 'vladan get_spacegroup: syms:\n', syms

    # Atomic positions have to be specified by scaled positions for spglib.
    return spg.spacegroup(lattice, posMat, syms, symprec, angle_tolerance)