Introduction à l`informatique pour biologistes Examen Automne 2015
Transcription
Introduction à l`informatique pour biologistes Examen Automne 2015
Introduction à l’informatique pour biologistes Examen Automne 2015 Cours 12X010 Le 2 février 2016 Instructions Cet examen dure 4 heures. L’heure de fin de l’examen sera annoncée oralement dès que les postes de tous les étudiants seront prêts. Les dernières minutes sont prévues pour la vérification du dépôt de vos fichiers sur Chamilo. Tout fichier rendu après l’heure de fin annoncée sera pénalisé. Si l’épreuve débute à temps, l’examen durera de 8h30 à 12h30. Il est formellement interdit de communiquer avec qui que ce soit pendant l’examen. Ne vous connectez donc pas à un quelconque service de messagerie électronique, comme une messagerie web (par ex. celui de l’université, Gmail, Yahoo! Mail, ...), une messagerie instanée, ou tout autre service de communication. Éteignez aussi tous vos dispositifs de communication mobiles : téléphone mobile, smartphone, tablette, etc. Vous trouverez toutes les données nécessaires sur Chamilo dans le sous-répertoire Documents → Examens → Feb2016 Choisissez des noms de variables en rapport avec leur rôle, aérez votre code, indentezle pour le rendre lisible, et commentez-le autant que possible. N’oubliez pas de sauvegarder régulièrement votre travail sur votre espace disque pour éviter les mauvaises surprises en cas d’erreur de manipulation ou de plantage de votre ordinateur. Vous rendrez une archive ZIP nommée login.zip (si votre login est toto5, vous déposerez une archive nommée toto5.zip) dans laquelle se trouveront tous les fichiers que vous aurez créés. Assurez-vous que tous vos fichiers se trouvent bien dans l’archive ZIP : une fois vérifiée la présence de votre fichier ZIP sur Chamilo, aucun nouveau fichier ne sera accepté. La version déposée sur Chamilo est celle qui comptera pour la notation. Lisez attentivement l’ensemble du sujet avant de commencer. Section de biologie Université de Genève 1 Examen du cours 12X010 (automne) Février 2016 Bureautique 1.1 Problème La dérive génétique est une pression évolutive qui s’exerce sur les populations. La dérive génétique est définie comme la fluctuation des fréquences alléliques au cours du temps sous l’effet du hasard de la reproduction (tirage aléatoire des gamètes) dans une population de taille finie. Elle modifie la structure allélique d’une population : les fréquences des allèles vont augmenter ou diminuer mais en l’absence d’autres pressions évolutives, elles finiront par atteindre une valeur de 1 (fixation de l’allèle) ou 0 (perte de l’allèle). Du fait de son effet sur les fréquences des allèles, la dérive génétique a un impact sur l’hétérozygotie qui, en l’absence d’autres forces évolutives, diminue. Le rythme de cette diminution est donné, à chaque génération par la formule ci-dessous : 1 Ht = 1 − Ht−1 (1) 2N Ce qui permet d’écrire la formule générale : Ht = 1 1− 2N t H0 (2) où t est le nombre de générations, Ht est l’hétérozygotie à la génération t , N la taille de la population et H0 l’hétérozygotie à la génération initiale. Cet effet sur l’hétérozygotie est d’autant plus rapide que la taille de la population (N ) est plus petite. Nous allons regarder l’effet de la dérive sur les fréquences d’un allèle et sur l’hétérozygotie à l’aide de LibreOffice Calc. 1.2 Marche à suivre 1.2.1 Diminution de l’hétérozygotie sous l’effet de la dérive génétique 1. Ouvrez LibreOffice Calc et créez un nouveau document. Sauvez le sous le nom derive.ods 2. Créez 6 colonnes : une intitulée t qui contiendra le temps en génération ; et 5 colonnes intitulées une N=25, N=50, N=100, N=200, N=400, qui contiendront le taux d’hétérozygotie. 3. Voici comment vous allez remplir ces colonnes : — Colonne t : elle contient les valeurs des générations. Considérez ici des générations de 0 à 400 avec un pas de 20 (0-20-40 . . . 400) — Première ligne après les entêtes (t = 0) : Au début toutes les colonnes ont une hétérozygotie de 0.5. 3 /8 Section de biologie Université de Genève Examen du cours 12X010 (automne) Février 2016 F IGURE 1 – Dérive génétique . — Colonne N=25 : elle contient les valeurs d’hétérozygotie pour chaque génération. Comme indiqué ci-dessus, la valeur initiale à la génération 0 (H0 ) est égale à 0.5. Vous calculerez les autres valeurs de cette colonne en utilisant la formule (2), en utilisant une taille de population N = 25 individus. — Pour les colonnes restantes, répètez la procédure précédente pour les autres valeurs de N . 4. Tracer un graphique représentant l’hétérozygotie en fonction des générations en choisissant le type XY (scatter), points et lignes (Points and Lines). Le graphique devra contenir les courbes pour les 5 tailles de population. Ajouter des étiquettes sur les axes. Votre graphique devra ressembler à la Fig. 1.On constate que l’effet de la dérive sur la diminution de l’hétérozygotie est d’autant plus fort que la population est petite. 1.2.2 Diminution de l’hétérozygotie sous l’effet de la dérive génétique 1. Finalement ouvrez le fichier heteroz.csv. Ce fichier contient les valeurs moyennes d’hétérozygotie observées expérimentalement sur des population de drosophiles. Les valeurs ont été mesurées pour chaque génération de drosophiles. Sauvez immé4 /8 Section de biologie Université de Genève Examen du cours 12X010 (automne) Février 2016 F IGURE 2 – Diminution de l’hétérozygotie sous l’effet de la dérive génétique. . diatement votre document sous le nom heteroz.ods. 2. Vous devez avoir deux colonnes : une intitulée generation et une h_observée. 3. A côté, créez une colonne intitulée h_calculée. Vous calculerez les valeurs de la colonne en utilisant la formule (2) en utilisant la colonne génération en guise de temps et une taille de population (N = 32, fixée dans l’expérience). A la génération 0, l’hétérozygotie est égale à 0.5. 4. Tracer un graphique représentant l’hétérozygotie en fonction des générations en choisissant le type XY (scatter), points et lignes (Points and Lines). Ajoutez à ce graphique les valeurs d’hétérozygoties observées (h_observe) et celles que vous avez calculées. Ajouter des étiquettes sur les axes. Votre graphique devra ressembler à la Fig. 2. 2 2.1 Python Recherche de séquences consensus L’analyse de données bioinformatiques issues du séquençage des acides-nucléiques ou des protéines se basent souvent sur l’existence de motifs consensus. Il s’agit d’éléments de 5 /8 Section de biologie Université de Genève Examen du cours 12X010 (automne) Février 2016 séquences qui se retrouvent avec peu de variations dans les séquences ayant des fonctions communes. Par exemple, la séquences TATAAA se retrouve dans le promoteures de 24% des gênes humains. Autre exemple cet fois dans les protéines : la majorité des protéines importées dans le noyau de la cellule portent le consensus de 4 acides aminés K[KR].[KR] qui se lit : une lysine, suivie soit d’une arginine soit d’une lysine, suivie de n’importe quel acide aminée, suivi d’une lysine ou d’une arginine. Il existe également des consensus à la taille variable. Par exemple les introns commencent par le consensus AG|GURAGU et se terminent par le consensus YNCAG|G, où R indique n’importe quelle purine, Y n’importe quel pyrimidine et N n’importe quel nucléotide. Les barres verticales indiquent la coupure intro/exons (sites donneurs et accepteurs). Entre les deux consensus il existe un nombre variable de nucléotides (l’intron à proprement parler). La recherche de consensus connus dans des séquences permet donc de tirer des hypothèses à partir d’une séquence. Par exemple, en reprenant les trois exemples ci-dessus, on pourrait rechercher la présence d’un promoteur, prédire si une protéine est importée dans le noyau ou encore détecter les introns et exons d’un gène. Dans cet exercice, vous allez devoir analyser des séquences d’ADN, susceptibles d’intéragir avec une enzyme. Cet enzyme intéragi avec des régions d’ADN qui commencent par GCA et se terminent toujours par AA. Ces régions sont également caractérisées par un contenu en pyrimidine très bas (peu de C et T). Pour trouver la région la plus probable, vous allez d’abord rechercher toutes les régions possibles dans la séquence à étudier et ensuite vous calculerez le contenu en pyrimidine de chacune de ces régions potentielles. Attention, les différents régions potentielles peuvent se chevaucher. Par exemple : AT(GCAATTGAA)AGCTAATATTAGCAATTGAACGTA AT(GCAATTGAAA)GCTAATATTAGCAATTGAACGTA AT(GCAATTGAAAGCTAA)TATTAGCAATTGAACGTA ATGCAATTGAAAGCTAATATTA(GCAATTGAA)CGTA ... 2.2 Représentation des séquences d’ADN Vous allez représenter les séquences d’ADN comme des listes de nucléotides où chaque nucléotide est une chaîne de caractères de longueur 1. Vous pourrez transformer une chaîne de caractère dans cette représentation en utilisant la fonction list(). Par exemple : >>> list( "GAATTC" ) ['G', 'A', 'A', 'T', 'T', 'C'] Ces conversions seront faîtes une fois pour toute au début du programme. Chaque fonction que vous écrirez prendra des listes dans le bon format. 6 /8 Section de biologie Université de Genève 2.3 Examen du cours 12X010 (automne) Février 2016 Marche à suivre Le fichier consensus.py contient un squelette du programme. Il vous faudra implémenter toutes les méthodes qui contiennent le commentaire : #IMPLEMENTER. Ce fichier contient également la séquences que l’on veut analyser (dna1) et deux petites séquences qui vous permettront de tester les fonctions à implémenter (dna2 et dna3). Vous pouvez ajouter des fonctions supplémentaires si cela vous aide à implémenter les fonctions demandées. Évitez d’ajouter du code en dehors des fonctions, sauf pour les tests. 2.3.1 Extraction de sous-séquence Implémentez la fonction extract(pos1,pos2,seq) qui extrait la sous-séquence de seq située entre les positions pos1 (incluse) et pos2 (exclue). Par exemple : >>> extract( 3, 7, dna2 ) ['A', 'T', 'T', 'G'] 2.3.2 Recherche d’une sous-séquence Implémentez la fonction find(seq1, seq2) qui recherche la sous-séquence seq1 dans la séquence seq2. Si la sous-séquence existe, la fonction retournera la position du premier nucléotide. Sinon elle retournera la valeur -1. Par exemple : >>> find( dna2, dna1 ) 2 >>> find( dna3, dna1 ) -1 Vous pouvez-vous aidez de la fonction compare_seq du TP 10. 2.3.3 Recherche de toutes les occurences d’une sous-séquence Implémentez la fonction findAll(seq1, seq2) qui recherche toutes les occurences de la sous-séquence seq1 dans seq2. Cette fonction retourne une liste avec la position du premier nucléotide de chaque occurence. S’il n’y a pas d’occurence, la fonction retournera une liste vide. Par exemple : >>> findAll( dna2, dna1 ) [2, 22] >>> findAll( dna3, dna1 ) [] 7 /8 Section de biologie Université de Genève 2.3.4 Examen du cours 12X010 (automne) Février 2016 Calcul du contenu en pyrimidines Implémentez la fonction def pyrContent(seq) qui calcule le contenu en pyrimidines d’une séquence. Celui-ci sera égal au nombre de pyrimidines divisé par la taille de la séquence. La fonction retournera un nombre à virgule flottante. par exemple : >>> pyrContent(dna1) 0.4 >>> pyrContent(dna2) 0.3333333333333333 2.3.5 Recherche de toutes les régions potentielles En utilisant la caractérisation des régions d’intérêts introduite ci-dessus, implémentez la fonction, findRegions( seq ) qui retourne la liste de toutes les région commençant par GCA et se terminant par AA. Une région est représentée par une liste comprenant l’emplacement du début de la région (inclus) et l’emplacement de la fin de la région (exclus). Si aucune région n’apparaît la fonction retournera une liste vide. Par exemple : >>> findRegions( dna1 ) [[2, 11], [2, 12], [2, 17], [2, 26], [2, 31], [22, 31]] >>> findRegions( dna2 ) [] 2.3.6 Affichage du résultat Finalement, implémentez la fonction printReport( seq ) qui recherche les régions potentielles dans la séquence seq et affiche un rapport qui comprend les positions, la taille et le contenu en pyrimidines pour chaque région potentielle trouvée. Par exemple : >>> printReport( dna1 ) 2 11 9 0.3333333333333333 2 12 10 0.3 2 17 15 0.3333333333333333 2 26 24 0.375 2 31 29 0.3793103448275862 22 31 9 0.3333333333333333 On voit ici que la deuxième région trouvée est le meilleur candidat (plus faible taux de pyrimidines). 8 /8