• Publicidad

Valores de variables

Perl aplicado a la bioinformática

Valores de variables

Notapor Cacho10 » 2013-10-16 12:21 @556

Hola, aquí, aprendiendo Perl y haciendo mi primera pregunta en el foro.

¿Cómo debo interpretar los valores $fi[0], $fi[1], $fi[2] etc., tanto para $f1 y $r1?

Agradezco su ayuda.

while(my $f1=<WF>){
$f1[0]=$f1;
chomp($f1[1]=<WF>);
$f1[2]=<WF>;
chomp($f1[3]=<WF>);
$r1[0]=<WR>;
chomp(my $temp1=<WR>);
$r1[1]=reverse($temp1);
$r1[1]=~s/A/a/g;
$r1[1]=~s/T/t/g;
$r1[1]=~s/C/c/g;
$r1[1]=~s/G/g/g;
$r1[1]=~s/a/T/g;
$r1[1]=~s/t/A/g;
$r1[1]=~s/c/G/g;
$r1[1]=~s/g/C/g;
$r1[2]=<WR>;
chomp(my $temp2=<WR>);
$r1[3]=reverse($temp2);
my $rf1=$f1[1].$c_60.$r1[1];
chomp($f1[0]);
print FILE "$f1[0] $rf1\n";
}
Cacho10
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-10-16 12:13 @551

Publicidad

Re: Valores de variables

Notapor explorer » 2013-10-16 14:19 @638

Bienvenido a los foros de Perl en Español, Cacho10.

