• Publicidad

Fichero GenBank

Perl aplicado a la bioinformática

Notapor explorer » 2008-01-02 15:27 @685

Más sencillo... pues no se me ocurre cómo... está lo mínimo para leer el fichero, guardar la información y luego extraerla según lo indicado...

La estructura de datos es la mínima: por cada parte, tenemos unas @features_cds y un $origin. Lo del $origin está claro: todos los nucleótidos puestos en secuencia, en una variable escalar. Y las @features_cds es un array, del que cada elemento es un hash, que tiene como claves 'parte' y 'nombre', que guardan, respectivamente, el inicio y fin de la posición de la secuencia (en un array) y el nombre del gen.

Y luego a la hora de imprimir el resultado, consiste en repasar todas las @features_cds encontradas y sacar la información del $origin.

Si hay algo que no entiendes, pregunta por él. Si es todo, vamos por partes y te lo explico, pero supongo que sabrás algo de Perl, ya que, también supongo, que si te han encargado algo es porque habrás recibido algún curso o estarás aprendiendo por tu cuenta.

En cuanto a lo de extraer la secuencia de tres en tres se puede hacer de varias formas, siendo una de ellas el substr(), naturalmente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $origin = 'atgattcctggtaaccgaatgct';
for ( my $i = 0; $i < length $origin; $i += 3 ) {
    print substr $origin, $i, 3;
    print "\n";
}
Coloreado en 0.004 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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor raquel » 2008-01-02 17:24 @767

Es una asignatura de mi carrera, pero tenemos un nivel muy básico y creo que demasiado básico e insuficiente para hacer este trabajo... así que me harías un gran favor si me lo explicases con más detalle.

He intentado hacer esta parte por mi cuenta mediante subrutinas que contienen bucles y tengo un problema porque no me me indica fallos en las mismas pero no me extrae lo que le pido. ¿Por qué me pasa eso?
raquel
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2007-12-29 08:01 @375

Notapor explorer » 2008-01-02 17:33 @773

Sin ver el código y el/los mensajes de error, es muy difícil saber qué es lo que está pasando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor raquel » 2008-01-05 05:04 @253

Necesito solo la subrutina que me extraiga la línea del CDS, en concreto solo los dos números.
raquel
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2007-12-29 08:01 @375

Notapor explorer » 2008-01-05 07:23 @349

Pues eso ya está escrito en mi solución, donde pone

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( $linea =~ m/(\d+)\.\.(\d+)/ ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Después de esta línea, dispones de los dos números en las variables $1 y $2.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor raquel » 2008-01-09 04:05 @212

He logrado hacer una subrutina que me extraiga todas las secuencias desde el ORIGIN hasta las //. Sin números y sin saltos de línea. Por otro lado también he logrado extraer el CDS. Mi problema ahora es unirlo de tal forma que solo me extraiga la secuencia codificante, no sé como hacerlo.
Tengo por una parte
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $line (@genbank) {



        if( $line =~ /^\/\/\n/) { # If $line is end-of-record line //\n,
        $in_sequence = 0;  
        } elsif( $in_sequence) { # If we know we're in a sequence,

            $$dna .= $line; # add the current line to $$dna.

        } elsif ( $line =~ /^ORIGIN/ ) { # If $line begins a sequence,

            $in_sequence = 1; # set the $in_sequence flag.

        } else { # Otherwise

            push( @$annotation, $line); # add the current line to @annotation.

        }

    }

       

    # remove whitespace and line numbers from DNA sequence

    $$dna =~ s/[\s0-9]//g;

        }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y por otra

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $line (@genbank) {
  if($line =~ /^     CDS/) {
   $line =~ m/(\d+)\.\.(\d+)/;
        $line =~ s/CDS//;
        $line =~ s/\s*//;
        $a = $line;
        $a =~ /\.\./;
        $variable1 = "$` \n";
        $variable2 = "$' \n";
        print $variable1;
        print $variable2;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Cómo puedo meter esta segunda parte en la primera para que me extraiga la secuencia codificante añadiendo un substr?
raquel
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2007-12-29 08:01 @375

Notapor explorer » 2008-01-09 06:06 @295

No sé porqué usas $$dna. ¿No será $dna? Lo mismo para @$annotation. ¿No será @annotation?

Ahora te falta extraer la secuencia. Al substr le tienes que dar el lugar de comienzo y la longitud de la cadena a extraer. El lugar de comienzo debe estar basado en 0.

Si ves mi código aparece:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
substr $origin, $rango_inicio-1, $rango_fin-$rango_inicio;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y eso es lo que necesitamos: de la posición inicial le restamos 1 (porque la posición en substr se basa en 0) y la longitud de la cadena a extraer es la diferencia entre la posición inicial y final.

Ahora que me doy cuenta, ¿qué pasa si el CDS es como, por ejemplo, '123..123'. Entonces la diferencia sería 0 y el substr no nos devolvería nada. Pero supongo que en ese caso tendría que devolvernos al menos el nucleótido número 123.

Así que al final queda:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$secuencia = substr($dna, $variable1 -1, $variable2 - $variable1 +1);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(O $$dna si quieres seguir usando eso).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor raquel » 2008-01-09 06:27 @310

Sí, esa es la estructura que he utilizado en el substr. El problema es que no sé cómo meter la parte del CDS y ese substr en el primer bucle foreach (que está dentro de una subrutina y me extrae todas las secuencias desde ORIGIN hasta //) que te mandé antes para que me funcione, es decir para que me extraiga solo la parte codificante. ¿Cómo lo hago? ¿Qué estructura me quedaría en el primer foreach para que funcione el programa?
raquel
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2007-12-29 08:01 @375

Notapor explorer » 2008-01-09 08:12 @383

Pues... en la parte en la que localizas un fin de secuencia, donde pones $in_sequence = 0;.

Debes tener en cuenta que en el fichero puede haber varios ficheros genbank unidos. Así que supongo que los bucles que estás poniendo ( foreach my $line (@genbank) ) se refieren a solo UNO de esos ficheros. Si no, tenemos un problema gordo: no puedes iniciar la búsqueda de partes CDS y ORIGIN empezando siempre por el principio, porque entonces no localizarías todas esas partes.

Podrías usar más banderas, para distinguir, además de estar en plena secuencia, si estás en una parte CDS. Y repetir esto para todas las líneas del fichero.

Lo principal es extraer la secuencia cuando sabemos que hemos leído un sección ORIGIN (porque suponemos que ANTES hemos leído una sección CDS y sabemos por dónde cortar).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Bioinformática

¿Quién está conectado?

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

cron