首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取一组残余物的所有邻居

获取一组残余物的所有邻居
EN

Stack Overflow用户
提问于 2014-03-18 10:18:53
回答 1查看 2.2K关注 0票数 5

我在centerResidueList = [100, 140, 170, 53]中保存了一个残余数的列表,并且我试图从这组残余物中得到所有相邻的残余物。

目前,我正在使用下面的脚本,如果我处理整个PDB文件并生成一个原子对列表,距离为10.0,然后遍历该列表并检查all_neighbors列表中的剩余数是否与centerResidueList中的剩余数相对应。

代码语言:javascript
运行
复制
from Bio.PDB import *

centerResidueList = [100, 140, 170, 53]
neighbours_resi_number = []
structure = PDBParser().get_structure('X', "1xxx.pdb") 
atom_list = Selection.unfold_entities(structure, 'A') 
ns = NeighborSearch(atom_list)
all_neighbors = ns.search_all(10.0, "R") 
for residuepair in all_neighbors:
    resi_number = residuepair[0].id[1]
    if resi_number in centerResidueList:
        resi_number_partner = residuepair[1].id[1]
        neighbours_resi_number.append(resi_number_partner)

首先,如何只使用CA原子创建atom_list

第二,residuepair[0].id[1]是否是生成剩余数的正确方法(它可以工作,但是是否有一种方法可以得到这一点)?

最后,是否有更好的解决办法来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-18 16:14:29

使用NeighborSearch绝对是正确的主意--它构造了一个k-d树,它对最近的邻居执行非常快速的查找。

如果您只需要搜索几个残余物,我将对这些残余物的原子使用search()方法(也许只是它们的CA原子的速度)。这将比使用search_all()然后过滤更有效。我会回答你的两个问题,然后在底部提供一个完整的解决方案。

我如何才能仅仅使用CA原子创建atom_list?

您可以使用filter,也可以使用列表理解(我认为列表理解更易读):

代码语言:javascript
运行
复制
atom_list = [atom for atom in structure.get_atoms() if atom.name == 'CA']

第二,residuepair[0].id[1]是否是生成剩余数的正确方法(它可以工作,但是是否有一种方法可以得到这一点)?

这绝对是正确的方法。但是(这是一个重要的警告),请注意,这不会处理插入码的残余物。为什么不自己处理Residue对象呢?

我的代码:

代码语言:javascript
运行
复制
from Bio.PDB import NeighborSearch, PDBParser, Selection


structure = PDBParser().get_structure('X', "1xxx.pdb")

chain = structure[0]['A']  # Supply chain name for "center residues"
center_residues = [chain[resi] for resi in [100, 140, 170, 53]]
center_atoms = Selection.unfold_entities(center_residues, 'A')

atom_list = [atom for atom in structure.get_atoms() if atom.name == 'CA']
ns = NeighborSearch(atom_list)

# Set comprehension (Python 2.7+, use `set()` on a generator/list for < 2.7)
nearby_residues = {res for center_atom in center_atoms
                   for res in ns.search(center_atom.coord, 10, 'R')}

# Print just the residue number (WARNING: does not account for icodes)
print sorted(res.id[1] for res in nearby_residues)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22476337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档