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)
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)
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)
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(' ()'))
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)