我想绘制遍在蛋白的alpha-cabon
到nitrogen
键距的分布。所以我下载了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 :(得分:3)
您的代码存在一些问题。
f_handle = open('random.pdb', 'w')
print >>f_handle, "This will be written to the file, followed by a newline character"
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)
答案 1 :(得分:1)
好的,此代码修复了错误:
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
。
答案 2 :(得分:-1)
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")
This might help you