Stéphane Grandcolas
Laurent Tichit

Projet Informatique orienté Bioinformatique



Objectif

L'objectif de ce projet est de programmer une application permettant, à partir d'un ensemble de séquences (nucléiques ou protéiques) présumées homologues, de visualiser l'arbre phylogénétique représentant l'évolution de ces séquences.



Découpage du projet

On possède un fichier contenant des séquences. Ce fichier est au format FASTA.

  1. La première étape est de calculer une distance entre chaque paire de séquences et de produire ainsi une matrice de distances

  2. Cette matrice de distances va nous permettre de construire un arbre phylogénétique. L'idée est de regrouper dans le même sous-arbre les séquences proches

  3. Une fois notre arbre produit, nous allons le visualiser (en format texte)


Pré-requis en programmation

Chacune de ces étapes devrait permettre de produire un fichier intermédiaire. De cette façon il vous sera possible de réaliser trois programmes indépendants, plus faciles à tester. Il vous sera donc nécessaire de maîtriser les entrées/sorties de haut niveau en C (FILE, fopen, fclose, fprintf, fscanf, stderr, fgets de <stdio.h>). Vous devrez en outre manipuler des chaînes de caractères. Les fonctions relatives aux chaînes (strcat, strcpy, strcmp, strlen de <string.h>) vous seront peut-être également utiles.



Fichiers utiles

Dans ce répertoire, vous trouverez un ensemble de fichiers de données permettant de tester vos programmes.



I – Distance entre deux séquences

Quantifier le degré de similarité entre deux objets est une opération relativement commune. Toute la difficulté réside dans le choix du critère de comparaison. Il existe plusieurs façons de mesurer la distance entre deux séquences. La plus connue est l'alignement de séquences. Intuitivement, l'objectif est d'essayer de « faire correspondre » le mieux possible les séquences l'une sur l'autre, en insérant éventuellement des gaps dans l'une et l'autre.

Exemple : distance entre ARCACHON et MARATHON.

Meilleur alignement possible :

-ARCACHON
MAR-ATHON

Distance = 3 (insertion du M, suppression du C, mauvaise correspondance entre C et T).

Le but est de calculer une distance entre chaque paire de séquences et de produire un fichier contenant cette matrice au format Phylip.

    7
C1          0.0000  0.0549  0.0703  0.2196  0.1673  0.0549  0.0701
C2          0.0549  0.0000  0.0286  0.2206  0.1742  0.0435  0.0507
C3          0.0703  0.0286  0.0000  0.2072  0.1834  0.0511  0.0508
C4          0.2196  0.2206  0.2072  0.0000  0.2498  0.1986  0.1975
C5          0.1673  0.1742  0.1834  0.2498  0.0000  0.1621  0.1656
C6          0.0549  0.0435  0.0511  0.1986  0.1621  0.0000  0.0587
C7          0.0701  0.0507  0.0508  0.1975  0.1656  0.0587  0.0000

Pour le calcul de la distance, vous pouvez choisir l'algorithme de votre choix. Commencez par quelque chose de simple (composition en acides de vos séquences). Vous pourrez toujours améliorer ça par la suite avec l'alignement de séquences utilisant des scores de substitution tirés des matrices PAM ou Blosum.



II – Construction d'arbre

A partir d'un fichier de matrice au format Phylip, nous allons utiliser un algorithme de partitionnement hiérarchique ascendant (par exemple UPGMA) permettant de regrouper itérativement des partitions.

Au départ, chaque partition contient un seul taxon. A chaque étape, les deux partitions les plus proches sont agrégées en une partition plus grande. La distance entre deux partitions A et B données peut-être définie par la moyenne de toutes les distances entre paires d'objets x de A et y de B (c'est le principe d'UPGMA). Vous pouvez aussi utiliser des critères plus grossiers.

Dans un premier temps il est demandé de ne pas tenir compte de la longueur des branches. Il sera toujours possible d'améliorer notre algorithme par la suite.

Un arbre peut se définir récursivement de la façon suivante :

Un arbre est :

On peut donc coder un arbre par un mot bien parenthésé : (B, (D, E)C)A est l'arbre ayant A pour racine. A possède 2 fils : B et C. C possède deux fils : D et E.

Le format de fichier à obtenir est le format Newick. Il s'agit aussi d'un format parenthésé, dans lequel apparaît aussi la longueur des branches. En voici un exemple :

(VR-V6:0.11682,VR-V8:0.06318,((VR-V1:0.06853,(VR-V2:0.01681,
VR-V4:0.03669):0.03887):0.00814,((VR-V3:0.01653,(VR-V5:0.02734,
VR-V5P:0.04446):0.00437):0.03987,VR-V7:0.06190):0.01172):0.00775);

Sur vos systèmes, vous pouvez lancer la commande: phylip drawgram, puis lui spécifier le nom d'un fichier au format Newick afin de visualiser un arbre phylogénétique (et tester que votre format de fichier est correct).



III – Dessin d'arbre

A partir d'un fichier au format Newick, le but de cette partie est de « dessiner » un sous-arbre de ce style :

                                      +--1:Human
                                   +-22
                                +-21  +--2:Chimp
                                |  |
                             +-20  +-----3:Gorilla
                             |  |
                 +----------19  +--------4:Orang
                 |           |
              +-18           +-----------5:Gibbon
              |  |
              |  |              +--------6:Barbary Ma
              |  +-------------23
              |                 |  +-----7:Crab-e. Ma
      -------17                 +-24
              |                    |  +--8:Rhesus Mac
              |                    +-25
              |                       +--9:Jpn Macaq
              |
              +-------------------------10:Squir. Mon