int main(int argc, char **argv) { byte_vector B; vector C; comp_matrix O; comp_vector S, Scomp, R, Rcomp; if (argc!=3) { printf("Syntax:\n\t%s input_dir nucleotides\n", argv[0]); return 1; } timevars(); initReplaceTable(argv[2]); tic("Loading data structures from input directory"); readUIntVector(&C, argv[1], "C"); readCompMatrix(&O, argv[1], "O"); readCharVector(&B, argv[1], "B"); readUIntCompVector(&S, argv[1], "S"); readUIntCompVector(&Scomp, argv[1], "Scomp"); readUIntCompVector(&R, argv[1], "R"); readUIntCompVector(&Rcomp, argv[1], "Rcomp"); toc(); for (unsigned int i=0; i<S.n; i++) { if (getScompValue(i, &Scomp, &C, &O) != S.vector[i]) { printf("S diferent!\n"); } if (getRcompValue(i, &Rcomp, &C, &O) != R.vector[i]) { printf("R diferent!\n"); } } printf("Memory frees\n"); free(B.vector); free(S.vector); free(Scomp.vector); free(R.vector); free(Rcomp.vector); return 0; }
int write_results(results_list *r_list, exome* ex, comp_vector *S, comp_vector *Si, vector *C, comp_matrix *O, comp_matrix *Oi, char *mapping, int nW, int type, FILE *fp) { result *r; unsigned int index, key; int enW; int found=0; char search[MAXLINE+1]; char mask[MAXLINE+1]; int direction; search[0] = '\0'; strncat(search, mapping, nW); for (size_t i=0;i<r_list->num_results; i++) { //TODO: Cigar code r = &r_list->list[i]; mask[0] = '\0'; strncat(mask, init_mask, nW); mask[nW] = '\0'; //enW = nW; enW = r->end - r->start + 1; //Partial results for (int rr=0; rr<r->num_mismatches; rr++) { if (r->err_kind[rr]==DELETION) enW--; else if (r->err_kind[rr]==INSERTION) enW++; if (r->err_kind[rr]==DELETION) mask[r->err_pos[rr]] = 'D'; else if (r->err_kind[rr]==MISMATCH) mask[r->err_pos[rr]] = 'M'; else if (r->err_kind[rr]==INSERTION) mask[r->err_pos[rr]] = 'I'; } //printf("%lu %lu -> %d\n", r->k, r->l, r->err_kind[0]); //printf("%d %d %d\n", r->start, r->pos, r->end); //printf("\n"); //TODO: Añadir calculo de la mascara for (size_t j=r->k; j<=r->l; j++) { if (type) { direction = r->dir; } else { direction = !r->dir; } if (S->ratio==1) { if (direction) key = Si->siz - Si->vector[j] - enW - 1; else key = S->vector[j]; } else { if (direction) key = Si->siz - getScompValue(j, Si, C, Oi) - enW -1; else key = getScompValue(j, S, C, O); } index = binsearch(ex->offset, ex->size, key); if(key + enW <= ex->offset[index]) { found = 1; //printf("%lu\n", r_list->read_index); fprintf(fp, "read_%u\t%c\t%s %u %s %s\n", r_list->read_index, plusminus[type], ex->chromosome + (index-1)*IDMAX, ex->start[index-1] + (key - ex->offset[index-1]), search, search /*mask*/); //printf("read_%u\t%c\t%s %u %s %s\n", r_list->read_index, plusminus[type], ex->chromosome + (index-1)*IDMAX, ex->start[index-1] + (key - ex->offset[index-1]), search, mask); } } } return found; }