• Publicidad

Seleccionar secuencias de un archivo multiFASTA

Perl aplicado a la bioinformática

Seleccionar secuencias de un archivo multiFASTA

Notapor danusol » 2012-11-20 07:56 @372

Hola, Perleros,

tengo un archivo multiFASTA con miles de entradas y quiero filtrarlo, en función del nombre de la secuencia, que incluye información relevante para el filtrado. La verdad es que estoy un poco perdido porque no sé cómo organizarlo ya que es un archivo fasta con miles de secuencias, y no sé si es buena idea guardar todo en variables.

El archivo es de la siguiente manera. En este ejemplo voy a incluir únicamente los nombres, pero hay que entender que al ser un archivo fasta después de cada nombre va una secuencia.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>Locus_1_Transcript_1/4_Confidence_0.480_Length_1384
>Locus_1_Transcript_2/4_Confidence_0.556_Length_1223
>Locus_1_Transcript_3/4_Confidence_0.476_Length_470
>Locus_2_Transcript_4/4_Confidence_0.556_Length_1112
>Locus_2_Transcript_1/2_Confidence_0.508_Length_515
>Locus_2_Transcript_2/2_Confidence_0.048_Length_497
...
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Como veis, cada secuencia tiene un identificador que indica que es el Transcript X del Locus Y. Y además está definido por un valor de confianza y una longitud.

Lo que quiero hacer es seleccionar de cada Locus, el mejor. Y eso lo defino en dos pasos.

  1. Primero quiero filtrar por longitud y para eso me quedo con los que son más largos que una fracción de la longitud máxima de cada Locus (pasada al programa como argumento entre 0 y 1). Así, si selecciono que la longitud tiene que ser por lo menos el 50% de la longitud máxima para el Locus_1, de los cuatro, me quito el Transcript_3/4 porque su longitud es menor que la mitad del máximo (1384). Me quedo con los otros tres para el siguiente paso.
  2. Después, para los que quedan quiero ordenarlos por confianza y selecciono el que mayor confianza tenga y a su vez mayor longitud.


Así en el ejemplo, del Locus_1 me quedaría al final con >Locus_1_Transcript_2/4_Confidence_0.556_Length_1223 y su secuencia.

Para el Locus_2 los dos pasarían el corte de longitud pero me quedaría con el Transcript_1/2 porque tiene la mayor confianza de los dos.

Los mejores me los pasa a un archivo de resultados, también en formato fasta, con identificador seguido de su secuencia.

Entiendo que después de leer el archivo, tengo que trabajar Locus a Locus. Lo primero que tengo que hacer es cortar el identificador y quedarme con la longitud y la confianza de cada Transcrito. Y entonces encontrar el mayor valor de longitud y multiplicarlo por el valor dado al argumento al ejecutar el programa para poner mi valor umbral de longitud.

Pero no sé muy bien cómo continuar. ¿Cómo guardo también la secuencia de cada Transcrito para que me la devuelva en el archivo de resultados?

A ver si me podéis ayudar.



D.
danusol
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2010-04-22 07:08 @339

Publicidad

Re: Seleccionar secuencias de un archivo multiFASTA

Notapor explorer » 2012-11-20 10:34 @481

Si supiéramos que los Locus aparecen en el archivo de forma ordenada (primero los Locus_1, luego los Locus_2, etc.), entonces el problema de almacenamiento es de solo un Locus cada vez.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Seleccionar secuencias de un archivo multiFASTA

Notapor danusol » 2012-11-21 04:50 @243

Efectivamente, siempre están ordenados como dices.

Por lo tanto, al ir leyendo, se podría leer por bloques desde el primer transcrito de un Locus hasta el último transcrito, incluyendo las secuencias, extraer la longitud y la confianza del nombre, hacer los cálculos, y escribir el mejor junto con su secuencia al archivo de resultados.

Una vez hecho esto, se pasa al siguiente Locus.

David
danusol
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2010-04-22 07:08 @339

Re: Seleccionar secuencias de un archivo multiFASTA

Notapor explorer » 2012-11-21 10:40 @486

Bueno, pues entonces la tarea comienza por la lectura de cada cabecera y su correspondiente secuencia.

Lo vas leyendo por líneas, y cuando tengas los dos elementos, los guardas en una estructura. Bien puede ser un array o u hash anónimos. Y luego lo guardas en un array. Aquí incluso estaría bien meter más campos, con la información de la cabecera, porque facilita el paso siguiente.

Después de leerlos, recorres el array, extraes la información de la cabecera, y según los valores, cuando detectes un cambio en el número de Locus, haces los cálculos para los Locus leídos. Del resultado, lo sacas al archivo de salida, y luego sigues con el bucle principal del array.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

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

cron