コード例 #1
0
ファイル: testr.c プロジェクト: josator/gnu-bwt-aligner
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;

}
コード例 #2
0
ファイル: BW_io.c プロジェクト: CharoL/bioinfo-libs
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;

}