Algorithmique pour la bioinformatique 1. Présentation du module

publicité
Algorithmique pour la
bioinformatique
Présentation, dotPlot, et JAVA
(Vincent Ranwez – UM2/ISEM)
1
1. Présentation du module
n  Intervenants
n 
n 
V. Ranwez (cours / TP)
Alban Mancheron (TP – projet)
n  Contenus des TP
n 
n 
n 
n 
n 
Manipulation de séquences biologiques (tableau 1D)
Dot plot (tableau 2D, affichage graphique)
Alignement de 2 séquences (programmation dynamique)
Manipulation de données NGS
Notation …
n  Objectifs du module
n 
n 
n 
Problématiques biologiques / traduction-solution info / adaptation
Bibliothèques de bouts de codes utiles
Bonnes habitudes de programmation
2
1
2. Séquence complémentaire
n  ADN, alphabet à 4 lettres :
n 
n 
A : adénine
G : guanine
T : thymine
C : cytosine
5
S1
3
G
A
C
C
A
A
T
G
A
C
C
T
G
G
T
T
A
C
T
G
5
3
n  Séquence S1 = CTGGTTACTG
n 
n 
n 
Complement (S1) = GACCAATGAC
Reverse (S1) = GTCATTGGTC
Reverse_Complement (S1) = CAGTAACCAG
n  Ecrire les algorithmes de ces 3 fonctions (char[])
3
2. Séquence complémentaire
public static char[] complement (char[]seq)
{
char [] res = new char[seq.length];
for (int i=0; i<seq.length; i++)
switch (seq[i])
{
case 'A':
res[i]='T'; break;
case 'T':
res[i]='A'; break;
case 'C':
res[i]='G'; break;
case 'G':
res[i]='C'; break;
default:
res[i]='X'; break;
}
return res;
}
4
2
2. Séquence complémentaire
public static char[] reverse(char []seq)
{
char [] res = new char[seq.length];
int last = seq.length-1;
for(int i =0;i<seq.length;i++,last--)
res[last]= seq[i];
return res;
}
public static char[] reverse_comp(char[] seq)
{
return( reverse(complement(seq)));
}
Est-ce une solution efficace, complexité ?5
3. Alignement - Introduction
n  Alignement de séquences
n 
n 
n 
n 
n 
Problème représentatif de la bio-informatique
Un des outils de bio-informatique les plus utilisés
Solution graphique (TP2) et algorithmique (TP3)
Algorithme de base élégant
Force et limite de l informatique en biologie
n  Problématique
n 
n 
n 
Recherche des similitudes entre plusieurs séquences
Substitution, Insertion/Déletion (InDel)
Exemple : POMME/GOMME
OCTOBRE/OTARIE
P O M M E
O C T O B R -
E
G O M M E
O -
E
T A -
R I
6
3
3. Intérêt de la comparaison de séquences
n  Biologie moléculaire
n 
n 
n 
n 
n 
Séquences ADN, ARN, acides aminés
Recherche approchée dans une base de données
Prédiction de structure
Prédiction de fonction
Phylogénie (histoire évolutive des espèces)
n  Informatique
n 
n 
Comparaison de fichiers (1ligne ~ 1 caractère) :
diff sous UNIX
Recherche approchée dans un dictionnaire (correcteur
orthographique, fautes de frappes)
n  Autres applications
n 
n 
Reconnaissance vocale
…
7
4. Dot plot
n  Réponse visuelle au problème
n  Largement utilisée
principe
exemple avec 2 séquences de 230 AA
(avec filtrage)
8
4
4. Dot plot
n  Écrire la fonction DotPlot et indiquer sa complexité
public static int[][]dotPlot(char[]seq1, char[] seq2)
{
int [][]res=new int[seq1.length][seq2.length];
for(int i=0;i<seq1.length;i++)
for(int j=0; j<seq2.length; j++)
if(seq1[i]==seq2[j])
res[i][j]=1;
else
res[i][j]=0;
return res;
}
public staticde
int[][]dotPlot(char[]seq1,
char[] seq2){int [][]
Importance
la représentation graphique
res=new int[seq1.length][seq2.length];for(int
pour percevoir l information
i=0;i<seq1.length;i++)for(int j=0; j<seq2.length; j++)if
(seq1[i]==seq2[j])res[i][j]=1;elseres[i][j]=0;
return
res;}
9
4. Dot plot : filtrage
n  On note seq(a,b) la sous séquence de seq allant de
l’indice a à l indice b
n  Res[i][j] contiendra 1 ssi
seq1(i-k,i+k) = seq2(j-k,j+k)
n  On peut filtrer moins sauvagement en imposant un
seuil d identité entre les 2 sous-séquences au lieu
d une égalité complète
n  Attention aux limites
n  Quelle est la complexité de cette variante ?
10
5
4. Dot plot : filtrage
n  Dans le cas d une identité totale on peut améliorer
cette complexité
n  Le remplissage d une ligne revient à faire une
recherche de motif exact dans un mot
A
11
5. JAVA 1.5 : les generics
Java 1.4
JAVA 1.5
Vector v = new Vector();
Vector <Integer> w =
new Vector<Integer>();
Integer i;
v.add(new Integer(5))
v.add(7) ERREUR
v.add("abcd");
i = (Integer)(v.get(0));
int k = i.intValue();
i = (Integer)(v.get(1));
Integer i;
w.add(new Integer(5));
w.add(7);
w.add("abcd"); REFUSE
i = (Integer)(w.get(0));
int k = w.get(1);
Gain en fiabilité : contrôle des types (generics)
Gain en simplicité : cast inutile (generic + autoboxing)
Autoboxing : enrobage automatique des types primitifs dans la classe adéquate
12
6
5. JAVA 1.5 : les generics
n  Vector<Integer> n'est pas un sous-type de
Vector<Object>
n 
Cela poserait des problèmes
Vector<Integer> intVect = new Vector<Integer>();
Vector<Object> objVect = intVect ;
objVect.add(new Object());
Integer i = intVect .get(0);// ce n'est pas un Integer !
n  Comment avoir un vecteur d objets hétérogènes ?
Ø 
Ø 
Vector <?> : vector ne n importe quoi
Vector < ? extends Figure > : vector de Figure ou classes dérivées
13
5. JAVA 1.5 : les for sans l effort
ArrayList liste =
new ArrayList();
JAVA 1.4
liste.add(new Coord(5,8));
liste.add(new Coord(9,12));
liste.add(new Coord(6,25));
Iterator it = liste.iterator();
while(it.hasNext())
{ Coord c = (Coord)it.next();
System.out.println("x="+ c.x + " y=" + c.y);
}
JAVA 1.5
ArrayList<Coord> liste = new ArrayList<Coord>();
liste.add(new Coord(5,8));
liste.add(new Coord(9,12));
liste.add(new Coord(6,25));
for(Coord c : liste)
System.out.println("x="+ c.x + " y=" + c.y);
14
7
Téléchargement