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); }
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); }