2014-10-04 131 views
0

我想绘制一个分布alpha-cabonnitrogen键距离的泛素蛋白。所以我下载了1UBQ.pdb from RCSB website。现在使用biopython,我试图找到所有alpha-cabon(CA)nitrogen(N)债券之间的距离。任何人都可以帮助我理解并解决这个错误吗?

我试图做类似下面代码:

import sys 
#from Bio.PDB import * 
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt 

pdb1 ='/home/devanandt/Documents/VMD/1UBQ.pdb' 
sys.stdout = open('file_ubq', 'w') 
parser=PDBParser(PERMISSIVE=1) 

#file=open('1UBQ.pdb','r') 
#header_dict=parse_pdb_header(file) 
#file.close() 
i=1 
structure = parser.get_structure('1UBQ',pdb1) 
for model in structure: 
    for chain in model: 
     for residue in chain: 
      for atom in residue: 
       model = structure[0] 
       chain = model['A'] 
       residue_1 = chain[i] 
       atom_1 = residue_1['N'] 
       atom_2 = residue_1['CA'] 
       distance = atom_1-atom_2 
       #print atom.get_vector(),atom.name,distance 
       print distance 
       i=i+1 

#lines = loadtxt("file_ubq") 

而且我得到的文件“file_ubq”输出象下面这样:

1.47369 
1.4966 
1.47547 
1.51187 
1.44885 
1.50423 
1.47052 
1.48006 
1.50265 
. 
. 
. 
. 
1.48417 
1.47194 
1.45661 
1.47023 

但是旁边这一点,我有错误太像如下:

return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 
EXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 

EXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 
^CEXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 
EXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 

EXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 

EXECUTING: 
/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py 
---------------------------------------------- 
Traceback (most recent call last): 
    File "/home/devanandt/Documents/PYTHON/ubq/src/ubq_dist_pdf.py", line 38, in <module> 
    residue_1 = chain[i] 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Chain.py", line 67, in __getitem__ 
    return Entity.__getitem__(self, id) 
    File "/usr/lib/pymodules/python2.7/Bio/PDB/Entity.py", line 38, in __getitem__ 
    return self.child_dict[id] 
KeyError: (' ', 77, ' ') 

---------------------------------------------- 
Program exited successfully with errcode (1) 
Press the Enter key to close this terminal ... 

任何人都可以帮助我理解和解决这个错误吗?

+0

但我必须在循环权增加,从而得到76米残渣键长。我注意到错误从第77个水分子点开始。 – dexterdev 2014-10-04 16:08:10

+0

没有它的不工作 – dexterdev 2014-10-04 16:20:51

+0

你问的pdb文件或程序。 – dexterdev 2014-10-04 17:03:40

回答

1

OK,这个代码修正错误:

import sys 
#from Bio.PDB import * 
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt 

pdb1 ='1UBQ.pdb' 
sys.stdout = open('file_ubq', 'w') 
parser=PDBParser(PERMISSIVE=1) 

#file=open('1UBQ.pdb','r') 
#header_dict=parse_pdb_header(file) 
#file.close() 
i=1 
structure = parser.get_structure('1UBQ',pdb1) 
for model in structure: 
    for chain in model: 
     for residue in chain: 
      i = 1 
      for atom in residue: 
       model = structure[0] 
       chain = model['A'] 
       residue_1 = chain[i] 
       atom_1 = residue_1['N'] 
       atom_2 = residue_1['CA'] 
       distance = atom_1-atom_2 
       #print atom.get_vector(),atom.name,distance 
       print distance 
       i=i+1 

#lines = loadtxt("file_ubq") 

但是,它似乎包含大量重复的结果,并且可能无法覆盖整个链条。此代码不应包含重复项:

import sys 
from Bio.PDB.PDBParser import PDBParser 
from numpy import loadtxt 

pdb1 ='1UBQ.pdb' 
sys.stdout = open('file_ubq', 'w') 
parser=PDBParser(PERMISSIVE=1) 

structure = parser.get_structure('1UBQ',pdb1) 
for model in structure: 
    for chain in model: 
     for residue in chain: 
      try: 
       atom_1 = residue['N'] 
       atom_2 = residue['CA'] 
       distance = atom_1-atom_2 
       print distance 
      except: 
       pass 

它也只产生76个结果,这是链的长度。告诉我是否有任何问题,因为我之前没有使用过biopython

+0

感谢您的努力。我会尝试这个代码。我是初学Python和第一次尝试使用biopython:P – dexterdev 2014-10-04 17:39:36

3

您的代码有几个问题。

  1. 您正在使用文件句柄重载sys.stdout,以便您可以写入文件。你可以简单地做:
f_handle = open('random.pdb', 'w') 
print >>f_handle, "This will be written to the file, followed by a newline character" 
  • 您对结构对象和相应的儿童(链,残渣等)接入可以做的更好,读了一下常见问题解答更好地了解图书馆。您可能达到了链的极限(76个残基),并尝试寻找第77个残基,因为您正在使用计数器来访问残基。 Biopython在结构,链接等对象中实现了迭代器,因此您可以只说'用于对象中的x'并覆盖其子元素。要打印在每个N和Ca原子之间的距离连锁你这样做:
  • parser = PDBParser() 
    structure = parser.get_structure('randomPDB', 'randomPDB.pdb') 
    for model in structure: 
        for chain in model: 
         for residue in chain: 
          if residue.id[1] == ' ': # filters heteroatoms 
           resid = residue.id[0] 
           n_ca_dist = residue['N'] - residue['CA'] 
           print >>f_handle, "Distance N-Ca bond of residue {0}: {1}".format(resid, n_ca_dist) 
    
    +0

    谢谢,我改变了这些。 – dexterdev 2014-10-05 17:36:30

    相关问题