Closed nanls closed 7 years ago
tu voulais utiliser le parseur de mdtraj, non ? mais pourquoi pas celui de biopython (http://biopython.org/wiki/The_Biopython_Structural_Bioinformatics_FAQ) ?
Le calcul des angles ça donne :
import Bio.PDB
for model in Bio.PDB.PDBParser().get_structure("1HMP", "1HMP.pdb") :
for chain in model :
polypeptides = Bio.PDB.PPBuilder().build_peptides(chain)
for poly_index, poly in enumerate(polypeptides) :
print "Model %s Chain %s" % (str(model.id), str(chain.id)),
print "(part %i of %i)" % (poly_index+1, len(polypeptides)),
print "length %i" % (len(poly)),
print "from %s%i" % (poly[0].resname, poly[0].id[1]),
print "to %s%i" % (poly[-1].resname, poly[-1].id[1])
print poly.get_phi_psi_list()
ou résidu par residu :
import Bio.PDB
for model in Bio.PDB.PDBParser().get_structure("1HMP", "1HMP.pdb") :
for chain in model :
polypeptides = Bio.PDB.PPBuilder().build_peptides(chain)
for poly_index, poly in enumerate(polypeptides) :
print "Model %s Chain %s" % (str(model.id), str(chain.id)),
print "(part %i of %i)" % (poly_index+1, len(polypeptides)),
print "length %i" % (len(poly)),
print "from %s%i" % (poly[0].resname, poly[0].id[1]),
print "to %s%i" % (poly[-1].resname, poly[-1].id[1])
phi_psi = poly.get_phi_psi_list()
for res_index, residue in enumerate(poly) :
res_name = "%s%i" % (residue.resname, residue.id[1])
print res_name, phi_psi[res_index]
Ça gère trop bien les gaps dans les séquences.
Vu que mdtraj, à la base c'est pour gérer des trajectoires, c'est ptt un petit peu importer la grosse bertha pour juste tuer un moucheron, nop ?
Et si osef de gerer des pdb un peu bordeline (voir discution dans le #11), on peut utiliser http://dirac.cnrs-orleans.fr/MMTK/ (quoique pas mis à jour depuis trèèès longtemps... XD ) EDIT : il laisse vraiment passer de sérieux pb, quand même, genre en cas de résidus manquants, il calcule un angle... >_< )
Et dans ce cas là, le calcul d'angle, c'est juste :
import MMTK.Proteins
protein = MMTK.Proteins.Protein("1F45.pdb")
for chain in protein :
print "%s length %i" % (chain.name, len(chain)),
print chain.phiPsi()
ou résidu par résidu :
for chain in protein :
print "%s length %i" % (chain.name, len(chain)),
print "from %s to %s" % (chain[0].name, chain[-1].name)
for residue in chain :
print residue.name, residue.phiPsi()
@jecarvaill (juste une notification pour te faire iech, et que tu saches o`u looker ma prop de code... :D )
[x] parsing de pdb
[x] calcul des angles phi psi
[x] plot matplotlib