Source code for proteindf_bridge.bond

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Copyright (C) 2014 The ProteinDF development team.
# see also AUTHORS and README if provided.
# 
# This file is a part of the ProteinDF software package.
# 
# The ProteinDF is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# The ProteinDF is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with ProteinDF.  If not, see <http://www.gnu.org/licenses/>.

from .matrix import SymmetricMatrix
from .atomgroup import AtomGroup


[docs] class Bond(object): """ """ def __init__(self): """ """ self._atoms = [] self._distmat = None self._bondmat = None
[docs] def setup(self, mol): """ """ self._list_atoms(mol) self._make_distance_matrix() self._make_bond_matrix() num_of_atoms = len(self._atoms) for p in range(num_of_atoms): for q in range(p): b = self._bondmat.get(p, q) if b > 0: mol.add_bond(self._atoms[p], self._atoms[q], int(b))
def _make_bond_matrix(self): """ Create the bond matrix. """ num_of_atoms = len(self._atoms) self._bondmat = SymmetricMatrix(num_of_atoms) for p in range(num_of_atoms): vdw_p = self._atoms[p].vdw for q in range(p): vdw_q = self._atoms[q].vdw r = self._distmat.get(p, q) if r <= (vdw_p + vdw_q) + 0.4: self._bondmat.set(p, q, 1) else: self._bondmat.set(p, q, 0) def _make_distance_matrix(self): """ Create the distance matrix. """ num_of_atoms = len(self._atoms) self._distmat = SymmetricMatrix(num_of_atoms) for p in range(num_of_atoms): for q in range(p): d = self._atoms[p].xyz.distance_from(self._atoms[q].xyz) self._distmat.set(p, q, d) def _list_atoms(self, mol): assert(isinstance(mol, AtomGroup)) for key, atomgroup in mol.groups(): self._list_atoms(atomgroup) for key, atom in mol.atoms(): self._atoms.append(atom)
if __name__ == "__main__": import doctest doctest.testmod()