При попытке создать списки атомов CA я получаю следующее сообщение об ошибке "ошибка" CA "при выполнении следующего кода
Для следующего кода, когда я выполняю код, я получаю сообщение об ошибке, которое я перечислил ниже. Мне было интересно, если кто-нибудь может дать мне какие-либо идеи о том, как добавить атомы CA в списки tag_atoms/tagged_atoms, которые я буду использовать для выравнивания. И выделите любые потенциальные недостатки в способе написания кода, которые я бы упустил. Я новичок в Python, поэтому любое понимание было бы здорово и очень полезно.
def loadPDB(pdb_name):
folder = pdb_name[1:3]
pdbl = PDB.PDBList()
pdbl.retrieve_pdb_file(pdb_name)
parser = PDB.PDBParser(PERMISSIVE=1)
structure = parser.get_structure(
pdb_name, folder + "/pdb" + pdb_name + ".ent")
return structure
def alignCoordinates(taggedProtein, potentialTag):
for model in taggedProtein:
firstModel = model
break
for chain in firstModel:
firstChain = chain
break
for firstChain in firstModel:
tagged_atoms = []
tag_atoms = []
for residue in firstChain:
tagged_res = residue
for tagged_res in firstChain:
tagged_atoms.append(firstChain['CA'])
for model in potentialTag:
firstTagModel = model
break
for chain in firstTagModel:
firstTagChain = chain
break
for residue in firstTagChain:
tag_res = residue
for tag_res in firstTagChain:
tag_atoms.append(firstTagChain['CA'])
super_imposer = Bio.PDB.Superimposer()
print repr(tagged_atoms)
print repr(tag_atoms)
super_imposer.set_atoms(tagged_atoms, tag_atoms)
super_imposer.apply(tag_model.get_atoms())
print super_imposer.rms
io = Bio.PDB.PDBIO()
io.set_structure(tag_model)
io.save("Aligned.PDB")
def main():
pdb1 = "2lyz"
pdb2 = "4abn"
potentialTag = loadPDB(pdb1)
taggedProtein = loadPDB(pdb2)
alignCoordinates(taggedProtein, potentialTag)
main()
Это сообщение об ошибке ниже:
Structure exists: '/Users/Azi_Ts/Desktop/ly/pdb2lyz.ent'
Structure exists: '/Users/Azi_Ts/Desktop/ab/pdb4abn.ent'
/Library/Python/2.7/site-packages/Bio/PDB/StructureBuilder.py:87: PDBConstructionWarning: WARNING: Chain A is discontinuous at line 13957.
PDBConstructionWarning)
/Library/Python/2.7/site-packages/Bio/PDB/StructureBuilder.py:87: PDBConstructionWarning: WARNING: Chain B is discontinuous at line 14185.
PDBConstructionWarning)
Traceback (most recent call last):
File "alignPDB.py", line 76, in <module>
main()
File "alignPDB.py", line 74, in main
alignCoordinates(taggedProtein, potentialTag)
File "alignPDB.py", line 39, in alignCoordinates
tagged_atoms.append(firstChain['CA'])
File "/Library/Python/2.7/site-packages/Bio/PDB/Chain.py", line 70, in __getitem__
return Entity.__getitem__(self, id)
File "/Library/Python/2.7/site-packages/Bio/PDB/Entity.py", line 38, in __getitem__
return self.child_dict[id]
KeyError: 'CA'
1 ответ
Чтобы получить все CA
атомы нужно только сделать:
ca_atoms = [atom for atom in taggedProtein.get_atoms() if atom.name=="CA"]
Помните, что структуры загружены, taggedProtein
а также potentialTag
, есть три метода, которые могут быть полезны здесь: get_chains()
, get_residues()
а также get_atoms()
, Используя эти три, вы можете избавиться от каждого for
цикл у вас в def alignCoordinates()
,