0
|
1 #include <stdio.h>
|
|
2 #include <stdlib.h>
|
|
3 #include <string.h>
|
|
4 #include <ctype.h>
|
|
5 #include "structs.h"
|
|
6 #include "commonFunctions.h"
|
|
7
|
|
8 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
|
|
9 #define MIN(x, y) (((x) <= (y)) ? (x) : (y))
|
|
10 #define STARTING_SEQS 1000
|
|
11 #define PIECE_OF_DB_REALLOC 3200000 //half a gigabyte if divided by 8 bytes
|
|
12 #define MATVAL 101
|
|
13
|
|
14 int main(int argc, char ** av){
|
|
15
|
|
16 if(argc != 2) terror("USE:: combine_reads <file>");
|
|
17
|
|
18 FILE * results, * data;
|
|
19 data = fopen(av[1], "rt");
|
|
20 if(data == NULL) terror("Could not open input file");
|
|
21
|
|
22 uint64_t * mat = (uint64_t *) calloc(MATVAL, sizeof(uint64_t));
|
|
23 if(mat == NULL) terror("Could not allocate matrix array");
|
|
24
|
|
25 char buffer[MAXLID];
|
|
26 if ((results = fopen("accu.log", "r")) == NULL){
|
|
27 results = fopen("accu.log", "wt");
|
|
28 }else{
|
|
29 // Load the matrix
|
|
30 uint64_t i;
|
|
31
|
|
32 for(i=0;i<100;i++){
|
|
33 if(0 == fgets(buffer, MAXLID, results)) terror("Missing number on load");
|
|
34
|
|
35 //fprintf(stdout, "Have %s\n", buffer);
|
|
36 buffer[strlen(buffer)-1] = '\0';
|
|
37 mat[i] = asciiToUint64(buffer);
|
|
38 //fprintf(stdout, "%"PRIu64"\n", mat[i]);
|
|
39 //getchar();
|
|
40 }
|
|
41 fclose(results);
|
|
42 results = fopen("accu.log", "wt"); // Re open
|
|
43 }
|
|
44
|
|
45 // Read file
|
|
46 uint64_t read_id_1, read_id_2, coverage, identity, length, current, currmax, j;
|
|
47 while(!feof(data)){
|
|
48 if(0 == fgets(buffer, MAXLID, data) && !feof(data)) terror("Missing values");
|
|
49 // 2 77277 89 64 213
|
|
50 sscanf(buffer, "%"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, &read_id_1, &read_id_2, &coverage, &identity, &length);
|
|
51 //fprintf(stdout, "%"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64"\n", read_id_1, read_id_2, coverage, identity, length);
|
|
52 currmax = MIN(identity, coverage);
|
|
53 //fprintf(stdout, "%"PRIu64"\n", currmax);
|
|
54 current = read_id_1;
|
|
55 /*
|
|
56 for(j=currmax; j > 1; j--){
|
|
57 if(current != lasts[j]){
|
|
58 mat[j]++;
|
|
59 lasts[j] = current;
|
|
60 }
|
|
61 }
|
|
62 */
|
|
63 mat[currmax] += 1;
|
|
64
|
|
65 }
|
|
66
|
|
67 for(j=99; j>0; j--){
|
|
68 mat[j] += mat[j+1];
|
|
69 }
|
|
70 mat[0] = mat[1];
|
|
71
|
|
72 for(j=0; j<100; j++){
|
|
73 fprintf(stdout, "%"PRIu64"\n", mat[j]);
|
|
74 fprintf(results, "%"PRIu64"\n", mat[j]);
|
|
75 }
|
|
76
|
|
77
|
|
78 fclose(results);
|
|
79 fclose(data);
|
|
80 free(mat);
|
|
81 return 0;
|
|
82 } |