Hola, soy nuevo en esta comunidad a la que estoy encantado de pertenecer.
Llevo programando ya un tiempo en Perl, aunque vengo de la rama de Biología. Actualmente estoy con un problema en un programa que estoy diseñando para el recorte de picos a partir de unos datos de histogramas, de los que muestro un extracto:
Using text Syntax Highlighting
P 1 2 3 4 5 6
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 1 0 0 0
5 0 0 1 0 0 0
6 0 0 1 0 0 0
7 0 0 1 0 0 0
8 0 0 1 0 0 0
9 0 0 1 0 0 0
10 0 0 1 0 0 0
11 0 0 2 0 0 0
12 0 0 3 0 0 0
13 0 0 3 0 3 0
14 0 0 3 0 3 0
15 0 0 3 0 5 0
16 0 0 3 0 5 0
17 0 0 3 0 5 0
18 0 0 3 0 5 0
19 0 0 3 0 6 0
20 0 0 4 0 7 0
21 0 0 4 0 7 0
22 0 0 4 0 7 0
23 0 0 4 0 7 0
24 0 0 4 0 7 0
25 0 0 4 0 7 0
26 0 0 4 0 7 0
27 0 0 4 0 7 0
28 0 0 4 0 7 0
29 0 0 4 0 9 1
30 0 0 4 2 9 2
31 0 0 4 2 9 2
32 0 0 4 2 9 2
33 0 0 5 4 9 2
34 0 0 5 4 9 3
35 0 0 5 4 9 3
36 0 0 5 4 9 4
37 0 0 5 6 9 4
38 0 0 5 6 9 4
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Tengo miles de archivos como estos, con unos miles de líneas, donde la primera columna es la posición nucleotídica de unas secuencias, y el resto de columnas son valores de acumulación de señales en los seis marcos abiertos de lectura de las secuencias.
Lo que necesito, y hace ahora mi programa, es buscar picos significativos, separadamente para cada fase. Para ello, tengo calculada la media y desviación para los miles de archivos, y cuando analizo cada uno por separado, calculo un z-score para cada posición (siempre recuerden, separadamente para cada fase). Cuando el z-score es mayor de un umbral (2.5) considero que hay un pico, y cuando hay 20-30 posiciones consecutivas con un z-score > 20 recojo el pico.
Como pueden ver, lo que cojo no es realmente el pico completo, sino la región más alta del pico (de una forma muy sencilla, y quizás burda). Así que quisiera ver alguna forma de recoger las posiciones de TODO el pico, es decir, desde que comienza a subir hasta cuando acaba de bajar. Y claro, sólo quedarme con los picos significativos. Me da igual si consideráis que tengo una sola columna (la 2ª, 3ª, 4ª, 5ª, 6ª o 7ª), ya que una vez sepa cómo hacerlo con una, ya sabría con todas.
¿Sabéis de algún módulo, o me podríais ayudar con algún código que resuelva el problema? Gracias por adelantado,
Pta.