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