Python 氨基酸结合位点发现,蛋白质数据库

Python 氨基酸结合位点发现,蛋白质数据库,python,distance,chain,protein-database,Python,Distance,Chain,Protein Database,我试图找出属于两条不同链的两个原子是否会被认为是“束缚的”。这是基于这样一个事实,即如果距离(欧几里得,可以通过给定的x,y,z坐标找到)小于两个原子的范德华加上0.5A,则认为它是有界的。问题是我不知道如何计算每个原子的范德华。因为在PDB中,原子名类似于CB1、CA等,而不是单个原子。例如,我知道N的瓦尔斯半径。我可以编写代码来计算原子之间的原子距离,但我没有完成范德瓦尔斯部分,这是必不可少的。以下是我编写的代码,用于从PDB的两条链和链接中提取信息: 我可以在这两条链之间创建for环,并

我试图找出属于两条不同链的两个原子是否会被认为是“束缚的”。这是基于这样一个事实,即如果距离(欧几里得,可以通过给定的x,y,z坐标找到)小于两个原子的范德华加上0.5A,则认为它是有界的。问题是我不知道如何计算每个原子的范德华。因为在PDB中,原子名类似于CB1、CA等,而不是单个原子。例如,我知道N的瓦尔斯半径。我可以编写代码来计算原子之间的原子距离,但我没有完成范德瓦尔斯部分,这是必不可少的。以下是我编写的代码,用于从PDB的两条链和链接中提取信息:

我可以在这两条链之间创建for环,并比较距离,只要我知道如何计算可能相互作用的两个原子之间的范德华半径

编辑:我决定继续前进,假设每个原子都是第一个字母,这样CB,OG1,分别是碳和氧,将取它们的范德华值。尽管如此,我仍在努力编写代码来创建两条链之间的for循环,并以 如果“Vanderwaalsofatomfchaina+Vanderwaalsofatomfchainb+0.5”>“基于欧几里得公式的距离”:等

编辑:我设法将范德瓦尔斯半径添加到链A和链B中的每个列表中。代码如下:

for z in w:
    if z[2][0] == 'N':
        z.append(1.55)
    if z[2][0] == 'O':
        z.append(1.52)
    if z[2][0] == 'C':
        z.append(1.7)
    if z[2][0] == 'S':
        z.append(1.8)
    if z[2][0] == 'H':
        z.append(1.2)
但我所需要的只是找出如何为这两条链创建for循环。我的意思是我必须比较A和B的所有原子。每个列表中的槽给出了范德瓦尔斯半径,我需要计算每个列表A的12加上每个列表B的12加0.5,并将其与欧几里得公式进行比较

最终编辑:写了这段代码,但它不工作!基于这个想法,我必须比较链A和链B的每个元素

A_binding = []
B_binding = []
for x,y in zip(Chain_A, Chain_B):
    if x[12] + y[12] + 0.5 > sqrt((float(x[6])-float(y[6]))**2 + (float(x[7])-float(y[7]))**2 + (float(x[8])-float(y[8]))**2):
        A_binding.append(x)
        B_binding.append(y)
print A_binding
print B_binding

也许这可以帮助你:

您感兴趣的部分是epsilon_vdw_PDB()[0]。它给出所有原子的范德瓦尔兹值。这个文件来自我最近做的一个项目,是我的老师给我的


顺便问一下,为什么不做2个for循环呢?一个用于链A,另一个用于链B。我没有尝试您的代码,但A的长度可能与B不同。当您使用zip()时,我认为()内的两个对象的长度必须相等(未验证)。

通常,相互作用的原子是使用4埃距离截止来识别的。使用
Bio.PDB
中的
NeighborSearch
。它速度很快,而且会使您的脚本更短。

为什么不使用一些化学信息学库来完成繁重的工作呢?因为我必须编写脚本。我现在要对实际代码做更多的编辑,我做了一些事情,它可能会起作用。
A_binding = []
B_binding = []
for x,y in zip(Chain_A, Chain_B):
    if x[12] + y[12] + 0.5 > sqrt((float(x[6])-float(y[6]))**2 + (float(x[7])-float(y[7]))**2 + (float(x[8])-float(y[8]))**2):
        A_binding.append(x)
        B_binding.append(y)
print A_binding
print B_binding