nanls / M2BI-db-project

1 stars 1 forks source link

generation de carte de ramachandran #8

Closed nanls closed 7 years ago

nanls commented 7 years ago
nanls commented 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 ?

nanls commented 7 years ago

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()
nanls commented 7 years ago

@jecarvaill (juste une notification pour te faire iech, et que tu saches o`u looker ma prop de code... :D )