Le devoir 2 : Alignement de grandes séquences biologiques
Table des matières
- 1 Présentation
- 2 Ce qu'il y a à faire
- 3 Le matériel
- 4 Mes résultats
- 5 Comment chercher une séquence d'ADN sur Internet?
- 6 Comment construire un "dotplot" ?
- 7 Quelques liens fort utiles
1 Présentation
1.1 Motivations du devoir
Il s'agit de programmer l'alignement de deux séquences et de l'appliquer à quelques exemples issus de la Biologie. Cette année je me suis intéressé à l'alignement de grandes séquences biologiques. On dispose maintenant des génomes complets de nombreuses espèces. Cela permet de deviner la fonction de certains gènes de nouvelles espèces en les comparant à des espèces mieux connues. On est donc amené à comparer les séquences de chromosomes complets (ou de grandes parties). Regarder par exemple l'article suivant :Alignment of Whole Genomes. A.L. Delcher, S. Kasif, R.D. Fleischmann, J. Peterson, O. White, and S.L. Salzberg. Nucleic Acids Research, 27:11 (1999), 2369-2376. (l'article pour ceux qui n'arriveraient pas à le télécharger l'article est ici)L'objectif de ce devoir est de faire un programme qui permet de comparer deux séquences d'ADN (celles qui sont décrites à la fin de l'article précédent : "human chromosome 12p13 and its syntenic region in mouse chromosome 6"). Plus précisement :
we chose a 222 930 bp subsequence of human chromosome 12p13 (accession no. U47924) that is syntenic to a 227 538 bp contiguous subsequence of mouse chromosome 6 (accession no. AC002397). These sequences were the subject of a recent study by AnsariLari et al. (PDF)ATTENTION : ces articles présentent une méthode qui n'est pas celle que nous allons utiliser
1.2 Description de l'objectif du devoir
Cela ne se fait pas simplement : l'algorithme classique construit autour de la programmation dynamique ne peut pas marcher dans de tels cas. En effet il utilise un capacité mémoire de l'ordre de O(n2) si n est la taille des chaînes à comparer. Dans le cas qui nous intéresse, n vaut environ 230000. Il faut donc une mémoire de 230000*230000*4 = 211600 Moctets = 211 Go. (c'est assez rare de trouver un ordinateur avec une telle capacité). Il faut donc changer d'algorithme. J'ai donc choisit d'utiliser un algorithme basé sur la méthode de Hirschberg qui utilise un espace mémoire en O(n) pour un temps de calcul un peu plus lent que l'algorithme classique.Une version plus élaborée de ce que je vous demande de programmer, se trouve dans un ensemble de programmes pour la biologie : EMBOSS. Il s'agit du programme stretcher. Voici l'article correspondant à ce programme : Eugene W. Myers, Webb Miller: Optimal alignments in linear space. Computer Applications in the Biosciences 4(1): 11-17 (1988) . La version PDF de cet article.
2 Ce qu'il y a à faire
Le vrai sujet du devoir- Programmer l'algorithme classique d'alignement global de séquence avec coût de gap constant à l'aide de la programmation dynamique.
- La même chose avec l'algorithme de Hirschberg.
- Testez vos deux méthodes avec de petits exemples. Utilisez la valeur de gap et la matrice de similarité donnée dans le paragraphe suivant.
- Comparez sur des exemples tirés au hasard, les performances en mémoire et en temps de ces deux méthodes. Le but est de vérifier que le temps de calcul n'est pas plus du double que dans la méthode classique et que la mémoire utilisée est effectivement linéaire.
- Traitez à titre de vérification le premier exemple (avec la méthode de Hirschberg) -- vous pouvez construire le dotplot
- Passez le deuxième exemple -- attention cela est très long (1h20 chez moi) -- vous pouvez construire le dotplot avec "dotter", mais c'est assez lent. Question subsidiaire : quelle est la plus longue sous-chaîne qui s'aligne sans aucun gap ?
- Rédigez 2 ou 3 pages sur l'algorithme de Hirschberg, ainsi que sur la démonstration des complexité en mémoire et en temps.
- Environ 1 ou 2 pages de résultats de test
- 1 tableau de comparaison des 2 méthodes
- Les résultats de la première question (je ne veux pas des pages et des pages d'alignement)
- Les résultats de la deuxième question (Même remarque)
- Conclusions et commentaires (est-ce que cela vous a intéressé?). Pouvez-vous proposer une méthode pour améliorer l'efficacité de l'algorithme.
Remarque2 : Je veux un document d'au plus une dizaine de pages avec des phrases en français. N'oubliez pas que c'est à vous de me prouver par des exemples que vôtre programme est juste. Je ne souhaite le listing que pour vérifier que vous n'avez pas copié!!
3 Le matériel
3.1 La description de l'algorithme classique
Je vous donne les Pages 52-53 du livre Introduction to Computational Molecular Biology (voir référence à la fin) qui décrivent le programme d'alignement. Voici mon programme en Java align.java qui fait la même chose (pour aider ceux qui n'y arrivent pas), mais ce programme est donné sans aucune garantie.3.2 La description de l'algorithme de Hirschberg
Il y a une très bonne description de cet algorithme dans le livre de Meidanis and Setubal Pages 58-61. Vous pouvez aussi consulter les transparents : Linear Alignment3.3 Le cout du gap et la matrice de similarité
J'ai choisit comme coût fixe du gap la valeur -8. La matrice est la suivante:
Matrice de similarité
| |
|
3.4 Le premier exemple
Il s'agit du même que celui de l'année dernière. Pour vous familiariser avec les outils d'alignements, vous allez commencer par travailler avec les séquences nucléiques des gènes pl6 chez l'homme et la souris. Allez chercher les séquences sur EMBL : [AC=U09584](Human PL6 protein (PL6) mRNA, complete cds) et [AC=AF134238] (Mus musculus PL6 protein (Pl6) mRNA, complete cds) et sauvegardez les dans deux fichiers. Pour ceux qui n'arrivent pas a trouver ces séquences, les voici : pl6Human.fasta, pl6Mouse.fasta.3.5 Le deuxième exemple
Les deux séquences à comparer sont : AC002397 et U47924. Comme d'habitude voici les séquences que j'ai récupéré : AC002397.fasta, U47924.fasta.4 Mes résultats
4.1 Comparaison classique/hirschberg
Voici ce que j'ai trouvé en comparant des séquences aléatoires d'ADN de longueur 5000. Encore une fois je vous donne ces résultats à titre exemple, vous pouvez trouver des choses différentes.
Comparaison classique/hirschberg
| |
|
Remarque : 1ps = 10-9s
4.2 Le premier exemple
Voici ce que j'ai trouvé (même remarque que précédemment, avec en plus le fait que si le score doit être identique, les alignements et le nombre de gaps, peuvent être différents)
premier exemple
| |
|
4.3 Le deuxième exemple
ATTENTION : malgré tout le temps de calcul est très long : Temps total = 4756532ms = 1h20...Il faut être patient. C'était assez prévisible, en effet le temps de calcul est en O(mn). Ce qui donne dans ce cas (en utilisant les mesures du début): 228*223/1000*83 s = 4220s (prévision pas trop mauvaise!) Voici mes résultats.
deuxième
| |
|
5 Comment chercher une séquence d'ADN sur Internet?
Ceci est extrait de la page de l'année dernière. Prévenez-moi si il y a des liens faux (à revoir).Si vous voulez quelque chose de plus juste et plus à jour, consultez une page web de Pascal Hingamp.
Je vous conseille de vous connecter à embl. Si possible ouvrez cette page dans un autre fenêtre. La suivez le mode d'emploi suivant :
-
Vous regardez en haut à droite, et vous devez trouver quelque chose du genre ;
Get nucleotide sequence for xxxxx GO
- Vous pouvez entrer directement votre accession number. Si vous voulez des requètes plus complètes cliquez sur "Database query", juste en dessous de la ligne précédente. Vous vous retrouvez sur une page, repérez le tableau "Nucleotide sequence". Et la dans la colonne "Query Engine(s)" vous devez cliquer sur "SRS".
- Vous pouvez alors rentrer votre requête dans le champ "AllText" : "Xenopus laevis rhodopsin gene complete" (ne me demandez pas ce que c'est !!);
- Au bout d'un certain temps, vous devez voir apparaitre une liste de références. Cochez la dernière référence et modifier
dans "Display option", pour obtenir "* complete entry * puis, cliquez sur .
EMBL:XL23808 U23808 U23808 Xenopus laevis rhodopsin gene, complete cds. 4734
- Vous avez plein d'information : il est important de noter l'accession number [AC=U23808], c'est une référence unique, qui permet d'identifier de manière unique la séquence. Vers le bas vous allez trouver la séquence d'ADN correspondante.
- Vous pouvez sauver juste la séquence au format FASTA de la manière suivante : Dans "Display option", vous choisissez : "FastaSeqs". Vous pouvez cocher également "Printer friendly view". Vous avez alors un fichier que vous pouvez sauvegarder au format texte. Appelons le "xl23808.seq".
- IMPORTANT Pour retrouver une séquence par son AC (accession number). Dans la liste déroulante ou il y a écrit "AllText", choisissez "AccNumber". C'est beaucoup plus sûr (selon les spécialistes)
![]() |
Juste pour votre Information : Xenopus laevis est une grenouille africaine qui est utilisé par la recherche car la femelle pond beaucoup d'oeufs et peut-être pour d'autres raisons que j'ignore!!! |
6 Comment construire un "dotplot" ?
Comme on l'a vu dans le cours, c'est un moyen très simple de construire un dessin qui permet de visualiser l'alignement de deux séquences. Hélas, cela ne donne que des informations qualitatives, cependant c'est très utile pour savoir ou l'on va. Il y a de nombreux outils sur Internet qui permettent de visualiser des dotplots, en voici deux qui fonctionnent bien :-
DOTLET : c'est une application écrite en java, vous pouvez l'utilisez directement sur le site de
DOTLET, ou bien récupérer le
fichier "dotlet.jar" ici
Pour l'utiliser c'est très simple (mais cela ne marchera pas pour les grandes séquences) :
java -cp dotlet.jar Dotlet
et vous suivez les instructions - DOTTER : c'est un programme un peu plus élaboré qui se trouve à l'adresse suivante : Dotter. Il existe des versions pour unix et windows
7 Quelques liens fort utiles
Il y a vraiment beaucoup d'informations sur Internet, voici une sélection qui me parait particulièrement intéressante :-
Bien sûr la page web de l'option de Biologie Moléculaire de la licence d'informatique
et celle de l'option de Biologie Moléculaire de la maitrise d'informatique.
- TP : Recherche de similarites Je me suis inspiré de ce TP d'Hélène Touzet.
- TP IUP Montpellier Une autre source d'inspiration, fait par Pascal Hingamp du Département de Biologie de Luminy.
- Online Lectures on Bioinformatics C'est un document qui vous explique entre autre avec
beaucoup d'exemple l'algorithme d'alignement par programmation dynamique.
- Un premier cours de Stanford
Representations and Algorithms for Computational Molecular Biology
du professeur Altman. En particulier le deuxième cours sur l'alignement. Il y a beaucoup de matériel sur cette
page web.
- La page web associée au Livre : N.C Jones et P.A. Pevzner Bioinformatics algoriths-MIT Press 2004 :
http://www.bioalgorithms.info et surtout "PowerPoint Slides". Vous pouvez aussi consulter la rubrique
"Implementation Problems", mais ne revez pas : le programme d'alignement n'est pas sur le site. Mais si il y a un très bon programme on pourrait
essayer de l'envoyer a l'auteur de ce site (avec bien sûr les commentaires en anglais!!).
- Enfin si vous souhaitez des cours en français, il y a le travail remarquable de l'équipe de l'Université de Lille : Maitrise info : Bioinformatique ainsi que DESS Bioinfo : analyse de séquences. Regardez les références à la fin des pages.
- Une autre introduction à la biologie moléculaire : Biololgy Intro.





