Source code for cafepy.core.calc_distance
#!/usr/bin/env python3
# fileencoding:utf-8
"""
:Editer: Mogu
:Version: 0.0.1dev
:environment: Pyton3.5.1
*contants*
* CalcDistance: provide calculating the distance.
This class caluclates the distance between atoms from [dcd, pdb]-files.
example:
cafepy distance -f test.dcd[.pdb]
"""
from scipy.spatial.distance import euclidean as euc
from ..utils.cafepy_base import CafePyBase
[docs]class CalcDistance(CafePyBase):
"""
Calculating the distance between atoms.
*Examples*
.. code-block:: python
# filename = [pdb, dcd]-file
tmp = CalcDistance(filename)
tmp.calcDist()
tmp.dist_data()
.. code-block:: bash
# pycafe.py com -i [dcd,pdb]-infile [optional: -o outfile, -n index.file or int-value]
*Members*
:self.index: Index class.
:self.filename: dcd or pdb file path.
:self.pairlist: this values is came from self.index.
:self.dist_data: contains result after calculating pair distances.
"""
def __init__(self, filename, index=''):
self.index = []
self.filename = filename
self.data = self.read(filename)
self.index = self.getIndex(index)
self.pairlist = self.makePair(self.index)
self.dist_data = [[] for i in range(len(self.pairlist))]
[docs] def run(self):
'''
calculate distances between given pairs.
:inputs: None
:return: results
'''
out = []
if self.data.ftype == 'dcd':
out = self._calcDistDCD()
elif self.data.ftype == 'pdb':
out = self._calcDistPDB()
return out
[docs] def _calcDistDCD(self):
'''
calculate distances between given pairs from PDB files.
this class is called from self.calcDist()
:args:
:return: Distances (list)
'''
for icoord in self.data:
for i, pair in enumerate(self.pairlist):
self.dist_data[i].append(euc(icoord[pair[0]], icoord[pair[1]]))
return self.dist_data
[docs] def _calcDistPDB(self):
'''
calculate distances between given pairs from PDB files.
this class is called from self.calcDist()
:args:
:return: Distances (list)
'''
for i, pair in enumerate(self.pairlist):
self.dist_data[i] = euc(self.data[pair[0]], self.data[pair[1]])
return self.dist_data
[docs] def makePair(self, index_list):
'''
make pairs from index[list-foarmat]
:Args: index_list (list)
:return: pairs (list)
'''
pairlist = []
for i in range(len(index_list))[::2]:
pairlist.append([index_list[i], index_list[i+1]])
return pairlist
[docs] def getIndex(self, index):
'''
get indexes from file for list.
:Args: index (filename or list-format)
:return: self.index ( list-format )
'''
if isinstance(index, str):
self.index = self.read(index).data
elif isinstance(index, list):
self.index = index
if len(self.index)%2 != 0:
msg = 'len(index) must be an even number.'
raise Exception(msg)
return self.index
def writeFile(self):
pass
def writeShow(self):
pass