![]() |
|
|||||||||||||||||
|
|
||||||||||||||||||
| » | Seminarios | |
| » | Cursos |
| » | Prokaryotes: Archeabacteria | |
| » | EProkaryotes: Eubacteria (Fungi) | |
| » | Animalia: Eumetazoa::Protozoan | |
| » | Animalia: Eumetazoa: Bilateria:.:Nematoda | |
| » | Animalia: :Mammalia: Primates |
Perl
| Manuales y bibliografia | Ejemplos en Biologia | Desarrollos en Perl | Algunos ejemplos y documentacion |
Por tratarse basicamente de archivos de texto plano donde se identifican regiones que contiene informacion util el lenguaje que de alguna manera ha tenido una alta utilisacion en la Bioinformatica ha sido Perl. Un ejemplo de su uso lo constituyen por ejemplo los desarrollos a nivel de CGIs para presentcion final de resultados porductos de analisis como por ejemplo BLAST. Por sus caracteristicas PERL provee facilidades para manejo de archivos de texto plano, considere el caso de un reporte de BLAST, donde tiene algo como BLASTREPORT, y quisiera por ejemplo conocer dentro de todo el conjunto de resultados cuantas veces una determinada secuencia se repite, atggt o ccttatata por ejemplo. Es en esta clase de situaciones que PERL resulta sumamente util, por su facilidad de porgramacion, y su flexibilidad a la hora de localisar ciertos patrones de busqueda. Un ejemplo de como resolver esta situacion se presenta a continuacion, este ejemplo pretende solamente ilustrar acerca de como PERL es una ayuda efectiva en estas tareas, para aquellos que deseen existen varios muy buenos manuales de PERL, consulte la seccion de manuales y bibliografia que se da en este sitio.
Claramente se identifican las secuencias y se ve como se definen zonas de informacion relevante, consideramos la nesecidad que tenemos de procesamiento: determinar cuantas veces un determinado patron de letras se repite en las secuencias que conforman el relustado de BLAST. De esta manera tenemos tentativamente algo como :
Ese es el esquema basico de el algoritmo de trabajo, de esta manera en codigo de PERL tenemos algo como:
| @words=split /\s+/, $line; if ($line=~ /^Query/) { $query_src .=$words[2]; } elsif ($line =~ /^Sbjct/) { $sbjct_src .=$words[2]; |
Query: 1 ------------------------gtcccagcaatgacagcatcgggaagtccca-----
|
@words=split /\s+/, $line;
Aqui se define el contenido de la variable @words. Se usa una variable vectorial por una razon procedimental, estas permiten el manejo de posiciones. Una ves hecho esto se instruye al pograma para que guarde en $query_src la cadena de caracteres que componen la secuencia. Se procede de igual manera con la siguiente linea de caracteres, dandole asi valores a $sbjct_src.
El siguiente paso a seguir es reconocer el patron a buscar, esto sigunifica tener almacenada en una variable la o las cadenas de caracteres que deseamos identificar dentro de la secuencia, identificar y contar.
@patterns=('gtccca', 'gcaatg', 'cagct', 'tcggga', '-')
Nuevamente se hace uso de una varialbe de tipo vectorial. Para continuar teniendo ya tanto la secuencia blanco como el patron de identificacion se deve iniciar un proceso condicionado, la condicion debe ser clara para que el ciclo tenga realmente un fin, y para que dentro de este ciclo efectivamente se lleve a cabo el proceso que deseamos.
|
my (%query_counts, %sbjct_counts); #search and store |
Estas lineas de codigo definen la identificacion y el conteo, para un mejor entendimiento de los comandos aqui utilisados por favor refierase a la bibliografia dada. Basicamente lo que se le indica aqui a PERL es que tome posiciones excalares de las definidas en el vector @patterns, y que con estas posiciones lleve a cabo una busqueda y conteo para cada caso. Para cada patron de la lista de patrones, mientras que el valor de $query_counts coincida con el de un patron cuente y almacene. Ese es basicamente el proceso que estas lineas de codigo efectuan. |
En este punto solo resta la imporesion de un reporte donde se nos diga algo como por ejemplo:
|
'-' seen 58 en query |
'-' seen 15 en sbjct |
El codigo fuente completo para este ejemplo es:
| #!/usr/bin/perl use strict; my $REPORT_FILE="report.txt"; my $blast_file=$ARGV[0]||'blast.dat'; unless (-e $blast_file) { die "$0: error:missing file: $blast_file"; } #slurp all the seqs in to the scalar my ($query_src,$sbjct_src); #open the blast data file and end prg (DIE) if
we can't find it open(IN, #go trought the blast file line by line, concat
all the query and sbj seqs my $line; #analysis part #find the patterns and sotore them in to the hashes #search and store #create an empty report fele #print the header of the report file #my $thetime = scalar (localtime); #print OUT <<"END_OF_REPORT"; #NOTEdfaasafsaada #print the query mathces #print the sbjct mathces close OUT; __END__
|
Para correrlo es nesesario contar con un archivo de entrada. en este caso es fijo, por defecto buscara a : blast.dat y por defecto generara report.txt como OUTPUT Una explicacion similar de este pequeno juego de comandos en PERL se puede encontrar en: Developing Bioinformatics computer skills, de O´Reilly editores, escrito por Cynthia Gibas&Per Jambeck, pagina 342, este libro hace parte de la bibliografia recomendada. Para entender como se puede de algun modo tener un proceso para la solucion de problemas consulte aqui. |