При попытке создать списки атомов 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(),

Другие вопросы по тегам