This is an automated email from the git hooks/post-receive script. tille pushed a commit to branch master in repository swarm-cluster.
commit faa09a9bd562ffb56ea5c099bc2c221c28d3da68 Author: Andreas Tille <[email protected]> Date: Wed Jan 18 09:05:15 2017 +0100 New upstream version 2.1.12+dfsg --- README.md | 12 ++++++ man/swarm.1 | 12 +++++- src/Makefile | 2 +- src/algo.cc | 13 ++++++- src/algod1.cc | 2 +- src/arch.cc | 2 +- src/bitmap.h | 2 +- src/bloom.h | 2 +- src/db.cc | 2 +- src/derep.cc | 2 +- src/matrix.cc | 2 +- src/nw.cc | 2 +- src/qgram.cc | 2 +- src/scan.cc | 10 +++-- src/search16.cc | 87 +++++++++++++++++++++++++++++++------------ src/search8.cc | 112 ++++++++++++++++++++++++++++++++++++++------------------ src/ssse3.cc | 2 +- src/swarm.cc | 4 +- src/swarm.h | 4 +- src/threads.h | 2 +- src/util.cc | 2 +- 21 files changed, 197 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index 3e90da0..d0e05fd 100644 --- a/README.md +++ b/README.md @@ -404,6 +404,18 @@ methods, here are some links: <a name="history"/> ## Version history## +<a name="version2112"/> +### version 2.1.12 ### + +**swarm** 2.1.12 removes a debugging message. + +<a name="version2111"/> +### version 2.1.11 ### + +**swarm** 2.1.11 fixes two bugs related to the SIMD implementation +of alignment that might result in incorrect alignments and scores. +The bug only applies when d>1. + <a name="version2110"/> ### version 2.1.10 ### diff --git a/man/swarm.1 b/man/swarm.1 index 2372d4c..301f6cd 100644 --- a/man/swarm.1 +++ b/man/swarm.1 @@ -1,5 +1,5 @@ .\" ============================================================================ -.TH swarm 1 "December 22, 2016" "version 2.1.10" "USER COMMANDS" +.TH swarm 1 "January 16, 2017" "version 2.1.12" "USER COMMANDS" .\" ============================================================================ .SH NAME swarm \(em find clusters of nearly-identical nucleotide amplicons @@ -311,7 +311,7 @@ Torbjørn Rognes <[email protected]>. Source code and binaries are available at <https://github.com/torognes/swarm> .\" ============================================================================ .SH COPYRIGHT -Copyright (C) 2012-2016 Frédéric Mahé & Torbjørn Rognes +Copyright (C) 2012-2017 Frédéric Mahé & Torbjørn Rognes .PP This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -344,6 +344,14 @@ New features and important modifications of \fBswarm\fR (short lived or minor bug releases are not mentioned): .RS .TP +.BR v2.1.12\~ "released January 16, 2017" +Version 2.1.12 removes a debugging message. +.TP +.BR v2.1.11\~ "released January 16, 2017" +Version 2.1.11 fixes two bugs related to the SIMD implementation +of alignment that might result in incorrect alignments and scores. +The bug only applies when d>1. +.TP .BR v2.1.10\~ "released December 22, 2016" Version 2.1.10 fixes two bugs related to gap penalties of alignments. The first bug may lead to wrong aligments and similarity percentages diff --git a/src/Makefile b/src/Makefile index 407ebe6..824f486 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ # SWARM # -# Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe +# Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/src/algo.cc b/src/algo.cc index c9ff0fd..0526ca0 100644 --- a/src/algo.cc +++ b/src/algo.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -205,6 +205,17 @@ void algo_run() for(unsigned long t=0; t<targetcount; t++) { +#if 0 + printf("seed: %lu target: %lu score: %lu " + "diffs: %lu alignlen: %lu bits: %lu\n", + seedampliconid, + targetampliconids[t], + scores[t], + diffs[t], + alignlengths[t], + bits); +#endif + unsigned diff = diffs[t]; if (diff <= (unsigned long) resolution) diff --git a/src/algod1.cc b/src/algod1.cc index 6004b8c..eec12be 100644 --- a/src/algod1.cc +++ b/src/algod1.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/arch.cc b/src/arch.cc index e223c92..6a74937 100644 --- a/src/arch.cc +++ b/src/arch.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/bitmap.h b/src/bitmap.h index 429afac..7ae8143 100644 --- a/src/bitmap.h +++ b/src/bitmap.h @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/bloom.h b/src/bloom.h index 95c72ce..12a2a36 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/db.cc b/src/db.cc index 56df3e5..84c1f42 100644 --- a/src/db.cc +++ b/src/db.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/derep.cc b/src/derep.cc index 7bfd69b..daf38bc 100644 --- a/src/derep.cc +++ b/src/derep.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/matrix.cc b/src/matrix.cc index 820e90e..8c81576 100644 --- a/src/matrix.cc +++ b/src/matrix.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/nw.cc b/src/nw.cc index 585e64b..fadeecf 100644 --- a/src/nw.cc +++ b/src/nw.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/qgram.cc b/src/qgram.cc index 496b7f4..ae42318 100644 --- a/src/qgram.cc +++ b/src/qgram.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/scan.cc b/src/scan.cc index db15e54..d5527d4 100644 --- a/src/scan.cc +++ b/src/scan.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -126,8 +126,8 @@ void search_chunk(struct search_data * sdp, long bits) unsigned long seqno = master_targets[sdp->target_index + i]; db_getsequenceandlength(seqno, & dseq, & dlen); - nw(query.seq, query.seq + query.len, - dseq, dseq + dlen, + nw(dseq, dseq + dlen, + query.seq, query.seq + query.len, score_matrix_63, penalty_gapopen, penalty_gapextend, master_scores + sdp->target_index + i, @@ -138,6 +138,10 @@ void search_chunk(struct search_data * sdp, long bits) (unsigned long int *) sdp->hearray, query.qno, seqno); +#if 0 + printf("\nAlignment: %s\n", nwalignment); +#endif + free(nwalignment); } diff --git a/src/search16.cc b/src/search16.cc index fffb411..ed9bd2a 100644 --- a/src/search16.cc +++ b/src/search16.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -128,8 +128,8 @@ inline void dprofile_fill16(WORD * dprofile_word, the vsearch codebase. */ -// Due to the use of pminsw instead of pminuw below, the code works -// only with 15-bit values +// Due to the use of pminsw instead of pminuw (which is sse4) below, +// the code works only with 15-bit values #define INITIALIZE \ " movq %3, %%rax \n" \ @@ -139,14 +139,17 @@ inline void dprofile_fill16(WORD * dprofile_word, " movq %9, %%rax \n" \ " movdqa (%%rax), %%xmm0 \n" \ " movdqa (%7), %%xmm7 \n" \ + " movdqa %%xmm7, %%xmm3 \n" \ + " psubusw %%xmm14, %%xmm3 \n" \ + " movdqa %%xmm3, %%xmm1 \n" \ + " paddusw %%xmm15, %%xmm3 \n" \ + " movdqa %%xmm3, %%xmm2 \n" \ + " paddusw %%xmm15, %%xmm3 \n" \ " movdqa %%xmm7, %%xmm4 \n" \ - " movdqa %%xmm7, %%xmm1 \n" \ " paddusw %%xmm15, %%xmm7 \n" \ " movdqa %%xmm7, %%xmm5 \n" \ - " movdqa %%xmm7, %%xmm2 \n" \ " paddusw %%xmm15, %%xmm7 \n" \ " movdqa %%xmm7, %%xmm6 \n" \ - " movdqa %%xmm7, %%xmm3 \n" \ " paddusw %%xmm15, %%xmm7 \n" \ " movq %5, %%r12 \n" \ " shlq $3, %%r12 \n" \ @@ -280,7 +283,8 @@ inline void domasked16(__m128i * Sm, __m128i * H0, __m128i * Mm, __m128i * MQ, - __m128i * MR) + __m128i * MR, + __m128i * MQ0) { __asm__ @@ -298,6 +302,7 @@ inline void domasked16(__m128i * Sm, " psubusw (%10), %%xmm12 \n" // mask E " paddusw %%xmm13, %%xmm8 \n" // init N0 " paddusw %%xmm13, %%xmm12 \n" // init E + " paddusw (%13), %%xmm12 \n" // fix E " paddusw (%12), %%xmm13 \n" // update " movdqa %%xmm13, (%11) \n" @@ -316,6 +321,7 @@ inline void domasked16(__m128i * Sm, " psubusw (%10), %%xmm12 \n" // mask E " paddusw %%xmm13, %%xmm0 \n" " paddusw %%xmm13, %%xmm12 \n" + " paddusw (%13), %%xmm12 \n" // fix E " paddusw (%12), %%xmm13 \n" " movdqa %%xmm13, (%11) \n" @@ -336,6 +342,7 @@ inline void domasked16(__m128i * Sm, " movdqa (%11), %%xmm13 \n" " psubusw (%10), %%xmm12 \n" // mask E " paddusw %%xmm13, %%xmm12 \n" + " paddusw (%13), %%xmm12 \n" // fix E " paddusw (%12), %%xmm13 \n" " movdqa %%xmm13, (%11) \n" @@ -368,7 +375,8 @@ inline void domasked16(__m128i * Sm, : "m"(Sm), "r"(hep),"r"(qp), "m"(Qm), "m"(Rm), "r"(ql), "m"(Zm), "r"(F0), "r"(dir), - "m"(H0), "r"(Mm), "r"(MQ), "r"(MR) + "m"(H0), "r"(Mm), "r"(MQ), "r"(MR), + "r"(MQ0) : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", @@ -402,18 +410,15 @@ unsigned long backtrack16(char * qseq, { for(unsigned long j=0; j<dlen; j++) { - unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + 4*i + (j&3)) % dir - buffersize]; - if (d & maskup) + unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + + 4*i + (j&3)) % dirbuffersize]; + if (d & maskleft) { - if (d & maskleft) - printf("+"); - else - printf("^"); + printf("<"); } - else if (d & maskleft) + else if (d & maskup) { - printf("<"); + printf("^"); } else { @@ -429,8 +434,8 @@ unsigned long backtrack16(char * qseq, { for(unsigned long j=0; j<dlen; j++) { - unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + 4*i + (j&3)) % dir - buffersize]; + unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + + 4*i + (j&3)) % dirbuffersize]; if (d & maskextup) { if (d & maskextleft) @@ -458,6 +463,11 @@ unsigned long backtrack16(char * qseq, unsigned long matches = 0; char op = 0; +#undef SHOWALIGNMENT +#ifdef SHOWALIGNMENT + printf("alignment, reversed: "); +#endif + while ((i>=0) && (j>=0)) { aligned++; @@ -491,8 +501,34 @@ unsigned long backtrack16(char * qseq, j--; op = 'M'; } + +#ifdef SHOWALIGNMENT + printf("%c", op); +#endif } - aligned += i + j + 2; + + while (i>=0) + { + aligned++; + i--; +#ifdef SHOWALIGNMENT + printf("D"); +#endif + } + + while (j>=0) + { + aligned++; + j--; +#ifdef SHOWALIGNMENT + printf("I"); +#endif + } + +#ifdef SHOWALIGNMENT + printf("\n"); +#endif + * alignmentlengthp = aligned; return aligned - matches; } @@ -512,7 +548,7 @@ void search16(WORD * * q_start, unsigned long dirbuffersize, unsigned long * dirbuffer) { - __m128i Q, R, T, M, T0, MQ, MR; + __m128i Q, R, T, M, T0, MQ, MR, MQ0; __m128i *hep, **qp; BYTE * d_begin[CHANNELS]; @@ -672,7 +708,7 @@ void search16(WORD * * q_start, next_id++; ((WORD*)&H0)[c] = 0; - ((WORD*)&F0)[c] = gap_open_penalty + gap_extend_penalty; + ((WORD*)&F0)[c] = 2 * gap_open_penalty + 2 * gap_extend_penalty; // fill channel @@ -712,16 +748,19 @@ void search16(WORD * * q_start, MQ = _mm_and_si128(M, Q); MR = _mm_and_si128(M, R); + MQ0 = MQ; - domasked16(S, hep, qp, &Q, &R, qlen, 0, &F0, dir, &H0, &M, &MQ, &MR); + domasked16(S, hep, qp, &Q, &R, qlen, 0, &F0, dir, &H0, &M, &MQ, &MR, + &MQ0); } F0 = _mm_adds_epu16(F0, R); F0 = _mm_adds_epu16(F0, R); F0 = _mm_adds_epu16(F0, R); - H0 = F0; + H0 = _mm_subs_epu16(F0, Q); F0 = _mm_adds_epu16(F0, R); + dir += 4*longestdbsequence; if (dir >= dirbuffer + dirbuffersize) diff --git a/src/search8.cc b/src/search8.cc index 25a52b5..423f521 100644 --- a/src/search8.cc +++ b/src/search8.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -381,7 +381,7 @@ inline void dprofile_fill8(BYTE * dprofile, _mm_store_si128((__m128i*)(dprofile+16*j+1536+448), xmm15); } - // dprofile_dump7(dprofile); + // dprofile_dump8(dprofile); } @@ -426,14 +426,17 @@ inline void dprofile_fill8(BYTE * dprofile, " movq %9, %%rax \n" \ " movdqa (%%rax), %%xmm0 \n" \ " movdqa (%7), %%xmm7 \n" \ + " movdqa %%xmm7, %%xmm3 \n" \ + " psubusb %%xmm14, %%xmm3 \n" \ + " movdqa %%xmm3, %%xmm1 \n" \ + " paddusb %%xmm15, %%xmm3 \n" \ + " movdqa %%xmm3, %%xmm2 \n" \ + " paddusb %%xmm15, %%xmm3 \n" \ " movdqa %%xmm7, %%xmm4 \n" \ - " movdqa %%xmm7, %%xmm1 \n" \ " paddusb %%xmm15, %%xmm7 \n" \ " movdqa %%xmm7, %%xmm5 \n" \ - " movdqa %%xmm7, %%xmm2 \n" \ " paddusb %%xmm15, %%xmm7 \n" \ " movdqa %%xmm7, %%xmm6 \n" \ - " movdqa %%xmm7, %%xmm3 \n" \ " paddusb %%xmm15, %%xmm7 \n" \ " movq %5, %%r12 \n" \ " shlq $3, %%r12 \n" \ @@ -441,14 +444,13 @@ inline void dprofile_fill8(BYTE * dprofile, " andq $-16, %%r10 \n" \ " xorq %%r11, %%r11 \n" - #define ONESTEP(H, N, F, V, DIR) \ " paddusb " V ", " H " \n" \ " movdqa " H ", %%xmm13 \n" \ - " pcmpgtb " F ", %%xmm13 \n" \ + " pminub " F ", " H " \n" \ + " pcmpeqb " H ", %%xmm13 \n" \ " pmovmskb %%xmm13, %%edx \n" \ " movw %%dx, 0+" DIR " \n" \ - " pminub " F ", " H " \n" \ " pminub %%xmm12, " H " \n" \ " movdqa " H ", %%xmm13 \n" \ " pcmpeqb %%xmm12, %%xmm13 \n" \ @@ -459,15 +461,16 @@ inline void dprofile_fill8(BYTE * dprofile, " paddusb %%xmm15, " F " \n" \ " paddusb %%xmm15, %%xmm12 \n" \ " movdqa " H ", %%xmm13 \n" \ - " pcmpgtb " F ", %%xmm13 \n" \ + " pminub " H ", " F " \n" \ + " pcmpeqb " F ", %%xmm13 \n" \ " pmovmskb %%xmm13, %%edx \n" \ " movw %%dx, 4+" DIR " \n" \ " movdqa " H ", %%xmm13 \n" \ - " pcmpgtb %%xmm12, %%xmm13 \n" \ - " pmovmskb %%xmm13, %%edx \n" \ - " movw %%dx, 6+" DIR " \n" \ " pminub " H ", %%xmm12 \n" \ - " pminub " H ", " F " \n" + " pcmpeqb %%xmm12, %%xmm13 \n" \ + " pmovmskb %%xmm13, %%edx \n" \ + " movw %%dx, 6+" DIR " \n" + inline void donormal8(__m128i * Sm, __m128i * hep, @@ -567,7 +570,8 @@ inline void domasked8(__m128i * Sm, __m128i * H0, __m128i * Mm, __m128i * MQ, - __m128i * MR) + __m128i * MR, + __m128i * MQ0) { __asm__ __volatile__ @@ -584,6 +588,7 @@ inline void domasked8(__m128i * Sm, " psubusb (%10), %%xmm12 \n" // mask E " paddusb %%xmm13, %%xmm8 \n" // init N0 " paddusb %%xmm13, %%xmm12 \n" // init E + " paddusb (%13), %%xmm12 \n" // fix E " paddusb (%12), %%xmm13 \n" // update " movdqa %%xmm13, (%11) \n" @@ -602,6 +607,7 @@ inline void domasked8(__m128i * Sm, " psubusb (%10), %%xmm12 \n" // mask E " paddusb %%xmm13, %%xmm0 \n" " paddusb %%xmm13, %%xmm12 \n" + " paddusb (%13), %%xmm12 \n" // fix E " paddusb (%12), %%xmm13 \n" " movdqa %%xmm13, (%11) \n" @@ -622,6 +628,7 @@ inline void domasked8(__m128i * Sm, " movdqa (%11), %%xmm13 \n" " psubusb (%10), %%xmm12 \n" // mask E " paddusb %%xmm13, %%xmm12 \n" + " paddusb (%13), %%xmm12 \n" // fix E " paddusb (%12), %%xmm13 \n" " movdqa %%xmm13, (%11) \n" @@ -654,7 +661,7 @@ inline void domasked8(__m128i * Sm, : "m"(Sm), "r"(hep),"r"(qp), "m"(Qm), "m"(Rm), "r"(ql), "m"(Zm), "r"(F0), "r"(dir),"m"(H0), - "r"(Mm), "r"(MQ), "r"(MR) + "r"(Mm), "r"(MQ), "r"(MR), "r"(MQ0) : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", @@ -689,16 +696,13 @@ unsigned long backtrack(char * qseq, for(unsigned long j=0; j<dlen; j++) { unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + 4*i + (j&3)) % dirbuffersize]; - if (d & maskup) + if (d & maskleft) { - if (d & maskleft) - printf("+"); - else - printf("^"); + printf("<"); } - else if (d & maskleft) + else if (!(d & maskup)) { - printf("<"); + printf("^"); } else { @@ -714,15 +718,16 @@ unsigned long backtrack(char * qseq, { for(unsigned long j=0; j<dlen; j++) { - unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + 4*i + (j&3)) % dirbuffersize]; - if (d & maskextup) + unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + + 4*i + (j&3)) % dirbuffersize]; + if (!(d & maskextup)) { - if (d & maskextleft) + if (!(d & maskextleft)) printf("+"); else printf("^"); } - else if (d & maskextleft) + else if (!(d & maskextleft)) { printf("<"); } @@ -742,18 +747,23 @@ unsigned long backtrack(char * qseq, unsigned long matches = 0; char op = 0; +#undef SHOWALIGNMENT +#ifdef SHOWALIGNMENT + printf("alignment, reversed: "); +#endif + while ((i>=0) && (j>=0)) { aligned++; - unsigned long d = - dirbuffer[(offset + longestdbsequence*4*(j/4) + 4*i + (j&3)) % dirbuffersize]; + unsigned long d = dirbuffer[(offset + longestdbsequence*4*(j/4) + + 4*i + (j&3)) % dirbuffersize]; - if ((op == 'I') && (d & maskextleft)) + if ((op == 'I') && (!(d & maskextleft))) { j--; } - else if ((op == 'D') && (d & maskextup)) + else if ((op == 'D') && (!(d & maskextup))) { i--; } @@ -762,7 +772,7 @@ unsigned long backtrack(char * qseq, j--; op = 'I'; } - else if (d & maskup) + else if (!(d & maskup)) { i--; op = 'D'; @@ -775,8 +785,35 @@ unsigned long backtrack(char * qseq, j--; op = 'M'; } + +#ifdef SHOWALIGNMENT + printf("%c", op); +#endif + } - aligned += i + j + 2; + + while (i>=0) + { + aligned++; + i--; +#ifdef SHOWALIGNMENT + printf("D"); +#endif + } + + while (j>=0) + { + aligned++; + j--; +#ifdef SHOWALIGNMENT + printf("I"); +#endif + } + +#ifdef SHOWALIGNMENT + printf("\n"); +#endif + * alignmentlengthp = aligned; return aligned - matches; } @@ -796,7 +833,7 @@ void search8(BYTE * * q_start, unsigned long dirbuffersize, unsigned long * dirbuffer) { - __m128i Q, R, T, M, T0, MQ, MR; + __m128i Q, R, T, M, T0, MQ, MR, MQ0; __m128i *hep, **qp; BYTE * d_begin[CHANNELS]; @@ -954,7 +991,7 @@ void search8(BYTE * * q_start, next_id++; ((BYTE*)&H0)[c] = 0; - ((BYTE*)&F0)[c] = gap_open_penalty + gap_extend_penalty; + ((BYTE*)&F0)[c] = 2 * gap_open_penalty + 2 * gap_extend_penalty; // fill channel for(int j=0; j<CDEPTH; j++) @@ -993,16 +1030,19 @@ void search8(BYTE * * q_start, MQ = _mm_and_si128(M, Q); MR = _mm_and_si128(M, R); + MQ0 = MQ; - domasked8(S, hep, qp, &Q, &R, qlen, 0, &F0, dir, &H0, &M, &MQ, &MR); + domasked8(S, hep, qp, &Q, &R, qlen, 0, &F0, dir, &H0, &M, &MQ, &MR, + &MQ0); } F0 = _mm_adds_epu8(F0, R); F0 = _mm_adds_epu8(F0, R); F0 = _mm_adds_epu8(F0, R); - H0 = F0; + H0 = _mm_subs_epu8(F0, Q); F0 = _mm_adds_epu8(F0, R); + dir += 4*longestdbsequence; if (dir >= dirbuffer + dirbuffersize) dir -= dirbuffersize; diff --git a/src/ssse3.cc b/src/ssse3.cc index 03fb0df..503f91b 100644 --- a/src/ssse3.cc +++ b/src/ssse3.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/swarm.cc b/src/swarm.cc index 54af068..7abd2bc 100644 --- a/src/swarm.cc +++ b/src/swarm.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -230,7 +230,7 @@ void args_usage() void show_header() { char title[] = "Swarm " SWARM_VERSION; - char ref[] = "Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe"; + char ref[] = "Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe"; char url[] = "https://github.com/torognes/swarm"; fprintf(logfile, "%s [%s %s]\n%s\n%s\n\n", title, __DATE__, __TIME__, ref, url); diff --git a/src/swarm.h b/src/swarm.h index bcc84cd..866a877 100644 --- a/src/swarm.h +++ b/src/swarm.h @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -52,7 +52,7 @@ #define LINE_MAX 2048 #endif -#define SWARM_VERSION "2.1.10" +#define SWARM_VERSION "2.1.12" #define WIDTH 32 #define WIDTH_SHIFT 5 #define BLOCKWIDTH 32 diff --git a/src/threads.h b/src/threads.h index a7d475f..e6b017a 100644 --- a/src/threads.h +++ b/src/threads.h @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/src/util.cc b/src/util.cc index c68667c..141cc76 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1,7 +1,7 @@ /* SWARM - Copyright (C) 2012-2016 Torbjorn Rognes and Frederic Mahe + Copyright (C) 2012-2017 Torbjorn Rognes and Frederic Mahe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/swarm-cluster.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
