예제 #1
0
파일: sw-vector.cpp 프로젝트: a1aks/TMAP
int
sw_vector(uint8_t *target, int32_t target_len,
          uint8_t *query, int32_t query_len)
{
  int i, score;

  if (!initialised)
    abort();

  assert(target_len > 0 && target_len <= dblen);
  assert(query_len > 0 && query_len <= qrlen);

  memset(db, -1, (dblen + 14) * sizeof(db[0]));
  memset(qr, -2, (qrlen + 14) * sizeof(qr[0]));

  for (i = 0; i < target_len; i++)
    db[i+7] = (int8_t)target[i];

  for (i = 0; i < query_len; i++)
    qr[i+7] = (int8_t)query[i];

  if (a_gap_open == b_gap_open && a_gap_ext == b_gap_ext) {
      score = vect_sw_same_gap(&db[0], target_len, &qr[7], query_len,
                               &db_ls[0], 0, false);
  } else { 
      score = vect_sw_diff_gap(&db[0], target_len, &qr[7], query_len,
                               &db_ls[0], 0, false);
  }

  return (score);
}
예제 #2
0
int
sw_vector(char const * genome, int goff, int glen, char const * read, int rlen,
    char const * genome_ls, int initbp, bool is_rna)
{
	int i, score;

	//llint before = rdtsc(), after;
	TIME_COUNTER_START(sw_tc);

	if (!initialised)
		abort();

	swinvocs++;

	assert(glen > 0 && glen <= dblen);
	assert(rlen > 0 && rlen <= qrlen);

	memset(db, -1, (dblen + 14) * sizeof(db[0]));
	memset(qr, -2, (qrlen + 14) * sizeof(qr[0]));

	for (i = 0; i < glen; i++)
	  db[i+7] = char_to_base(genome[goff + i]);

	if (genome_ls != NULL) {
	  for (i = 0; i < glen; i++)
	    db_ls[i+7] = char_to_base(genome_ls[goff + i]);
	}

	for (i = 0; i < rlen; i++)
	  qr[i+7] = char_to_base(read[i]);

#ifdef DEBUG_SW_VECTOR
	fprintf(stderr, "SW vector call:\ndb cs: ");
	for (int _i = 0; _i < glen; _i++) {
	  fprintf(stderr, "%c", base_translate(db[_i+7], true));
	}
	fprintf(stderr, "\ndb ls: ");
	for (int _i = 0; _i < glen; _i++) {
	  fprintf(stderr, "%c", base_translate(db_ls[_i+7], false));
	}
	fprintf(stderr, "\nqr: %c", base_translate(initbp, false));
	for (int _i = 0; _i < rlen; _i++) {
	  fprintf(stderr, "%c", base_translate(qr[_i+7], true));
	}
	fprintf(stderr, "\n");
#endif


	if (a_gap_open == b_gap_open && a_gap_ext == b_gap_ext) {
		score = vect_sw_same_gap(&db[0], glen, &qr[7], rlen,
		    &db_ls[0], initbp, is_rna);
	} else { 
		score = vect_sw_diff_gap(&db[0], glen, &qr[7], rlen,
		    &db_ls[0], initbp, is_rna);
	}

	swcells += (glen * rlen);
	//after = rdtsc();
	//swticks += MAX(after - before, 0);
	TIME_COUNTER_STOP(sw_tc);

	return (score);
}