El código creo que hace lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ( my $f1 = <WF> ) {           # para todas las líneas del archivo asociado a WF, cada línea se mete en $f1
  2.     $f1[0] = $f1;                   # $f1 no se usa en ningún otro sitio más que aquí, haciendo una copia de la línea en $f1[0]
  3.     chomp( $f1[1] = <WF> );         # leemos la siguiente línea de WF, la guardamos en $f1[1] y le quitamos los finales de línea
  4.     $f1[2] = <WF>;                  # leemos la siguiente línea de WF, la guardamos en $f1[2], y no lo usamos más
  5.     chomp( $f1[3] = <WF> );         # leemos la siguiente línea de WF, la guardamos en $f1[3] y le quitamos los finales de línea, y no lo usamos más
  6.     $r1[0] = <WR>;                  # leemos una línea de WR, la guardamos en $r1[0], y no lo usamos más
  7.     chomp( my $temp1 = <WR> );      # leemos la siguiente línea de WR, la guardamos en $temp1 y le quitamos los finales de línea
  8.  
  9.     $r1[1] = reverse($temp1);       # la última línea leída, le damos la vuelta y la guardamos en $r1[1]
  10.     $r1[1] =~ s/A/a/g;              # de la última línea leída, cambiamos todas las 'A' por 'a'
  11.     $r1[1] =~ s/T/t/g;              # de la última línea leída, cambiamos todas las 'T' por 't'
  12.     $r1[1] =~ s/C/c/g;              # de la última línea leída, cambiamos todas las 'C' por 'c'
  13.     $r1[1] =~ s/G/g/g;              # de la última línea leída, cambiamos todas las 'G' por 'g'
  14.     $r1[1] =~ s/a/T/g;              # de la última línea leída, cambiamos todas las 'a' por 'T'
  15.     $r1[1] =~ s/t/A/g;              # de la última línea leída, cambiamos todas las 't' por 'A'
  16.     $r1[1] =~ s/c/G/g;              # de la última línea leída, cambiamos todas las 'c' por 'G'
  17.     $r1[1] =~ s/g/C/g;              # de la última línea leída, cambiamos todas las 'g' por 'C'
  18.     $r1[2] = <WR>;                  # leemos otra línea más y la guardamos en $r1[2], y no la usamos más
  19.  
  20.     chomp( my $temp2 = <WR> );           # leemos otra línea, la guardamos en $temp2 y le quitamos los finales de línea
  21.     $r1[3] = reverse($temp2);            # le damos la vuelta y la guardamos en $r1[3], y no lo usamos más
  22.     my $rf1 = $f1[1] . $c_60 . $r1[1];   # concatenamos $f1[1] (que es la segunda línea leída), con $c_60, con la sexta línea traducida
  23.     chomp( $f1[0] );                     # quitamos los finales de línea de la primera línea
  24.     print FILE "$f1[0] $rf1\n";          # escribimos a un archivo externo la primera línea y el resultado de la concatenación anterior
  25. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Lo que parece es que se leen ciertas líneas, se transforman un par de ellas, y se genera un resultado.

Se nota que quieres sacar la complementaria de una secuencia de ADN.

Esta es mi propia interpretación, reducida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (my $cabeza = <WF>) {
  2.     chomp $cabeza;
  3.  
  4.     chomp(my $segunda = <WF>);
  5.  
  6.     <WF>; <WF>; <WR>;
  7.  
  8.     chomp(my $seq = <WR>);
  9.     $seq = reverse $seq;
  10.     $seq =~ tr/ATCG/TAGC/;
  11.  
  12.     <WR>; <WR>;
  13.  
  14.     my $cuerpo = $segunda . $c_60 . $seq;
  15.  
  16.     print FILE "$cabeza $cuerpo\n";
  17. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Valores de variables

Notapor Cacho10 » 2013-10-16 15:48 @700

Gracias, explorer. Efectivamente en esta parte se trata de obtener la secuencia complementaria de un DNA. En virtud de que soy completamente nuevo en esto de Perl -y en programación en general- quería saber a que se referían la manera en que están usando dichas variables en el script.

Por cierto, explorer, si los archivos WF y WR tuvieran 100 secuencias cada uno (correspondientes entre sí), en el script, ¿cómo se da la orden que indica en que momento termina el proceso para cada uno de los pares de secuencias?

Agradezco tu apoyo, muy clara tu explicación.

Saludos.
Cacho10
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-10-16 12:13 @551

Re: Valores de variables

Notapor explorer » 2013-10-16 17:39 @777

Para hacerlo un poco más claro, yo agruparía las lecturas de las líneas en una parte del bucle. Si publicas una pequeña parte de los archivos podremos tener más pistas de lo que quieres hacer.

El proceso puede terminar si llegamos a la marca de fin de archivo, si estamos leyendo el archivo más corto, desde luego.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Valores de variables

Notapor Cacho10 » 2013-11-05 15:02 @668

Hola, aquí molestando nuevamente y tratando de aprender sobre el lenguaje Perl.

Se supone que tengo un conjunto de lecturas (secuencias); las que se duplican o repiten se consideran como una sola y se guardan en un archivo denominado select. Las lecturas únicas se guardan en otro archivo nombrado como not_select.

Mi pregunta es en qué momento del siguiente script se le dice que guarde las que se repiten. Y hasta que cantidad de lecturas se pueden considerar como una sola. O mejor dicho: cómo identifico aquí si una lectura es duplicada o no.

Al final envío los resultados obtenidos de los archivos select y not_select

system "sort -k 2 $output >temp01";
system "uniq -c -f 1 temp01 |sort -n -r >temp02";
my @each_line="";
open TEMP02, "temp02"||di("cannot open temp02 file");
open SELECT, ">select"||di("cannot open select file");
open NOT_SELECT, ">not_select"||di("cannot open not_select file");
while(<TEMP02>){
@each_line=split;
print "$each_line[0] $count\n";
if($each_line[0] >= $count){print SELECT "$_";}
else{print NOT_SELECT "$_";}
}
close TEMP02;
close SELECT;
close NOT_SELECT;
system "rm temp01 temp02";


Archivo Select
45 @S210:3:10:11039:15124#0/1 AGCTCCAGCTATCCTGAGGGAAACTTCGGAGGGAACCAGCTACTAGATGGTTCGATTAGTCTTTCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCATATATAGAAATAGAAAGAGATAGACTAGAAACGACATCTCTTATGTCAATGACACCAAAGGGATATTA
.
.
2 @S210:3:10:10189:18283#0/1 AGCTCCCACTTATTCTACACCTCTCAAGTCATTTCACAAAGTCGGACTAGAGTCAAGCTCAACAGGGTCTCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGCAATACCAAACCAAATACGACGAGTAGTGGGGTCCTGAGCTAAGCCTTGGCTAAACCTTGGAAATCTTA

Al inicio supongo que se tiene el número de lecturas que conforman esa secuencia "única"

Archivo not_select
1 @S210:3:9:9998:11094#0/1 AGCTCCAGTCATGCAGCCTGACATCTGGGAGGAGTGGTGGCGTCCTGCATGTGTCCTGGACATGCAGCCACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCTGAACTGAAACTTGAGCTCTCGATTCCGTGGGATGGCTCAACAAAGCAGCCACCCCGTCCTACCTATTTA
.
.
.
1 @S210:3:10:10006:2894#0/1 AGCTCTCTTCAACTTTCTCACACAACTCTTCAACTTGAACATTCATGAAGGAAGCTATCGTAGGCGGTTTCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCTGTGAATTTCTGACCCGCGATCAATCCCGAATATTTTTCCGCTCCCATTCTGATTCTCTGAATATTTTTA
Cacho10
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-10-16 12:13 @551

Re: Valores de variables

Notapor explorer » 2013-11-05 16:05 @711

Ese código es un poco antiguo, ya que usa comandos externos para realizar su trabajo.

En la primera línea se hace una ordenación de las líneas, necesario para luego hacer la segunda línea.

En la segunda línea se sacan las líneas únicas, junto con el número de veces que se repiten.

Luego viene un bucle en que se lee el resultado de esas operaciones. Si el número de veces que se repite es igual o superior a $count (que no sabemos lo que vale), lo guarda en select, y si no, pues en not_select.

La verdad, se puede hacer todo en Perl, sin depender de herramientas externas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Valores de variables

Notapor Cacho10 » 2013-11-12 14:06 @629

Perdón por la tardanza, explorer. Agradezco tu atención. He estado revisando esta parte y ya comprendí para qué lo hace. Aún me falta mucho por aprender sobre Perl.

Saludos.
Cacho10
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2013-10-16 12:13 @551


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron