• Publicidad

ADN y partes codificantes

Perl aplicado a la bioinformática

ADN y partes codificantes

Notapor leire_12 » 2009-07-28 08:25 @392

¡Hola!

Tengo una cadena de ADN y los CDS que me indican cuáles son las partes codificantes. Los CDS vienen de tres formas diferentes:

Intervalo único
Ejemplo:
CDS 50878..51332

Intervalos combinados que dan lugar a una única secuencia codificante
Ejemplo 1:
CDS join(53022..53183,53484..53624,53703..54494)
Ejemplo 2:
CDS join(23519..24451,24542..24655,24752..24962,25041..25435,
25524..25743,25825..25997,26081..26203,26292..26452,
26543..26776,26862..27012,27099..27281,27372..27533,
27618..27713,27803..28431,28708..28805,28890..29080,
29160..30065,30147..30311,30410..30816,30902..31079)


En este caso, la secuencia codificante, será la unión de todos los intervalos que aparecen entre paréntesis.

Entradas únicas o combinadas indicando que la secuencia codificante se
encuentra en la cadena complementaria

Ejemplo 1:
CDS complement(57392..58978)
Ejemplo 2:
CDS complement(join(61963..62124,63431..63811))

Tengo los CDS aislados pero no se me ocurre cómo podría hacer para quedarme solo con la parte codificante de la cadena de ADN utilizando la información de estos CDS. ¿Me podríais ayudar? ¡Muchas gracias!
Última edición por explorer el 2009-07-28 09:17 @428, editado 1 vez en total
Razón: Ortografía (esto es un foro, no es un teléfono móvil)
leire_12
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-07-28 07:12 @342

Publicidad

Re: ADN y partes codificantes

Notapor explorer » 2009-07-28 09:30 @437

El asunto no es trivial, debido a la naturaleza del significado de complement y join. Por ejemplo, ¿qué significa complement? Si la secuencia real es la complementaria de la indicada, ¿cómo se realiza esa operación?

De momento, mira hilos en los que ya se ha discutido este tema:
* Fichero GenBank
* Extraer datos de una cadena de caracteres (GenBank)
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

Re: ADN y partes codificantes

Notapor leire_12 » 2009-07-28 09:56 @455

Ya he mirado esos dos archivos pero no me han aclarado mucho. join significa que hay que ir juntando todos los trozos de la cadena que corresponden a esas posiciones. Por ejemplo, en el caso de join(12..34, 78..99) habría que coger las posiciones de la 12 a la 34 y de la 78 a la 99 y unirlas. complement significa que una vez extraída la cadena correspondiente a los números que se indica, habrá que hacer la complementaria.
leire_12
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-07-28 07:12 @342

Re: ADN y partes codificantes

Notapor explorer » 2009-07-28 13:47 @616

Bien. Y yo te he preguntado qué significa sacar la complementaria.
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

Re: ADN y partes codificantes

Notapor leire_12 » 2009-07-28 13:58 @623

Sacar la complementaria significa que si la cadena t ha quedado AGTC, hay que cambiar A por T y viceversa y G por C y viceversa por lo que quedaría TCAG. Pero mi problema es cómo obtener la cadena codificante con la información de los CDS.
Última edición por explorer el 2009-07-28 14:04 @628, editado 1 vez en total
Razón: Ortografía
leire_12
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-07-28 07:12 @342

Re: ADN y partes codificantes

Notapor explorer » 2009-07-28 20:38 @901

Bueno, he realizado un programa que creo que hace esa tarea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
#
# Extracción de la secuencia de las partes codificantes (CDS)
# Joaquín Ferrero. Julio 2009
#
use strict;
use warnings;
use diagnostics;

my $seq = join '', qw(
    aagaggaggaaggaagatgcgagaaggcagaggaggagggagggagggaaggagcgcgga
    gcccggcccggaagctaggagccattccgtagtgccatcccgagcaacgcactgctgcag
    cttccctgagcctttccagcaagtttgttcaagattggctgtcaagaatcatggactgtt
    attatatgccttgttttctgtcaagacaccatgattcctggtaaccgaatgctgatggtc
    gttttattatgccaagtcctgctaggaggcgcgagccatgctagtttgatacctgagacg
    gggaagaaaaaagtcgccgagattcagggccacgcgggaggacgccgctcagggcagagc
    catgagctcctgcgggacttcgaggcgacacttctgcagatgtttgggctgcgccgccgc
    ccgcagcctagcaagagtgccgtcattccggactacatgcgggatctttaccggcttcag
    tctggggaggaggaggaagagcagatccacagcactggtcttgagtatcctgagcgcccg
    gccagccgggccaacaccgtgaggagcttccaccacgaagaacatctggagaacatccca
    gggaccagtgaaaactctgcttttcgtttcctctttaacctcagcagcatccctgagaac
    gaggtgatctcctctgcagagcttcggctcttccgggagcaggtggaccagggccctgat
    tgggaaaggggcttccaccgtataaacatttatgaggttatgaagcccccagcagaagtg
    gtgcctgggcacctcatcacacgactactggacacgagactggtccaccacaatgtgaca
    cggtgggaaacttttgatgtgagccctgcggtccttcgctggacccgggagaagcagcca
    aactatgggctagccattgaggtgactcacctccatcagactcggacccaccagggccag
    catgtcaggattagccgatcgttacctcaagggagtgggaattgggcccagctccggccc
    ctcctggtcacctttggccatgatggccggggccatgccttgacccgacgccggagggcc
    aagcgtagccctaagcatcactcacagcgggccaggaagaagaataagaactgccggcgc
    cactcgctctatgtggacttcagcgatgtgggctggaatgactggattgtggccccacca
    ggctaccaggccttctactgccatggggactgcccctttccactggctgaccacctcaac
    tcaaccaaccatgccattgtgcagaccctggtcaattctgtcaattccagtatccccaaa
    gcctgttgtgtgcccactgaactgagtgccatctccatgctgtacctggatgagtatgat
    aaggtggtactgaaaaattatcaggagatggtagtagagggatgtgggtgccgctgagat
    caggcagtccttgaggatagacagatatacacaccacacacacacaccacatacaccaca
    cacacacgttcccatccactcacccacacactacacagactgcttccttatagctggact
    tttatttaaaaaaaaaaaaaaaaaaggaaaaaatccctaaacattcaccttgaccttatt
    tatgactttacgtgcaaatgttttgaccatattgatcatatattttgacaaaatatattt
    ataactacgtattaaaagaaaaaaataaaatgagtcattattttaaaggtaaaaaaaaaa
    aaaaaaaa
);

my $cds = 'join(345..389,400..567,500..523)join(85..460,490..506)complement(join(675..679,789..797))';

print length $seq;

my $extracto = $cds;            # Inicializamos el extracto al valor inicial del CDS
my $extracto_anterior = '';     # Esta nos servirá para ver los cambios entre cada ciclo
print $extracto;

my $BASES   = qr/[catg]+/;      # Expresión regular que define cómo son las bases
my $INDICES = qr/\d+/;          # Expresión regular que define cómo son los índices

while ($extracto_anterior ne $extracto) {          # Mientras existan cambios ...
    $extracto_anterior =  $extracto;                   # Guardamos el estado actual

    ## Empezamos a modificar el $extracto
    # Rangos de índices, sustituidos por la cadena de la secuencia
    $extracto =~ s/($INDICES)\.\.($INDICES)/substr($seq,$1-1,$2-$1+1)/ge;

    # Cadenas de bases contiguas, quitamos las comas
    $extracto =~ s/($BASES),($BASES)/$1$2/g;

    # Eliminación de join(). Nos quedamos solo con las bases
    $extracto =~ s/join\(($BASES)\)/$1/g;

    # Eliminación de complement(). Lo sustituimos por la complementaria
    $extracto =~ s/complement\(($BASES)\)/complement($1)/ge;
}

print $extracto;

sub complement {        # Cálculo de la complementaria
    my $subseq = shift;
    $subseq =~ tr/CATGcatg/GTACgtac/;    # Cambio letra a letra
    return $subseq;
}

__END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Lo que hace es un bucle en el que repetimos el proceso de transformar la secuencia CDS en la secuencia que queremos extraer. Para ello, aplicamos expresiones regulares de forma reiterada, hasta que salimos del bucle porque no detectamos ningún cambio más.

Las cuatro expresiones regulares son: a) sustitución de los rangos de índices por la cadena de las bases dentro de la secuencia. b) eliminación de las comas entre dos cadenas de bases. c) eliminación del operador join() cuando ya no es necesario (solo hay una secuencia de bases dentro de él). Y d) ejecución de la complementaria de una secuencia.
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

Re: ADN y partes codificantes

Notapor leire_12 » 2009-07-30 13:40 @611

El programa me funciona pero no me quedan claro los conceptos de extracto y extracto anterior y la condición del bucle. ¿Me lo podrías explicar?

En las expresiones qr/[catg]+/ y qr/\d+/ ¿qué significan qr y +?
Y en las expresiones regulares del final ¿por qué algunas llevan una e?

¡Muchas gracias!
Última edición por explorer el 2009-07-30 16:11 @716, editado 1 vez en total
Razón: Ortografía
leire_12
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-07-28 07:12 @342

Re: ADN y partes codificantes

Notapor explorer » 2009-07-30 18:07 @797

El objeto del programa es traducir el $cds a la secuencia extraída desde $seq.

La secuencia extraída la guardaré en $extracto. Al principio, su valor es igual al de $cds. En cada vuelta, haré un cambio en $extracto. Y para saber que he terminado, necesito saber si no ha habido cambios de la vuelta anterior a la situación actual de $extracto. Por esa razón necesito guardar el estado de $extracto en $extracto_anterior, para saber si ha habido cambios.

Si no hubo cambios (toda la secuencia de CDS ha sido traducida a extractos de la $seq) entonces no hay diferencias entre las dos variables $extracto. Y ahí terminamos.

qr() sirve para definir expresiones regulares, o patrones de búsqueda, que usaremos después para buscar patrones.

+ quiere decir 'uno o más'. Tienes un resumen muy bueno en el artículo de Expresiones regulares de Wikipedia. Y en la documentación Perl, en perlre.

Finalmente, la opción /e indica que la segunda parte del operador sustitución no es un literal, sino que Perl debe ejecutarla como una sentencia más del programa. El resultado de esa sentencia será lo que sustituya al patrón encontrado.

Más información en perlop, sección Regexp-Quote-Like-Operators, subapartado del operador s///.
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

Re: ADN y partes codificantes

Notapor leire_12 » 2009-07-31 08:45 @406

¡Muchas gracias! ¡Ya está solucionado!
leire_12
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-07-28 07:12 @342


Volver a Bioinformática

¿Quién está conectado?

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