コード例 #1
0
ファイル: molecule.py プロジェクト: JLuebben/Laue-Script
    def iter_atom_pairs(self, bound=True, unique=True, sort=True):
        """
        Iterator iterating over all pairs of atoms in the molecule
        'exp'

        :param bound: Boolean specifying whether all atom pairs are
        returned or only those with chemical bonds between them.
        """
        blacklist = []
        for atom1 in self.iter_atoms(sort=sort):
            # for atom2 in self.iter_atoms(sort=sort):
            if bound:
                for atom2 in atom1.partner:
                    # if not atom1 == atom2:
                        if not bound or is_bound(atom1.cart, atom1.element, atom2.cart, atom2.element):
                            blackstring = '{}{}'.format(*sorted([atom1.name, atom2.name]))
                            if unique and not blackstring in blacklist:
                                yield atom1, atom2
                                blacklist.append(blackstring)
                            elif not unique:
                                yield atom1, atom2
                        else:
                            break
            else:
                for atom2 in self.iter_atoms(sort=sort):
                    if not atom1 == atom2:
                        yield atom1, atom2
コード例 #2
0
ファイル: ringstest.py プロジェクト: JLuebben/APD-Toolkit
def find_rings(atoms):
    graph = Graph()
    for i, atom1 in enumerate(atoms):
        for atom2 in atoms[i+1:]:
            if is_bound(atom1.cart, atom1.element, atom2.cart, atom2.element):
                graph.add_edge(atom1.name, atom2.name)
    ring_list = cycle_basis(graph)
    return ring_list
コード例 #3
0
ファイル: molecule.py プロジェクト: JLuebben/Laue-Script
 def _get_bonds(self, unique=True, hydrogen=True):
     for atom1 in self.atom_dict.values():
         for atom2 in self.atom_dict.values():
             if not atom1 == atom2:
                 if hydrogen == False and (atom1.get_element() == 'H' or atom2.get_element() == 'H'):
                     continue
                 if is_bound(atom1.get_cart(),
                             atom1.get_element(),
                             atom2.get_cart(),
                             atom2.get_element()):
                     bondatoms = [atom1.get_id(), atom2.get_id()]
                     if unique:
                         bondatoms = sorted(bondatoms)
                     bondatoms = ':'.join(bondatoms)
                     self.bonds[bondatoms] = [atom1, atom2]
コード例 #4
0
ファイル: rings.py プロジェクト: JLuebben/Laue-Script
def find_rings(atoms, bonds=None):
    graph = Graph()
    # bonds = None
    class DummyMolecule(object):
        pass
    mol = DummyMolecule()
    mol.atoms = atoms
    if bonds is None:
        for atom1, atom2 in iter_atom_pairs():
            graph.add_edge(atom1.name, atom2.name)
    else:
        blacklist = []
        for b in bonds:
            for atom2i in b[1:10]:
                string = ' : '.join(sorted([atoms[b[0]].name, atoms[atom2i].name]))
                if not string in blacklist:
                    if is_bound(atoms[b[0]].cart, atoms[b[0]].element, atoms[atom2i].cart, atoms[atom2i].element):
                        graph.add_edge(atoms[b[0]].name, atoms[atom2i].name)
                    blacklist.append(string)
    ring_list = cycle_basis(graph)
    return ring_list