-
Notifications
You must be signed in to change notification settings - Fork 0
/
estudioSRC_HSPandCSB_Version.txt
78 lines (76 loc) · 4.3 KB
/
estudioSRC_HSPandCSB_Version.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/////////////////////// WORDS.C
1.- Comprueba si la llamada ha sido correcta, si es incorrecta lanza mensaje de error. NOTA: si lanza mensaje de error no aborta el el main.
2.- Llama a main_FILE()
3.- Abre los ficheros de entrada y salida y lee hasta encontrar el primer salto de línea (obvia comentario inicial).
4.- Se crea una estructura "wnetry" (word entry) que almacena la siguiente información:
· Una instancia de Word: estas estructuras almacenan la información de un kmer guardando cada letra en un espacio binario de 2 bits y almacenan un máximo de 8 bytes -> 64 bits / 2 bits.letra = 32 letras => K(max) = 32
· Un int de 64bits para la posición: almacenamos una posición entre 0 y 2^64.
· Un int de 64 bits para la secuencia: utilizamos esto para identificar la secuencia en un fichero multisecuencia.
5.- Unicializamos la secuencia (seqID) a cero.
6.- Inicializamos las variables de control:
· index: mide la posición en el fichero.
· inEntry: mide el número de caracteres ACGT proceados seguidos!
· NW : number of well done. Número de secuencias bien acabadas.
· Tot: total de caracteres ACGT y NoACGT leidos.
· NoACGT: número de caracteres que no sean ACGT encontrados.
· NoC : mide número de lineas que no contienen secuencia.
7.- Comenzamos lectura char a char mientras no lleguemos al final del fichero (WHILE)
7.1 Si no es un caracter letra (que tenga mayúscula y minúscula) se procede a saltar la línea (si es caracter de inicio de comentario ">") o a obviar el caracter (resto de casos).
7.2 Se llama a shift_word:
7.2.1 Se coje el array de unsigend chars y se desplaza la palabra entera desde el final hacia delante de dos en dos bits. Ejemplos:
>> Seq inicial (vacía) array de unsigned char[2]:
0000 0000 0000 0000 0000
>> Introducimos T = 11
0000 0000 0000 0000 0011
>> Introducimos A = 00
0000 0000 0000 0000 1100
>> Introducimos C = 01
0000 0000 0000 0011 0001
>> En este instante w[0] = 0000 0000 y w[1] = 0011 0001
7.3 Si es un caracter letra la procesamos:
-> A = 0 (b10) = 00 (b2_2)
-> C = 1 (b10) = 01 (b2_2)
-> G = 2 (b10) = 10 (b2_2)
-> T = 3 (b10) = 11 (b2_2)
-> NoACGT => inEntry=0 (final de secuencia correcta)
7.4 Se incrementa el indice de posicion (index) y el total.
7.5 Si tenemos una secuencia completa correcta (no hay ningún NoACGT en medio) la guardamos.
7.5.1 Se guarda la estructura wentry entera en el fichero binario (word+pos+sequency)
/////////////////////// W2HD.C
1.- Prepara variables:
· fname: nombre del fichero. Máximo 1024 caracteres.
· nWords: número de palabras. Máximo 2^64.
· wordSize: tamaño de las palabras = 8 <= 8 bytes = 64bits = 32 letras
· fw, fOut1, fOut2: fich entrada(words), ficheros d2hW y d2hP respectivamente.
- fw: fichero de words. [IN]
- fOut1: fichero d2hW. Almacena:
> Secuencia (en binario).
> Posición en el fichero d2hP de las localizaciones de eta secuencia.
> Número de veces que esta secuencia se repite.
- fOut2: fichero d2hP. Almacena:
> Posición en la secuencia.
> Identificador de la secuencia.
· we: estructura wentry.
· he: estructura hashentry.
- w [Word] : secuencia
- pos [uint64_t]: posicion en la secuencia. Se usara para almacenar la posición en el fichero d2hP.
- num [uint64_t]: numero de veces que se repite
· loc: estructura location.
- pos [uint64_t]: posición en la secuencia
- seq [uint64_t]: identificador de secuencia
2.- Compureba bad call error.
3.- Abre ficheros.
4.- Lee la primera palabra y la guarda en WE
5.- Copia la secuancia de la primera palabra en HE.
6.- Comenzamos a leer las palabras:
6.1 Almacena posición y seqIndex de la primera seq en LOC.pos y LOC.seq
6.2 Si la nueva palabra es diferente de la almacenada en HE (cambio de word):
- Se escribe en el fichero (d2hW) la información actual de HE
- Se copia la nueva palabra en HE.
- Se inicializa el número de repeticiones a 0 y se guarda la posición de la nueva palabra en el fichero (d2hP).
6.3 Se escribe la nueva localización en el fichero d2hW.
6.4 Se incrementa el numero de repeticiones de HE y el total de palabras escritas en el fichero d2hW.
6.5 Se lee la nueva palabra.
7.- Se escribe la última instancia (no cerrada) de HE en el fichero d2hP.
8.- Se escribe por pantalla el número de palabras y el fichero generado.
9.- Se cierran los canales de entrada y salida.