original in es Carlos Andrés Pérez
en to es Carlos Andrés Pérez
en to fr Jean-EtiennePoirrier
Carlos Andrés Péres est sp�cialiste en Simulation Mol�culaire et candidat au doctorat en Biotechnologie. Conseiller technique du Grupo de Investigación en Educación Virtual (GIEV) - Groupe de Recherche en Apprentissage Virtuel. Adresse : Universidad Santiago de Cali, Calle 5ª carrera 62 Campus Pampalinda, Cali – Colombia.
La bioinformatique est n�e lorsque les scientifiques ont commenc� � stocker les s�quences biologiques dans un format num�rique et les premiers programmes pour les comparer ont suivi. Pendant un bon moment, la bioinformatique a �t� limit�e � l'analyse de s�quences. N�anmoins, l'importance de l'�tablissement de la forme structurelle des mol�cules a transform� les ordinateurs en un outil important pour la recherche en biochimie th�orique. Chaque jour, il y a plus d'informations et plus de collections de donn�es sur la conformation tridimensionnelle des mol�cules. Les g�nes ont chang� : �tudi�s de mani�re individuelle au d�but, ils sont maintenant �tudi�s ensemble (ou une partie non n�gligeables d'entre eux). Il est maintenant plus facile de comprendre comment ils se comportent entre eux, avec les prot�ines et comment ils s'organisent dans les voies m�taboliques. � chaque fois, nous devenons plus conscients de l'importance d'organiser les donn�es.
Chacune des activit�s d�crites a au-moins deux faces pour lesquelles ils sont int�ressants. D'un c�t�, l'int�r�t biologique est de conna�tre les relations entre les mol�cules de la vie ; et de l'autre c�t�, l'assemblage devient un probl�me de conception de logiciel int�ressant � r�soudre. La n�cessit� est de combiner et d'int�grer l'information biologique pour obtenir une vision globale et effective des processus biologiques sous-jacents. Nous avons �galement remarqu� la n�cessit� de combiner diff�rentes branches de l'informatique pour arriver � une solution effective. Par exemple, la gestion de bases de donn�es, l'int�gration des donn�es, des algorithmes efficaces, du mat�riel puissant - grilles, multi-processeurs, etc.
Larry Wall a commenc� le d�veloppement de Perl en
1986. Perl est un langage de programmation interpr�t�, id�al pour
manipuler des textes, fichiers et processus. Perl permet le d�veloppement
rapide de petits programmes. On peut dire que Perl est un m�lange
optimis� de langage de haut niveau (par exemple, C) et de langage de
script (par exemple, Bash).
Les programmes Perl peuvent tourner sous diff�rents syst�mes
d'exploitation/plates-formes. Cependant, Perl est n� et
s'est r�pandu sur les syst�mes d'exploitation UNIX. Perl a
compl�tement d�pass� sa port�e initiale, gr�ce � l'impulsion qu'il a
re�u de son utilisation imm�diate comme langage pour applications web.
Avant que Perl ne soit utilis�, awk,
thirst et grep �taient les outils
d'analyse de fichier et d'extraction de l'information.
Perl a r�uni les possibilit�s de ces outils UNIX dans un seul programme �tendant et modernisant chacun d'entre eux avec plus de fonctionnalit�s.
Perl est un langage de programmation libre et il est peut �tre ex�cut� sur tout syst�me d'exploitation qui est g�n�ralement pr�sent dans les laboratoires de recherche biologique. Sous UNIX et MacOSX, il est d�j� pr�compil�, sur d'autres syst�mes, il est n�cessaire d'installer Perl. Il suffit de l'obtenir du site : http://www.cpan.org pour le syst�me que nous utilisons.
Les programmes en Perl sous Linux sont appel� par le nom du fichier qui contient les instructions pour l'ex�cuter. Les instructions sont plac�es dans un fichier et Perl est �voqu� avec le nom de ce fichier comme argument.
Une autre m�thode fr�quente est de placer les instructions Perl dans un fichier mais sans invoquer Perl avec le fichier en argument. Pour cela, nous devons r�aliser 2 choses : (a) mettre un commentaire sp�cial � la premi�re ligne du programme :
#!/usr/bin/env perl
print "Hi\n";
et (b) stocker le fichier et lui assigner les propri�t�s UNIX d'ex�cution :
% chmod +x greetings.pl
Une fois cela fait, le fichier/programme peut �tre utilis� simplement en l'appelant par le nom de fichier
Lorsque nous avons une base de donn�es de s�quences mol�culaires au format texte, nous pouvons faire de Perl un outil de recherche de s�quence. Dans cet exemple, nous voyons comment rechercher une s�quence prot�ique dans une base de donn�es au format SWISS-PROT (db_human_swissprot), en utilisant son code id.
#!/usr/bin/perl # Recherche de s�quence d'acide amin� dans une base de donn�es # au format SWISS-PROT avec un code id donn�e # Demander le code dans le champ ID # et il l'assigne de l'entr�e standard (STDIN) � une variable print "Entrez l"ID � rechercher : "; $id_query=<STDIN>; chomp $id_query; # Nous ouvrons le fichier de base de donn�es # mais si ce n'est pas possible, le programme se termine open (db, "human_kinases_swissprot.txt") || die "probl�me � l'ouverture du fichier human_kinases_swissprot.txt\n"; # Regarder chaque ligne dans la base de donn�es while (<db>) { chomp $_; # V�rifier si nous sommes dans le champ ID if ($_ =~ /^ID/) { # Si c'est possible, nous r�coltons l'information # en coupant la ligne aux espaces ($a1,$id_db) = split (/\s+/,$_); # mais s'il n'y a pas de concordance d'ID, nous continuons ... next if ($id_db ne $id_query); # Lorsqu'ils concordent, nous pla�ons un marqueur $signal_good=1; # Ensuite, nous v�rifions le champ de s�quence # et si le marqueur est 1 (s�quence choisie), # Si c'est positif, nous changeons le marqueur � 2, pour collecter la # s�quence } elsif (($_ =~ /^SQ/) && ($signal_good==1)) { $signal_good=2; # Finalement, si le marqueur est 2, nous pr�sentons chaque ligne # de la s�quence, jusqu'� ce que la ligne commence par // # si c'est le cas, nous cassons le while } elsif ($signal_good == 2) { last if ($_ =~ /^\/\//); print "$_\n"; } } # Lorsque nous quittons l'instruction while, nous v�rifions le marqueur # s'il est n�gatif, cela signifie que nous ne trouvons pas la s�quence # choisie, ce qui nous donnera une erreur if (!$signal_good) { print "ERROR: "."Sequence not found\n"; } # Finalement, nous fermons le fichier qui est toujours ouvert close (db); exit;
#!/usr/bin/perl # Recherche de motifs d'aminoacides # Demande � l'utilisateur les motifs � chercher print "SVP introduisez le motif � chercher dans query.seq : "; $patron = <STDIN>; chomp $patron; # Ouvre le fichier de base de donn�es # mais s'il ne peut pas, le programme se termine open (query, "query_seq.txt") || die "probl�me � l'ouverture du fichier query_seq.txt\n"; # Recherche la s�quence SWISS-PROT ligne par ligne while (<query>) { chomp $_; # Lorsqu'arrive au champ SQ, placer le marqueur � 1 if ($_ =~ /^SQ/) { $signal_seq = 1; # Lorsqu'arrive la fin de la s�quence, laisser la courbure # V�rifier que cette expression est plac�e avant la v�rification # le marqueur = 1, parce que cette ligne n'appartient pas � la s�quence # d'acides amin�s } elsif ($_ =~ /^\/\//) { last; # V�rifie si le marqueur est �gale � 1 ; s'il est positif, # �limine les espaces blancs dans la ligne de la s�quence # et joint chaque ligne dans une nouvelle variable # Pour la concat�nation, nous pouvons aussi �crire : # $secuencia_total.=$_; } elsif ($signal_seq == 1) { $_ =~ s/ //g; $secuencia_total=$secuencia_total.$_; } } # Maintenant, v�rifier la s�quence collect�e dans son enti�ret� # pour le motif donn� if ($secuencia_total =~ /$patron/) { print "La s�quence query.seq contient le motif $patron\n"; } else { print "La s�quence query.seq ne contient pas le motif $patron\n"; } # Finalement, nous fermons le fichier # et quittons le programme close (query); exit;
Si nous voulons conna�tre la position exacte o� il a trouv� le motif, nous devons utiliser une variable sp�ciale `$&'. Cette variable garde le motif trouv� apr�s avoir �valu� une expression r�guli�re (il faudra la mettre juste apr�s la ligne if ($$secuencia_total>= ~/$$patron>/) {`. En plus, il est possible de combiner les variables ` $` ' et ` $ ´ ' qui stockent tout � gauche et � droite du motif trouv�. Modifions le programme pr�c�dent avec ces nouvelles variables pour donner la position exacte du motif. Note : vous pouvez aussi trouver int�ressante la fonction length qui donne la longueur de la cha�ne.
# Nous devons seulement changer le if o� le motif a �t� trouv� # Maintenant, v�rifier la s�quence collect�e dans son enti�ret�, # pour le motif donn� # et v�rifier sa position dans la s�quence if ($secuencia_total =~ /$patron/) { $posicion=length($`)+1; print "La s�quence query_seq.txt contient le motif $patron � la position suivante $posicion\n"; } else { print "La s�quence query_seq.txt ne contient pas le motif $patron\n"; }
La fr�quence des diff�rents acides amin�s dans les prot�ines est variable. Cela r�sulte de ses diff�rentes fonctions ou environnements favoris. Donc, dans cet exemple, nous allons voir comment calculer la fr�quence en acides amin�s d'une s�quence donn�e d'acide amin�.
#!/usr/bin/perl # Calcule la fr�quence d'un acide amin� dans une s�quence prot�ique # R�cup�re le nom de fichier de la ligne de commande # (format� selon SWISS-PROT) # Peut aussi �tre demand� avec print de <STDIN> if (!$ARGV[0]) {print "La commande devrait �tre : program.pl fichier_swissprot\n";} $fichero = $ARGV[0]; # Initialise la variable $errores my $errores=0; # Ouvre le fichier en lecture open (FICHA, "$fichero") || die "probl�me lors de l'ouverture du fichier $fichero\n"; # D'abord, nous v�rifions la s�quence comme nous l'avons fait dans l'exemple 2 while (<FICHA>) { chomp $_; if ($_ =~ /^SQ/) { $signal_good = 1; } elsif ($signal_good == 1) { last if ($_ =~ /^\/\//); $_ =~ s/\s//g; $secuencia.=$_; } } close (FICHA); # Maintenant, utilisons une courbure qui v�rifie chaque position de l'acide # amin� dans la s�quence (� partir d'une fonction propre qui peut �tre # utilis�e par apr�s par d'autres programmes) comprueba_aa ($secuencia); # Affiche le r�sultat � l'�cran # D'abord les 20 acides amin�s et ensuite les chaines avec leurs fr�quences # Dans ce cas, 'sort' ne peut pas �tre utilis�e dans le foreach, # parce que la chaine contient des fr�quences (nombres) print"A\tC\tD\tE\tF\tG\tH\tI\tK\tL\tM\tN\tP\tQ\tR\tS\tT\tV\tW\tY\n"; foreach $each_aa (@aa) { print "$each_aa\t"; } # Ensuite, on donne les erreurs possibles # et termine le programme print "\nerreurs = $errores\n"; exit; # Fonctions # Cette fonction calcule la fr�quence de chaque acide amin� # d'une s�quence prot�ique sub comprueba_aa { # Acqu�rir la s�quence my ($secuencia)=@_; # et tourner, acide amin� par acide amin�, en utilisant un for allant # de 0 jusqu'� la longueur de la s�quence for ($posicion=0 ; $posicion<length $secuencia ; $posicion++ ) { # Acqu�rir les acides amin�s $aa = substr($secuencia, $posicion, 1); # et v�rifier lequel utilise if # and checks which one is using if # lorsqu'il est coch�, il ajoute 1 � la fr�quence correspondante # dans une cha�ne utilisant un pointeur pour chacun d'eux # class�s par ordre alphab�tique if ( $aa eq 'A' ) { $aa[0]++; } elsif ( $aa eq 'C' ) { $aa[1]++; } elsif ( $aa eq 'D' ) { $aa[2]++; } elsif ( $aa eq 'E' ) { $aa[3]++; } elsif ( $aa eq 'F' ) { $aa[4]++; } elsif ( $aa eq 'G' ) { $aa[5]++; } elsif ( $aa eq 'H' ) { $aa[6]++; } elsif ( $aa eq 'I' ) { $aa[7]++; } elsif ( $aa eq 'K' ) { $aa[8]++; } elsif ( $aa eq 'L' ) { $aa[9]++; } elsif ( $aa eq 'M' ) { $aa[10]++; } elsif ( $aa eq 'N' ) { $aa[11]++; } elsif ( $aa eq 'P' ) { $aa[12]++; } elsif ( $aa eq 'Q' ) { $aa[13]++; } elsif ( $aa eq 'R' ) { $aa[14]++; } elsif ( $aa eq 'S' ) { $aa[15]++; } elsif ( $aa eq 'T' ) { $aa[16]++; } elsif ( $aa eq 'V' ) { $aa[17]++; } elsif ( $aa eq 'W' ) { $aa[18]++; } elsif ( $aa eq 'Y' ) { $aa[19]++; # Si l'acide amin� n'est pas trouv�, # il ajoute 1 aux erreurs } else { print "ERREUR: Acide amin� non trouv� : $aa\n"; $errores++; } } # Finalement, retourne la cha�ne de fr�quences return @aa; }
Maintenant, nous allons effectuer les �tapes suivantes qui suivent le flux d'information dans une cellule apr�s la transcription. Une de ces �tapes est la traduction, par laquelle une s�quence d'ARN provenant du g�ne (qui y �tait sous forme d'ADN) se transforme en prot�ines ou s�quences d'acides amin�s. Pour cela, nous devons utiliser le code g�n�tique qui est bas� sur des triplets d'ARN/ADN correspondants � un acide amin�. La s�quence que nous allons extraire est une portion d'un g�ne d'Escherichia coli au format EMBL et nous allons bient�t v�rifier la traduction avec l'acide amin� r�el. Pour cet exemple, il sera n�cessaire d'introduire les variables associatives de cha�nes ou tables de hachage (tables hash). Dans le programme, nous devrions consid�rer que seule la r�gion codificarte est n�cessaire, r�gion incluse dans le champ 'FT CDS field.
#!/usr/bin/perl # Traduit une s�quence d'ADN � partir d'une fiche EMBL # vers l'acide amin� correspondant # Il prend le nom du fichier dans la ligne de commande # (fichier au format SWISS-PROT) # Il peut �galement �tre demand� avec print � partir de <STDIN> if (!$ARGV[0]) {print "La ligne de commande devrait �tre : program.pl fiche_embl\n";} $fichero = $ARGV[0]; # Ouvre le fichier en lecture open (FICHA, "$fichero") || die "probl�me � l'ouverture du fichier $fichero\n"; # D'abord, nous v�rifions la s�quence comme nous l'avons fait dans # l'exemple 2 while (<FICHA>) { chomp $_; if ($_ =~ /^FT CDS/) { $_ =~ tr/../ /; ($a1,$a2,$a3,$a4) = split (" ",$_); } elsif ($_ =~ /^SQ/) { $signal_good = 1; } elsif ($signal_good == 1) { last if ($_ =~ /^\/\//); # Elimine les nombres et espaces $_ =~ tr/0-9/ /; $_ =~ s/\s//g; $secuencia.=$_; } } close (FICHA); # Maintenant, nous d�finissons un tableau associatif avec la # correspondance entre chaque acide amin� et leurs nucl�otides # correspondant (c'est aussi dans une fonction propre, au cas o� le m�me # code g�n�tique serait utilis� dans d'autres programmes my(%codigo_genetico) = ( 'TCA' => 'S',# S�rine 'TCC' => 'S',# S�rine 'TCG' => 'S',# S�rine 'TCT' => 'S',# S�rine 'TTC' => 'F',# Ph�nilalanine 'TTT' => 'F',# Ph�nilalanine 'TTA' => 'L',# Leucine 'TTG' => 'L',# Leucine 'TAC' => 'Y',# Tirosine 'TAT' => 'Y',# Tirosine 'TAA' => '*',# Stop 'TAG' => '*',# Stop 'TGC' => 'C',# Cyst�ine 'TGT' => 'C',# Cyst�ine 'TGA' => '*',# Stop 'TGG' => 'W',# Tryptophane 'CTA' => 'L',# Leucine 'CTC' => 'L',# Leucine 'CTG' => 'L',# Leucine 'CTT' => 'L',# Leucine 'CCA' => 'P',# Proline 'CCC' => 'P',# Proline 'CCG' => 'P',# Proline 'CCT' => 'P',# Proline 'CAC' => 'H',# Hystidine 'CAT' => 'H',# Hystidine 'CAA' => 'Q',# Glutamine 'CAG' => 'Q',# Glutamine 'CGA' => 'R',# Arginine 'CGC' => 'R',# Arginine 'CGG' => 'R',# Arginine 'CGT' => 'R',# Arginine 'ATA' => 'I',# IsoLeucine 'ATC' => 'I',# IsoLeucine 'ATT' => 'I',# IsoLeucine 'ATG' => 'M',# Methionine 'ACA' => 'T',# Tr�onine 'ACC' => 'T',# Tr�onine 'ACG' => 'T',# Tr�onine 'ACT' => 'T',# Tr�onine 'AAC' => 'N',# Asparagine 'AAT' => 'N',# Asparagine 'AAA' => 'K',# Lisine 'AAG' => 'K',# Lisine 'AGC' => 'S',# S�rine 'AGT' => 'S',# S�rine 'AGA' => 'R',# Arginine 'AGG' => 'R',# Arginine 'GTA' => 'V',# Valine 'GTC' => 'V',# Valine 'GTG' => 'V',# Valine 'GTT' => 'V',# Valine 'GCA' => 'A',# Alanine 'GCC' => 'A',# Alanine 'GCG' => 'A',# Alanine 'GCT' => 'A',# Alanine 'GAC' => 'D',# Acide Aspartique 'GAT' => 'D',# Acide Aspartique 'GAA' => 'E',# Acide Glutamique 'GAG' => 'E',# Acide Glutamique 'GGA' => 'G',# Glycine 'GGC' => 'G',# Glycine 'GGG' => 'G',# Glycine 'GGT' => 'G',# Glycine ); # Traduire chaque codon en son acide amin� correspondant # et l'aggr�ge dans la s�quence prot�ique print $a3; for($i=$a3 - 1; $i < $a4 - 3 ; $i += 3) { $codon = substr($secuencia,$i,3); # Transforme le codon de minuscule (format EMBL) en majuscule $codon =~ tr/a-z/A-Z/; $protein.= codon2aa($codon); } print "Cette s�quence prot�ique du g�ne : \n$secuencia\n est la suivante :\n$protein\n\n"; exit;