From a138829abbb11f091b24ab880d46fdd53727d053 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Sat, 10 Sep 2011 22:15:51 -0400 Subject: [PATCH] added brief documentation --- ksw.c | 7 +++---- ksw.h | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/ksw.c b/ksw.c index 50353a6..79f7a94 100644 --- a/ksw.c +++ b/ksw.c @@ -94,7 +94,7 @@ int ksw_sse2_16(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a) / { int slen, i, sum, m_b, n_b, te = -1, gmax = 0; uint64_t *b; - __m128i zero, gapoe, gape, shift, reduce, *H0, *H1, *E, *Hmax; + __m128i zero, gapoe, gape, shift, *H0, *H1, *E, *Hmax; #define __max_16(ret, xx) do { \ (xx) = _mm_max_epu8((xx), _mm_srli_si128((xx), 8)); \ @@ -110,7 +110,6 @@ int ksw_sse2_16(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a) / gapoe = _mm_set1_epi8(a->gapo + a->gape); gape = _mm_set1_epi8(a->gape); shift = _mm_set1_epi8(q->shift); - reduce = _mm_set1_epi8(127); H0 = q->H0; H1 = q->H1; E = q->E; Hmax = q->Hmax; slen = q->slen; for (i = 0; i < slen; ++i) { @@ -159,10 +158,10 @@ int ksw_sse2_16(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a) / h = _mm_subs_epu8(h, gapoe); f = _mm_subs_epu8(f, gape); cmp = _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_subs_epu8(f, h), zero)); - if (UNLIKELY(cmp == 0xffff)) goto end_loop; + if (UNLIKELY(cmp == 0xffff)) goto end_loop16; } } -end_loop: +end_loop16: //int k;for (k=0;k<16;++k)printf("%d ", ((uint8_t*)&max)[k]);printf("\n"); __max_16(imax, max); // imax is the maximum number in max if (imax >= a->T) { // write the b array; this condition adds branching unfornately diff --git a/ksw.h b/ksw.h index 8307ccc..d93d6a9 100644 --- a/ksw.h +++ b/ksw.h @@ -16,8 +16,36 @@ typedef struct { extern "C" { #endif -ksw_query_t *ksw_qinit(int p, int qlen, const uint8_t *query, int m, const int8_t *mat); // to free, simply call free() -int ksw_sse2_16(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a); + /** + * Initialize the query data structure + * + * @param size Number of bytes used to store a score; valid valures are 1 or 2 + * @param qlen Length of the query sequence + * @param query Query sequence + * @param m Size of the alphabet + * @param mat Scoring matrix in a one-dimension array + * + * @return Query data structure + */ + ksw_query_t *ksw_qinit(int size, int qlen, const uint8_t *query, int m, const int8_t *mat); // to free, simply call free() + + /** + * Compute the maximum local score for queries initialized with ksw_qinit(1, ...) + * + * @param q Query data structure returned by ksw_qinit(1, ...) + * @param tlen Length of the target sequence + * @param target Target sequence + * @param a Auxiliary data structure (see ksw.h) + * + * @return The maximum local score; if the returned value equals 255, the SW may not be finished + */ + int ksw_sse2_8(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a); + + /** Compute the maximum local score for queries initialized with ksw_qinit(2, ...) */ + int ksw_sse2_16(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a); + + /** Unified interface for ksw_sse2_8() and ksw_sse2_16() */ + int ksw_sse2(ksw_query_t *q, int tlen, const uint8_t *target, ksw_aux_t *a); #ifdef __cplusplus } -- 2.47.3