TD2–Fonctions Notions: Encores’exercersurlesboucles(foretwhile),lesifetleslistes - Lesfonctions - Lesclasses(basique) - Structurerunprogramme VousécrirezvosfonctionsdelapremièrepartiedansunfichiernomméTP2.py. Cefichierestun«script»python. Nous vous demandons qu’ils respectent toujours l’organisation décrite cidessous: - Une première ligne contenant « # -*- coding: utf-8 -*- » pour éviter les problèmesd’accents. - Des commentaires avant chaque fonction décrivant ce qu’elle faite et ses arguments(typedesargumentsetcequefaitlafonction) - Une fonction main() à la fin du script qui appelle les autres fonctions et qui grâceaudernierifseraappeléelorsdel’exécutionduscript. -Pourquevosscriptsrestentclairsetlisibles,ilvousestdemanderdene pasécriredecodepythonailleursquedansunefonction. # -*- coding: utf-8 -*# maFonction1: Expliquer ce que fait maFonction1 #ce que sont ses arguments... def maFonction1(arg1, arg2, arg3): return arg1+arg2+arg3 #plus(a,b) : fonction retournant la somme de a et b #a : nombre #b : nombre def plus(a,b): return a+b #Fonction principale, appelant les autres fonctions def main() : print maFonction1(5,6,7) b=plus(5,6) print b #Appel de la fonction main if __name__ == '__main__': main() Partie1. Calculdel’enfouissement Nousallonsécrireunepetitebibliothèquedefonctionspermettantdefairedes calculssurlesinformationsextraitesdefichierpdb.Cesfonctionsserontutilisées ultérieurementdanslecadreparticulierdel’analysedeséquencesbiologiques. Vous sauvegarderez vos différentes fonctions dans un fichier nommé enfouissement.py. Vousprendrezbiensoindetesterchacunedevosfonctionsindividuellementet justeaprèslesavoirécrites. Voici le descriptif de la variance circulaire (CV), mesure qui permet d'évaluer l'enfouissement d'un résidu. Elle mesure la distribution vectorielle d’un ensemblede pointsvoisinsd’unpointfixe.Pourunrésidudonné,CVreflètela densitédelaprotéine autoursdelui.Lavariancecirculaired’unatomeiest: oùniestlenombred’atomesjàmoinsdercÅdel’atomei.rijestlevecteurentre les atomesietj. Lavariancecirculaired’unrésiduestalorscalculéecommelamoyennedesCV surtous sesatomes.LesvaleursdeCVvariententre0et1.UnevaleurfaibledeC indique que le résidu est dans une région protubérante de la surface de la protéine. Exercice1. (obligatoire)UtilisationdebibliothèquesetClasseAtom Il existe de nombreuses bibliothèques (modules) en python, par exemple la bibliothèque math qui contient la fonction sqrt (racine carrée). Pour utiliser la fonction sqrt il faut importer la bibliothèque math avec la commande import math.Ilestpossiblederéutiliserlesfonctionsquevousavezécritesdansunautre fichierdelamêmemanière. Voiciunexempled’utilisation(quevouspouvezrecopierdansunfichiertest.py) : # -*- coding: utf-8 *-* import math import TP2 def main() : print math.sqrt(2) print TP2.carre(math.sqrt(2))) Voici la définition de la classe Atom à recopier dans votre fichier enfouissement.py: class Atom: def __init__(self, x, y, z, numRes=-1, resType=”X”, sse=”X”): self.x = x self.y = y self.z = z self.numRes=numRes #numéro PDB du résidu self.resType=resType #code 3 lettres de l'aa self.sse=sse #Code 1 lettre de la Structure secondaire Voiciunexempledecommandepythonpourcréerunatome: >>>at1=Atom(0.1,-99.6, 55.4) Vouspouvezaccéderàlacoordonnéexainsi: >>>printat1.x Ecrire le code d’une fonction distance(atom1, atom2) qui calcule et retourne la distance euclidienne entre deux atomes atom1 et atom2. Tester cette fonction dansleprogrammeprincipal(main)endemandantàl’utilisateurlescoordonnées dedeuxpointsetafficherlavaleurdeladistancequilessépare. Exercice2. (entrainement)RMSetlisted’atomes Le RMSD (Root Mean Square Deviation) est la distance moyenne entre les n atomesde deuxstructuresaetb.Saformuleestlasuivante: où(x,y,z)sontlescoordonnéesatomiquescartésiennes. 1) Ecrirelecoded’unefonction RMSD(L1, L2)quicalculeleRMSDentrelesn atomesdesdeuxlistesL1etL2.Lafonctionpourraappelerla fonctiondistance. 2) Pourtestercettefonctiondansleprogrammeprincipalvousutiliserezles listes d’atomes qui ont été générées à partir des structures 1CLL et 1CFC superposées (apres pair_fit) et qui vous sont données dans le fichier data.txt. VouscopierezlesdeuxvariablesCA_1CFCetCA_1CLLdansvotrefonctionmain. Pour vérifier que le RMS que vous calculez est correct, vous pourrez vous compareraurmsretournéparlafonctionrms_curdanspymol.Lesfichierspdb contenant les structures superposées vous sont données (1CFC_superp.ent et 1CLL_superp.ent) Exercice3. (obligatoire)Sélectiondesatomesproches 1) Ecrire le code d’une fonction Env(atomeRef, rc, lesAtomes) qui prend en argumentunatomeatomeRef,unedistancercetunelisted’atomeslesAtomesetqui retournelalistesdesatomesàunedistanceinférieureà rcÅdel’atomeatomeRef. 2) Ilestdifficiledesavoirsilerésultatestcorrect.Pourtestervotrefonction, nousallonsvisualiserlesatomessélectionnésdanspymol.Pourcela,vousécrirez unefonctionprint_select_pymol(lesAtomes, objetPymol, nomSel) quiécriradansle terminallacommandedesélectionpourpymol.L’argumentobjetPymol estlenom del’objetàsélectionneret nomSel estlenomdelasélection. Parexemple,nousallonssélectionnerlesrésidusprochesdupremierrésidude 1CLL.Silesrésidussélectionnésparvotrefonctionsontlesrésidus25et46,vous devrezafficheravecvotreprogrammepythondansleterminalselect proche1er, object 1cll and (resi 24 or resi 46). Vous copierezensuitecettecommande danspymoletvisualiserezlasélection.Vousvérifierezensuiteaveclafonction distance de pymol si la distance entre les deux Ca les plus éloignés est bien inférieureouégaleà10. Exercice4. (obligatoire)Calculvectoriel 1) Ecrire le code d’une fonction Rij(ati, atj) qui calcule et retourne les coordonnéesduvecteur rijàpartirdescoordonnéesdesatomes atiet atj.Ces coordonnéessontreprésentéesparuntuple(x,y,z). 2) Ecrire le code d’une fonction Norme(x,y,z) qui retourne la norme d’un vecteuràpartirde sescoordonnées. Exercice5. (obligatoire)Calculdelavariancecirculaire. 1) Ecrirelecoded’unefonctionCVi(ati, rc, lesAtomes) quicalculeetretourne la variance circulaire de l’atome ati à partir de la liste d’atomes lesAtomes contenantlescoordonnéesde touslesatomesd’uneprotéineetdeladistancerc (en A, distance maximale pour que 2 atomes soient considérés comme suffisammentproches). 2) Ecrire le code d’une fonction CV_AllRes(lesAtomes, rc=12)qui retourne la variancecirculairepourtouslesatomesdelalistelesAtomesetenneprennant encomptequelesatomesàmoinsdercA.L’argumentrcapourvaleurpardéfaut 12A et il peut donc être omis lors de l’appel. Les variances calculées seront retournéessouslaformed’unelistedontl’ordreseralemêmequel’ordredes atomesdanslalistelesAtomes. Exercice6. (obligatoire)Affichagedel’enfouissement Pour finir, vous vous écrirez une fonction Atomes_Enfouis(lesAtomes, lesCV, seuilCV) quiretournelalistedesatomesenfouis(dontlavariancecirculaireest supérieureauseuil). Dans le main, vous calculerez la variance circulaire des Ca d’une des deux protéines données et vous afficherez une selection pour pymol qui vous permettra de visualiser les résidus enfouis dans ce logiciel. Testez plusieurs valeursdeseuildedistancercetdeseuildevariancecirculaire.