Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用biopython的分子内蛋白质残基接触图谱,KeyError:';CA';_Python_Biopython_Pdb - Fatal编程技术网

使用biopython的分子内蛋白质残基接触图谱,KeyError:';CA';

使用biopython的分子内蛋白质残基接触图谱,KeyError:';CA';,python,biopython,pdb,Python,Biopython,Pdb,我正试图识别3D蛋白质结构中接触的氨基酸残基。我对BioPython很陌生,但发现了这个有用的网站 在他们的引导下(我将在这里复制完成;但是请注意,我使用的是不同的蛋白质): 但是,当我运行上述代码时,会收到以下错误消息: Traceback (most recent call last): File "<ipython-input-26-7239fb7ebe14>", line 4, in <module> dist_matrix = calc_dist_

我正试图识别3D蛋白质结构中接触的氨基酸残基。我对BioPython很陌生,但发现了这个有用的网站

在他们的引导下(我将在这里复制完成;但是请注意,我使用的是不同的蛋白质):

但是,当我运行上述代码时,会收到以下错误消息:

Traceback (most recent call last):

  File "<ipython-input-26-7239fb7ebe14>", line 4, in <module>
    dist_matrix = calc_dist_matrix(model["A"], model["A"])

  File "<ipython-input-3-730a11883f27>", line 15, in calc_dist_matrix
    answer[row, col] = calc_residue_dist(residue_one, residue_two)

  File "<ipython-input-3-730a11883f27>", line 6, in calc_residue_dist
    diff_vector  = residue_one["CA"].coord - residue_two["CA"].coord

  File "/Users/anaconda/lib/python3.6/site-packages/Bio/PDB/Entity.py", line 39, in __getitem__
    return self.child_dict[id]

KeyError: 'CA'
回溯(最近一次呼叫最后一次):
文件“”,第4行,在
距离矩阵=计算距离矩阵(模型[“A”],模型[“A”])
计算距离矩阵中第15行的文件“”
答案[行,列]=计算剩余量分布(剩余量1,剩余量2)
文件“”,第6行,位于计算区
diff_vector=resident_one[“CA”]。坐标-resident_two[“CA”]。坐标
文件“/Users/anaconda/lib/python3.6/site packages/Bio/PDB/Entity.py”,第39行,在__
返回self.child_dict[id]
KeyError:'CA'
关于如何解决这个问题有什么建议吗?

所以我一直在测试(请记住我对Bio知之甚少),看起来您的
1qhw.pdb
文件与该示例中的文件非常不同

pdb_code = '1qhw'
structure = Bio.PDB.PDBParser().get_structure(pdb_code, pdb_filename)
model = structure[0]
接下来,为了看看里面有什么,我做了:

print(list(model))
这给了我:

[<Chain id=A>]
给出下一个dict。此级别是传递给导致错误的函数的级别。使用以下内容打印此文件:

print(list(test))
给了我一个巨大的列表里面的数据,包括大量的残留物和相关信息。但至关重要的是,没有
CA
。尝试使用此选项查看内部内容并修改行:

diff_vector  = residue_one["CA"].coord - residue_two["CA"].coord
为反映您的需求,请在适当的情况下更换
CA

我希望这会有所帮助,但要想变得更具体,这有点棘手。

我认为问题在于模型[“a”]中的某些元素不是氨基酸,因此不包含“CA”

为了解决这个问题,我编写了一个只返回氨基酸残基的新函数:

from Bio.PDB import *
chain = model["A"]

def aa_residues(chain):
        aa_only = []
        for i in chain:
            if i.get_resname() in standard_aa_names:
                aa_only.append(i)
        return aa_only

    AA_1 = aa_residues(model["A"])
    dist_matrix = calc_dist_matrix(AA_1, AA_1)

获得蛋白质链接触图谱的另一个解决方案是使用随附的

是专门设计用于处理预测联系人的库,但具有从PDB文件中提取联系人的功能:

>>> from conkit.io.PdbIO import PdbParser
>>> p = PdbParser()
>>> with open("1qhw.pdb", "r") as pdb_fhandle:
...     pdb = p.read(pdb_fhandle, f_id="1QHW", atom_type="CA")
>>> print(pdb)
ContactFile(id="1QHW_0" nmaps=1
这会将PDB文件读入
PDB
变量,该变量存储内部层次结构。在此示例中,如果参与的CA原子彼此之间的距离在8Å以内,则认为两个残基接触

要访问这些信息,您可以遍历并访问每个,在您的情况下,这对应于链A的分子内接触

>>> for cmap in pdb:
...     print(cmap)
ContactMap(id="A", ncontacts=1601)
如果你有不止一条链,那么每条链都会有一条,并且链之间的分子间接触会有另外一条

链A包含1601个触点对。您可以通过迭代或索引来访问每个数据库中的实例。两者都很好

>>> print(cmap[0])
Contact(id="(26, 27)" res1="S" res1_chain="A" res1_seq=26 res2="T" res2_chain="A" res2_seq=27 raw_score=0.961895)
层次结构中的每个级别都有各种功能,您可以使用这些功能操作联系人映射。可以找到例子。

如果你的结构中有杂原子(水、离子等;任何不是氨基酸或核酸的东西),用以下方法去除它们:

for residue in chain:
    if residue.id[0] != ' ':
        chain.detach_child(residue.id)

这将从整个结构中删除它们。如果要保留杂原子以供进一步分析,您可能需要修改。

查看错误消息,没有名为“CA”的密钥。如果不知道输入文件是什么,很难提供更多帮助。您可能需要检查加载的dict是否符合预期。可以在此处找到输入文件:。右上->“下载文件”->“PDB格式”?您可能可以使用此提供的功能来代替:
from Bio.PDB.Polypeptide import is_aa
>>> print(cmap[0])
Contact(id="(26, 27)" res1="S" res1_chain="A" res1_seq=26 res2="T" res2_chain="A" res2_seq=27 raw_score=0.961895)
for residue in chain:
    if residue.id[0] != ' ':
        chain.detach_child(residue.id)