2017-06-16 3 views
0

J'ai renuméroté la liste des numéros de résidus comme new_residues = [18,19,20,21,22,34,35,36,37 .... 130,131,132] et je voudrais pour changer mes numéros de résidus de pdb avec cette liste. Avez-vous une idée de re-numérotation?Remplacer les numéros de résidus dans pdb avec la liste des numéros de résidus donnés

...

w=PDBIO() 
      structure=p.get_structure(" ", pdbfile) 
      for model in structure: 
        for chain in model: 
          chain_ID=model[chainID] 
          for residue in chain_ID: 
          #for i in range(len(residue.id)): 
              #resID=new_resnums[i] 
            residue.id=(" ",new_resnums[residue.id[1]], " ") 
      w.set_structure(structure) 
      w.save(pdbfile + "-new.pdb") 

Répondre

0

Dans votre exemple, vous écrasez toutes les informations sur le résidu, également les informations sur l'acide aminé dans la position particulière. L'augmentation de

Que tous ids dans notre fichier de 200, boucle à travers les model s et structures et puis utilisez get_residues() en combinaison avec enumerate pour obtenir tous les résidus et un index.

Le fichierID.id est stocké dans un list et seul l'ID est modifié. Ce list est ensuite reconverti en tuple et écrit à la place de l'ID d'origine.

from Bio import PDB 

pdb_io = PDB.PDBIO() 
pdb_parser = PDB.PDBParser() 
pdbfile = '1ubq.pdb' 
structure = pdb_parser.get_structure(" ", pdbfile) 

new_resnums = [i + 200 for i in range(135)] 

for model in structure: 
    for chain in model: 
     for i, residue in enumerate(chain.get_residues()): 
      res_id = list(residue.id) 
      res_id[1] = new_resnums[i] 
      residue.id = tuple(res_id) 

pdb_io.set_structure(structure) 
pdb_io.save(pdbfile + "-new.pdb")