Contar número de veces de aparición
Publicado: 2010-10-13 04:14 @218
Hola perleros,
estoy interesado en crear un programa que me lea un archivo de secuencias cortas en formato FASTA y que me cuente el número de apariciones de cada secuencia. Me imagino que para ello tengo que crear un hash. La cuestión es que el archivo es muy grande y en pruebas con otro software he visto que puedo tener hasta 1 millón de secuencias únicas algunas repetidas más de una vez. Me gustaría luego poder crear un archivo de salida también en formato FASTA con los encabezados originales sólo para aquellas secuencias que aparecen al menos un número determinado de veces, especificado en los parámetros del programa. ¿Cómo puedo diseñar este programa? Me imagino que luego vendré con preguntas específicas, pero para empezar...
Primero, he pensado en crear un hash, meter la primera secuencia del archivo de entrada y luego empezar a comparar la siguiente. Si es igual, sumar uno al valor del key, si no, añadir otro key e inicializar su valor.
Después, he pensado eliminar todas aquellas entradas del hash que tengan un valor menor al especificado en los parámetros del programa.
La duda que me queda es cómo recuperar el encabezado original de cada uno de los keys que no se han eliminado y escribirlo a un archivo de salida.
Os incluyo un ejemplo de entrada:
Como veis, las secuencias 1 y 2 son iguales y las secuencias 3,4,5,6 y 7 también. Las tres últimas secuencias no se repiten.
La salida del programa, seleccionando un criterio de al menos 3 repeticiones debería ser:
¡Mil gracias!
D.
estoy interesado en crear un programa que me lea un archivo de secuencias cortas en formato FASTA y que me cuente el número de apariciones de cada secuencia. Me imagino que para ello tengo que crear un hash. La cuestión es que el archivo es muy grande y en pruebas con otro software he visto que puedo tener hasta 1 millón de secuencias únicas algunas repetidas más de una vez. Me gustaría luego poder crear un archivo de salida también en formato FASTA con los encabezados originales sólo para aquellas secuencias que aparecen al menos un número determinado de veces, especificado en los parámetros del programa. ¿Cómo puedo diseñar este programa? Me imagino que luego vendré con preguntas específicas, pero para empezar...
Primero, he pensado en crear un hash, meter la primera secuencia del archivo de entrada y luego empezar a comparar la siguiente. Si es igual, sumar uno al valor del key, si no, añadir otro key e inicializar su valor.
Después, he pensado eliminar todas aquellas entradas del hash que tengan un valor menor al especificado en los parámetros del programa.
La duda que me queda es cómo recuperar el encabezado original de cada uno de los keys que no se han eliminado y escribirlo a un archivo de salida.
Os incluyo un ejemplo de entrada:
Using text Syntax Highlighting
>19981#0/1
GTTGACTATTGCATCTGGAC
>2276#0/1
GTTGACTATTGCATCTGGAC
>16286#0/1
AGCGGATCTGTAAAGGCTTTC
>16971#0/1
AGCGGATCTGTAAAGGCTTTC
>5253#0/1
AGCGGATCTGTAAAGGCTTTC
>16494#0/1
AGCGGATCTGTAAAGGCTTTC
>19730#0/1
AGCGGATCTGTAAAGGCTTTC
>10089#0/1
GCAAGTTTGTGAACATGTA
>15513#0/1
TGCATTTACACCTGCACCTC
>18793#0/1
ATTATGATGTCACAGATG
GTTGACTATTGCATCTGGAC
>2276#0/1
GTTGACTATTGCATCTGGAC
>16286#0/1
AGCGGATCTGTAAAGGCTTTC
>16971#0/1
AGCGGATCTGTAAAGGCTTTC
>5253#0/1
AGCGGATCTGTAAAGGCTTTC
>16494#0/1
AGCGGATCTGTAAAGGCTTTC
>19730#0/1
AGCGGATCTGTAAAGGCTTTC
>10089#0/1
GCAAGTTTGTGAACATGTA
>15513#0/1
TGCATTTACACCTGCACCTC
>18793#0/1
ATTATGATGTCACAGATG
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Como veis, las secuencias 1 y 2 son iguales y las secuencias 3,4,5,6 y 7 también. Las tres últimas secuencias no se repiten.
La salida del programa, seleccionando un criterio de al menos 3 repeticiones debería ser:
Using text Syntax Highlighting
>16286#0/1
AGCGGATCTGTAAAGGCTTTC
>16971#0/1
AGCGGATCTGTAAAGGCTTTC
>5253#0/1
AGCGGATCTGTAAAGGCTTTC
>16494#0/1
AGCGGATCTGTAAAGGCTTTC
>19730#0/1
AGCGGATCTGTAAAGGCTTTC
AGCGGATCTGTAAAGGCTTTC
>16971#0/1
AGCGGATCTGTAAAGGCTTTC
>5253#0/1
AGCGGATCTGTAAAGGCTTTC
>16494#0/1
AGCGGATCTGTAAAGGCTTTC
>19730#0/1
AGCGGATCTGTAAAGGCTTTC
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
¡Mil gracias!
D.