2016-02-29 7 views
0

Для следующего кода при выполнении кода я получаю сообщение об ошибке, которое я перечислял ниже. Мне было интересно, может ли кто-нибудь дать мне представление о том, как добавить атомы CA в теги tag_atoms/tagged_atoms, которые я буду использовать для выравнивания, и подчеркнуть любые потенциальные недостатки в том, как написан код, который я буду игнорировать. м нового в Python, так что любое понимание было бы здорово и очень полезноПри попытке создания списков атомов CA я получаю следующую ошибку «ключевая ошибка« ЦС »при выполнении следующего кода

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' 

ответ

0

Чтобы получить все 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().

 Смежные вопросы

  • Нет связанных вопросов^_^