sagar.molecule.derive 源代码

# -*- coding: utf-8 -*-
import numpy
from itertools import combinations

from sagar.molecule.structure import Molecule
from sagar.toolkit.derivetool import remove_redundant

[文档]class ConfigurationGenerator(object): ''' 这个类用于产生各种替换原子的需求 ''' def __init__(self, mol, symprec=1e-3): if not isinstance(mol, Molecule): raise TypeError( "want sagar.molecule.structure.molecule, got {:}". format(type(mol))) self.mol = mol self.perms = mol.get_symmetry_permutation(symprec)
[文档] def get_configurations(self, sites, e_num): ''' get_configurations output specific molecule for specific concentration. parameters: sites: list of (lists or tuples), represent element disorder of each sites e_num: tuple, number of atoms in disorderd sites. yield: a tuple tuple[0]: Cell object, a list of non-redundant configurations of certain volume supercell. tuple[1]: int object, degeneracy of the configuration in all configurations of this volume. ''' perms = self.perms mol_positions = self.mol.positions for pa, d in remove_redundant(mol_positions, sites, perms, e_num=e_num): m = Molecule(pa[0], pa[1]) yield (m, d)