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