[med-svn] [bowtie] 01/06: New upstream version 1.2.2+dfsg

Alex Mestiashvili malex-guest at moszumanska.debian.org
Sat Dec 16 19:08:00 UTC 2017


This is an automated email from the git hooks/post-receive script.

malex-guest pushed a commit to branch master
in repository bowtie.

commit 0e7d77e15d386e1298528866555016b079c88cfd
Author: Alexandre Mestiashvili <alex at biotec.tu-dresden.de>
Date:   Sat Dec 16 18:55:00 2017 +0100

    New upstream version 1.2.2+dfsg
---
 MANUAL                      |  38 ++++++------
 Makefile                    |   9 ++-
 NEWS                        |  12 ++++
 VERSION                     |   2 +-
 bowtie                      |   8 ++-
 doc/manual.html             |  44 ++++++-------
 doc/website/manual.ssi      |  46 +++++++-------
 doc/website/old_news.ssi    |  38 ++++++++++++
 doc/website/recent_news.ssi |  53 +++++-----------
 doc/website/rhsidebar.ssi   |   4 +-
 ebwt_search.cpp             | 146 +++++++++++++++++++++++---------------------
 multikey_qsort.h            |   3 -
 12 files changed, 213 insertions(+), 190 deletions(-)

diff --git a/MANUAL b/MANUAL
index e3e1860..d6410c6 100644
--- a/MANUAL
+++ b/MANUAL
@@ -1399,37 +1399,37 @@ right, the fields are:
 
         NM:i:<N>
 
-    Aligned read has an edit distance of `<N>`.
+Aligned read has an edit distance of `<N>`.
 
         CM:i:<N>
 
-    Aligned read has an edit distance of `<N>` in colorspace.  This
-    field is present in addition to the `NM` field in `-C`/`--color`
-    mode, but is omitted otherwise.
+Aligned read has an edit distance of `<N>` in colorspace.  This
+field is present in addition to the `NM` field in `-C`/`--color`
+mode, but is omitted otherwise.
 
         MD:Z:<S>
 
-    For aligned reads, `<S>` is a string representation of the
-    mismatched reference bases in the alignment.  See [SAM] format
-    specification for details.  For colorspace alignments, `<S>`
-    describes the decoded *nucleotide* alignment, not the colorspace
-    alignment.
+For aligned reads, `<S>` is a string representation of the
+mismatched reference bases in the alignment.  See [SAM] format
+specification for details.  For colorspace alignments, `<S>`
+describes the decoded *nucleotide* alignment, not the colorspace
+alignment.
 
         XA:i:<N>
 
-    Aligned read belongs to stratum `<N>`.  See [Strata] for definition.
+Aligned read belongs to stratum `<N>`.  See [Strata] for definition.
 
         XM:i:<N>
 
-    For a read with no reported alignments, `<N>` is 0 if the read had
-    no alignments.  If `-m` was specified and the read's alignments
-    were supressed because the `-m` ceiling was exceeded, `<N>` equals
-    the `-m` ceiling + 1, to indicate that there were at least that
-    many valid alignments (but all were suppressed).  In `-M` mode, if
-    the alignment was randomly selected because the `-M` ceiling was
-    exceeded, `<N>` equals the `-M` ceiling + 1, to indicate that there
-    were at least that many valid alignments (of which one was reported
-    at random).
+For a read with no reported alignments, `<N>` is 0 if the read had
+no alignments.  If `-m` was specified and the read's alignments
+were supressed because the `-m` ceiling was exceeded, `<N>` equals
+the `-m` ceiling + 1, to indicate that there were at least that
+many valid alignments (but all were suppressed).  In `-M` mode, if
+the alignment was randomly selected because the `-M` ceiling was
+exceeded, `<N>` equals the `-M` ceiling + 1, to indicate that there
+were at least that many valid alignments (of which one was reported
+at random).
 
 [SAM format specification]: http://samtools.sf.net/SAM1.pdf
 [FASTQ]: http://en.wikipedia.org/wiki/FASTQ_format
diff --git a/Makefile b/Makefile
index d3eef5d..98b0d20 100644
--- a/Makefile
+++ b/Makefile
@@ -21,8 +21,7 @@ EXTRA_CFLAGS =
 EXTRA_CXXFLAGS =
 CFLAGS += $(EXTRA_CFLAGS)
 CXXFLAGS += $(EXTRA_CXXFLAGS)
-WARNING_FLAGS = -Wall -Wno-unused-private-field \
-                -Wno-unused-parameter -Wno-reorder \
+WARNING_FLAGS = -Wall -Wno-unused-parameter -Wno-reorder \
 				-Wno-unused-local-typedefs
 
 RELEASE_DEPENDENCIES = $(if $(RELEASE_BUILD),static-libs)
@@ -464,13 +463,13 @@ static-libs:
 		export CFLAGS=-mmacosx-version-min=10.9 ; \
 		export CXXFLAGS=-mmacosx-version-min=10.9 ; \
 	fi ; \
-	DL=$$([ `which wget` ] && echo "wget --no-check-certificate" || echo "curl -LO") ; \
+	DL=$$([ `which wget` ] && echo "wget --no-check-certificate --content-disposition" || echo "curl -LJkO") ; \
 	cd /tmp ; \
 	$$DL https://zlib.net/zlib-1.2.11.tar.gz && tar xzf zlib-1.2.11.tar.gz && cd zlib-1.2.11 ; \
 	$(if $(MINGW), mingw32-make -f win32/Makefile.gcc, ./configure --static && make) && cp libz.a $(CURDIR)/.lib && cp zconf.h zlib.h $(CURDIR)/.include ; \
 	cd .. ; \
-	$$DL https://github.com/01org/tbb/archive/2017_U8.tar.gz && tar xzf 2017_U8.tar.gz && cd tbb-2017_U8; \
-	$(if $(MINGW), mingw32-make comiler=gcc arch=ia64 runtime=mingw, make) extra_inc=big_iron.inc -j4 \
+	$$DL https://github.com/01org/tbb/archive/2017_U8.tar.gz && tar xzf tbb-2017_U8.tar.gz && cd tbb-2017_U8; \
+	$(if $(MINGW), mingw32-make compiler=gcc arch=ia64 runtime=mingw, make) extra_inc=big_iron.inc -j4 \
 	&& cp -r include/tbb $(CURDIR)/.include && cp build/*_release/*.a $(CURDIR)/.lib
 
 
diff --git a/NEWS b/NEWS
index c132d1e..9707d0d 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,18 @@ subscribe to our mailing list:
 Version Release History
 =======================
 
+Version 1.2.2 - Dec 11, 2017
+    * Fixed major issue causing corrupt SAM output when using many threads (-p/--threads) on certain systems
+    * Fixed major issue with incorrect alignment offsets being reported in --large-index mode
+    * Fixed major issue with reads files being skipped when multiple inputs were specified together with -p/--threads
+    * The official LICENSE of Bowtie was changed to Artistic License 2.0.  This fixes an issue with the previous LICENSE, which mistakenly combined elements of different open-source licenses.
+    * Fixed issue where bowtie would still run for a long time even when -u was set to a small number.
+    * Fixed spurious "Reads file contained a pattern with more than 1024 quality values" error for some colorspace inputs.
+    * Fixed issue with --strata sometimes failing to suppress alignments at lower strata.
+    * Fixed issue with ends of paired-end reads sometimes appearing in non-adjacent lines of the SAM output with -p/--threads >1
+    * Fixed issue whereby the read name of end #2 was not always truncated at the first whitespace character
+    * Code simplifications
+
 Version 1.2.1.1 - Jun 13, 2017
     * Fixed an issue causing Bowtie to segfault when processing reads from stdin
 
diff --git a/VERSION b/VERSION
index e563f37..23aa839 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.1.1
+1.2.2
diff --git a/bowtie b/bowtie
index da4a1bd..2c08d7b 100755
--- a/bowtie
+++ b/bowtie
@@ -88,11 +88,17 @@ def main():
             if os.path.exists(args.index + idx_ext_l):
                 bin_spec = os.path.join(ex_path, bin_l)
         bowtie_args.insert(0, args.index)
+    else:
+        for arg in bowtie_args:
+            if arg[0] == '-':
+                continue
+            if os.path.exists(arg + idx_ext_l):
+                bin_spec = os.path.join(ex_path, bin_l)
 
     if args.debug:
         bin_spec += '-debug'
 
-    bowtie_args.insert(0, bin_name)
+    bowtie_args.insert(0, bin_spec)
     bowtie_args.insert(1, 'basic-0')
     bowtie_args.insert(1, '--wrapper')
 
diff --git a/doc/manual.html b/doc/manual.html
index d8cd85b..51876ef 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -756,6 +756,8 @@ T2302111203131231130300111123220
 </td>
 <td>
 <p>Add <code><text></code> (usually of the form <code>TAG:VAL</code>, e.g. <code>ID:IL7LANE2</code>) as a field on the <code>@RG</code> header line. Specify <code>--sam-RG</code> multiple times to set multiple fields. See the <a href="http://samtools.sourceforge.net/SAM1.pdf">SAM Spec</a> for details about what fields are legal. Note that, if any <code>@RG</code> fields are set using this option, the <code>ID</code> and <code>SM</code> fields must both be among them to make the <co [...]
+</td>
+</tr>
 <tr>
 <td id="bowtie-options-no-unal">
 <pre><code>--no-unal</code></pre>
@@ -934,11 +936,12 @@ T2302111203131231130300111123220
 <li><p>Inferred insert size. Size is negative if the mate's alignment occurs upstream of this alignment. Size is 0 if there is no mate.</p></li>
 <li><p>Read sequence (reverse-complemented if aligned to the reverse strand)</p></li>
 <li><p>ASCII-encoded read qualities (reverse-complemented if the read aligned to the reverse strand). The encoded quality values are on the <a href="http://en.wikipedia.org/wiki/FASTQ_format#Variations">Phred quality</a> scale and the encoding is ASCII-offset by 33 (ASCII char <code>!</code>), similarly to a <a href="http://en.wikipedia.org/wiki/FASTQ_format">FASTQ</a> file.</p></li>
-<li><p>Optional fields. Fields are tab-separated. For descriptions of all possible optional fields, see the SAM format specification. <code>bowtie</code> outputs some of these optional fields for each alignment, depending on the type of the alignment:</p>
+<li><p>Optional fields. Fields are tab-separated. For descriptions of all possible optional fields, see the SAM format specification. <code>bowtie</code> outputs some of these optional fields for each alignment, depending on the type of the alignment:</p></li>
+</ol>
 <table>
 <tr>
 <td>
-<pre><code>NM:i:<N></code></pre>
+<pre><code>    NM:i:<N></code></pre>
 </td>
 <td>
 <p>Aligned read has an edit distance of <code><N></code>.</p>
@@ -946,7 +949,7 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>CM:i:<N></code></pre>
+<pre><code>    CM:i:<N></code></pre>
 </td>
 <td>
 <p>Aligned read has an edit distance of <code><N></code> in colorspace. This field is present in addition to the <code>NM</code> field in <a href="#bowtie-options-C"><code>-C</code>/<code>--color</code></a> mode, but is omitted otherwise.</p>
@@ -954,7 +957,7 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>MD:Z:<S></code></pre>
+<pre><code>    MD:Z:<S></code></pre>
 </td>
 <td>
 <p>For aligned reads, <code><S></code> is a string representation of the mismatched reference bases in the alignment. See <a href="http://samtools.sourceforge.net/SAM1.pdf">SAM</a> format specification for details. For colorspace alignments, <code><S></code> describes the decoded <em>nucleotide</em> alignment, not the colorspace alignment.</p>
@@ -962,28 +965,21 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>XA:i:<N></code></pre>
+<pre><code>    XA:i:<N></code></pre>
 </td>
 <td>
-<p>Aligned read belongs to stratum <code><N></code>. See <a href="#strata">Strata</a> for definition.</p></li>
-</ol>
-<pre><code></td></tr><tr><td>
-
-    XM:i:<N>
-
-</td><td>
-
-For a read with no reported alignments, `<N>` is 0 if the read had
-no alignments.  If [`-m`] was specified and the read's alignments
-were supressed because the [`-m`] ceiling was exceeded, `<N>` equals
-the [`-m`] ceiling + 1, to indicate that there were at least that
-many valid alignments (but all were suppressed).  In [`-M`] mode, if
-the alignment was randomly selected because the [`-M`] ceiling was
-exceeded, `<N>` equals the [`-M`] ceiling + 1, to indicate that there
-were at least that many valid alignments (of which one was reported
-at random).
-
-</td></tr></table></code></pre>
+<p>Aligned read belongs to stratum <code><N></code>. See <a href="#strata">Strata</a> for definition.</p>
+</td>
+</tr>
+<tr>
+<td>
+<pre><code>    XM:i:<N></code></pre>
+</td>
+<td>
+<p>For a read with no reported alignments, <code><N></code> is 0 if the read had no alignments. If <a href="#bowtie-options-m"><code>-m</code></a> was specified and the read's alignments were supressed because the <a href="#bowtie-options-m"><code>-m</code></a> ceiling was exceeded, <code><N></code> equals the <a href="#bowtie-options-m"><code>-m</code></a> ceiling + 1, to indicate that there were at least that many valid alignments (but all were suppressed). In <a href="#bow [...]
+</td>
+</tr>
+</table>
 <h1 id="the-bowtie-build-indexer">The <code>bowtie-build</code> indexer</h1>
 <p><code>bowtie-build</code> builds a Bowtie index from a set of DNA sequences. <code>bowtie-build</code> outputs a set of 6 files with suffixes <code>.1.ebwt</code>, <code>.2.ebwt</code>, <code>.3.ebwt</code>, <code>.4.ebwt</code>, <code>.rev.1.ebwt</code>, and <code>.rev.2.ebwt</code>. (If the total length of all the input sequences is greater than about 4 billion, then the index files will end in <code>ebwtl</code> instead of <code>ebwt</code>.) These files together constitute the ind [...]
 <p>Use of Karkkainen's <a href="http://portal.acm.org/citation.cfm?id=1314852">blockwise algorithm</a> allows <code>bowtie-build</code> to trade off between running time and memory usage. <code>bowtie-build</code> has three options governing how it makes this trade: <a href="#bowtie-build-options-p"><code>-p</code>/<code>--packed</code></a>, <a href="#bowtie-build-options-bmax"><code>--bmax</code></a>/<a href="#bowtie-build-options-bmaxdivn"><code>--bmaxdivn</code></a>, and <a href="#bow [...]
diff --git a/doc/website/manual.ssi b/doc/website/manual.ssi
index ec2e19c..0819ed5 100644
--- a/doc/website/manual.ssi
+++ b/doc/website/manual.ssi
@@ -1,5 +1,5 @@
 <h1>Table of Contents</h1>
-<p>Bowtie 1.2.1</p>
+<p>Bowtie 1.2.2</p>
 
 <div id="TOC">
 <ul>
@@ -747,6 +747,8 @@ T2302111203131231130300111123220
 </td>
 <td>
 <p>Add <code><text></code> (usually of the form <code>TAG:VAL</code>, e.g. <code>ID:IL7LANE2</code>) as a field on the <code>@RG</code> header line. Specify <code>--sam-RG</code> multiple times to set multiple fields. See the <a href="http://samtools.sourceforge.net/SAM1.pdf">SAM Spec</a> for details about what fields are legal. Note that, if any <code>@RG</code> fields are set using this option, the <code>ID</code> and <code>SM</code> fields must both be among them to make the <co [...]
+</td>
+</tr>
 <tr>
 <td id="bowtie-options-no-unal">
 <pre><code>--no-unal</code></pre>
@@ -925,11 +927,12 @@ T2302111203131231130300111123220
 <li><p>Inferred insert size. Size is negative if the mate's alignment occurs upstream of this alignment. Size is 0 if there is no mate.</p></li>
 <li><p>Read sequence (reverse-complemented if aligned to the reverse strand)</p></li>
 <li><p>ASCII-encoded read qualities (reverse-complemented if the read aligned to the reverse strand). The encoded quality values are on the <a href="http://en.wikipedia.org/wiki/FASTQ_format#Variations">Phred quality</a> scale and the encoding is ASCII-offset by 33 (ASCII char <code>!</code>), similarly to a <a href="http://en.wikipedia.org/wiki/FASTQ_format">FASTQ</a> file.</p></li>
-<li><p>Optional fields. Fields are tab-separated. For descriptions of all possible optional fields, see the SAM format specification. <code>bowtie</code> outputs some of these optional fields for each alignment, depending on the type of the alignment:</p>
+<li><p>Optional fields. Fields are tab-separated. For descriptions of all possible optional fields, see the SAM format specification. <code>bowtie</code> outputs some of these optional fields for each alignment, depending on the type of the alignment:</p></li>
+</ol>
 <table>
 <tr>
 <td>
-<pre><code>NM:i:<N></code></pre>
+<pre><code>    NM:i:<N></code></pre>
 </td>
 <td>
 <p>Aligned read has an edit distance of <code><N></code>.</p>
@@ -937,7 +940,7 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>CM:i:<N></code></pre>
+<pre><code>    CM:i:<N></code></pre>
 </td>
 <td>
 <p>Aligned read has an edit distance of <code><N></code> in colorspace. This field is present in addition to the <code>NM</code> field in <a href="#bowtie-options-C"><code>-C</code>/<code>--color</code></a> mode, but is omitted otherwise.</p>
@@ -945,7 +948,7 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>MD:Z:<S></code></pre>
+<pre><code>    MD:Z:<S></code></pre>
 </td>
 <td>
 <p>For aligned reads, <code><S></code> is a string representation of the mismatched reference bases in the alignment. See <a href="http://samtools.sourceforge.net/SAM1.pdf">SAM</a> format specification for details. For colorspace alignments, <code><S></code> describes the decoded <em>nucleotide</em> alignment, not the colorspace alignment.</p>
@@ -953,28 +956,21 @@ T2302111203131231130300111123220
 </tr>
 <tr>
 <td>
-<pre><code>XA:i:<N></code></pre>
+<pre><code>    XA:i:<N></code></pre>
 </td>
 <td>
-<p>Aligned read belongs to stratum <code><N></code>. See <a href="#strata">Strata</a> for definition.</p></li>
-</ol>
-<pre><code></td></tr><tr><td>
-
-    XM:i:<N>
-
-</td><td>
-
-For a read with no reported alignments, `<N>` is 0 if the read had
-no alignments.  If [`-m`] was specified and the read's alignments
-were supressed because the [`-m`] ceiling was exceeded, `<N>` equals
-the [`-m`] ceiling + 1, to indicate that there were at least that
-many valid alignments (but all were suppressed).  In [`-M`] mode, if
-the alignment was randomly selected because the [`-M`] ceiling was
-exceeded, `<N>` equals the [`-M`] ceiling + 1, to indicate that there
-were at least that many valid alignments (of which one was reported
-at random).
-
-</td></tr></table></code></pre>
+<p>Aligned read belongs to stratum <code><N></code>. See <a href="#strata">Strata</a> for definition.</p>
+</td>
+</tr>
+<tr>
+<td>
+<pre><code>    XM:i:<N></code></pre>
+</td>
+<td>
+<p>For a read with no reported alignments, <code><N></code> is 0 if the read had no alignments. If <a href="#bowtie-options-m"><code>-m</code></a> was specified and the read's alignments were supressed because the <a href="#bowtie-options-m"><code>-m</code></a> ceiling was exceeded, <code><N></code> equals the <a href="#bowtie-options-m"><code>-m</code></a> ceiling + 1, to indicate that there were at least that many valid alignments (but all were suppressed). In <a href="#bow [...]
+</td>
+</tr>
+</table>
 <h1 id="the-bowtie-build-indexer">The <code>bowtie-build</code> indexer</h1>
 <p><code>bowtie-build</code> builds a Bowtie index from a set of DNA sequences. <code>bowtie-build</code> outputs a set of 6 files with suffixes <code>.1.ebwt</code>, <code>.2.ebwt</code>, <code>.3.ebwt</code>, <code>.4.ebwt</code>, <code>.rev.1.ebwt</code>, and <code>.rev.2.ebwt</code>. (If the total length of all the input sequences is greater than about 4 billion, then the index files will end in <code>ebwtl</code> instead of <code>ebwt</code>.) These files together constitute the ind [...]
 <p>Use of Karkkainen's <a href="http://portal.acm.org/citation.cfm?id=1314852">blockwise algorithm</a> allows <code>bowtie-build</code> to trade off between running time and memory usage. <code>bowtie-build</code> has three options governing how it makes this trade: <a href="#bowtie-build-options-p"><code>-p</code>/<code>--packed</code></a>, <a href="#bowtie-build-options-bmax"><code>--bmax</code></a>/<a href="#bowtie-build-options-bmaxdivn"><code>--bmaxdivn</code></a>, and <a href="#bow [...]
diff --git a/doc/website/old_news.ssi b/doc/website/old_news.ssi
index 119cc99..031328e 100644
--- a/doc/website/old_news.ssi
+++ b/doc/website/old_news.ssi
@@ -1,3 +1,41 @@
+<h2>Lighter released</h2>
+<ul>
+   <li>Lighter is an extremely fast and memory-efficient program for correcting sequencing errors in DNA sequencing data.  For details on how error correction can help improve the speed and accuracy of downstream analysis tools, see the <a href="http://genomebiology.com/2014/15/11/509">paper in Genome Biology</a>.  Source and software <a href="https://github.com/mourisl/Lighter">available at GitHub</a>.
+</ul>
+
+<h2>1.1.1 - 10/1/2014</h2>
+<ul>
+   <li> Fixed a compiling linkage problem related with Mac OS X Mavericks.</li>
+   <li> Improved performance for cases where the reference contains many stretches of Ns.</li>
+   <li> Some minor automatic tests updates.</li>
+</ul>
+
+
+<h2>1.1.0 - 7/19/2014</h2>
+<ul>
+   <li> Added support for large and small indexes, removing 4-billion-nucleotide
+     barrier.  Bowtie can now be used with reference genomes of any size.</li>
+   <li> No longer releasing 32-bit binaries. Simplified manual and Makefile accordingly.</li>
+   <li> Phased out CygWin support.</li>
+   <li> Improved efficiency of index files loading.</li>
+   <li> Fixed a bug that made <tt>bowtie-inspect</tt> fail in some situations.</li>
+   <li> (This release was briefly given version number 2.0.0, but we changed it to 1.1.0
+        to avoid confusion with Bowtie 2.)</li>
+</ul>
+
+<h2>1.0.1 release - 3/14/2014</h2>
+<ul>
+ <li>Improved index querying efficiency using "population count" instructions
+     available since SSE4.2.</li>
+ <li>Credits to the Intel(r) enabling team for performance optimizations
+     included in this release.  Thank you!</li>
+</ul>
+
+<h2>Bowtie on GitHub - 4/11/13</h2>
+<ul>
+ <li>Bowtie source now lives in a <a href="https://github.com/BenLangmead/bowtie">public GitHub repository</a>.</li>
+</ul>
+
 <h2>1.0.0 release - 4/9/13</h2>
 <ul>
  <li>Finally, a 64-bit Windows binary!</li>
diff --git a/doc/website/recent_news.ssi b/doc/website/recent_news.ssi
index 8904cb6..d063fe0 100644
--- a/doc/website/recent_news.ssi
+++ b/doc/website/recent_news.ssi
@@ -1,3 +1,17 @@
+<h2>1.2.2 - 12/11/2017</h2>
+<ul>
+    <li>Fixed major issue causing corrupt SAM output when using many threads (-p/--threads) on certain systems</li>
+    <li>Fixed major issue with incorrect alignment offsets being reported in --large-index mode</li>
+    <li>Fixed major issue with reads files being skipped when multiple inputs were specified together with -p/--threads</li>
+    <li>The official LICENSE of Bowtie was changed to Artistic License 2.0. This fixes an issue with the previous LICENSE, which mistakenly combined elements of different open-source licenses.</li>
+    <li>Fixed issue where bowtie would still run for a long time even when -u was set to a small number.</li>
+    <li>Fixed spurious "Reads file contained a pattern with more than 1024 quality values" error for some colorspace inputs.</li>
+    <li>Fixed issue with --strata sometimes failing to suppress alignments at lower strata.</li>
+    <li>Fixed issue with ends of paired-end reads sometimes appearing in non-adjacent lines of the SAM output with -p/--threads >1</li>
+    <li>Fixed issue whereby the read name of end #2 was not always truncated at the first whitespace character</li>
+    <li>Code simplifications</li>
+</ul>
+
 <h2>1.2.1.1 - 06/13/2017</h2>
 <ul>
     <li>Fixed an issue causing Bowtie to segfault when processing reads from stdin</li>
@@ -43,42 +57,3 @@ these libraries be pre-installed.</p>
    <li>  Added minor corrections/addition to the manual.</li>
    <li>  Fixed bug that caused the wrapper to incorrectly identify the bowtie binary.</li>
 </ul>
-
-<h2>Lighter released</h2>
-<ul>
-   <li>Lighter is an extremely fast and memory-efficient program for correcting sequencing errors in DNA sequencing data.  For details on how error correction can help improve the speed and accuracy of downstream analysis tools, see the <a href="http://genomebiology.com/2014/15/11/509">paper in Genome Biology</a>.  Source and software <a href="https://github.com/mourisl/Lighter">available at GitHub</a>.
-</ul>
-
-<h2>1.1.1 - 10/1/2014</h2>
-<ul>
-   <li> Fixed a compiling linkage problem related with Mac OS X Mavericks.</li>
-   <li> Improved performance for cases where the reference contains many stretches of Ns.</li>
-   <li> Some minor automatic tests updates.</li>
-</ul>
-
-
-<h2>1.1.0 - 7/19/2014</h2>
-<ul>
-   <li> Added support for large and small indexes, removing 4-billion-nucleotide
-     barrier.  Bowtie can now be used with reference genomes of any size.</li>
-   <li> No longer releasing 32-bit binaries. Simplified manual and Makefile accordingly.</li>
-   <li> Phased out CygWin support.</li>
-   <li> Improved efficiency of index files loading.</li>
-   <li> Fixed a bug that made <tt>bowtie-inspect</tt> fail in some situations.</li>
-   <li> (This release was briefly given version number 2.0.0, but we changed it to 1.1.0
-        to avoid confusion with Bowtie 2.)</li>
-</ul>
-
-<h2>1.0.1 release - 3/14/2014</h2>
-<ul>
- <li>Improved index querying efficiency using "population count" instructions
-     available since SSE4.2.</li>
- <li>Credits to the Intel(r) enabling team for performance optimizations
-     included in this release.  Thank you!</li>
-</ul>
-
-<h2>Bowtie on GitHub - 4/11/13</h2>
-<ul>
- <li>Bowtie source now lives in a <a href="https://github.com/BenLangmead/bowtie">public GitHub repository</a>.</li>
-</ul>
-
diff --git a/doc/website/rhsidebar.ssi b/doc/website/rhsidebar.ssi
index 29d0973..5561a5f 100644
--- a/doc/website/rhsidebar.ssi
+++ b/doc/website/rhsidebar.ssi
@@ -18,10 +18,10 @@
 	</tr>
         <tr>
           <td>
-            <a href="https://sourceforge.net/projects/bowtie-bio/files/bowtie/1.2.1.1">Bowtie 1.2.1.1</a>
+            <a href="https://sourceforge.net/projects/bowtie-bio/files/bowtie/1.2.2">Bowtie 1.2.2</a>
           </td>
           <td align="right">
-            06/13/17
+            12/11/17
           </td>
         </tr>
         <tr>
diff --git a/ebwt_search.cpp b/ebwt_search.cpp
index f8f79f5..5de9563 100644
--- a/ebwt_search.cpp
+++ b/ebwt_search.cpp
@@ -553,7 +553,6 @@ static void printUsage(ostream& out) {
 #ifdef BOWTIE_SHARED_MEM
 	    << "  --shmem            use shared mem for index; many 'bowtie's can share" << endl
 #endif
-		<< "  --reorder          force SAM output order to match order of input reads" << endl
 	    << "Other:" << endl
 	    << "  --seed <int>       seed for random number generator" << endl
 	    << "  --verbose          verbose output (for debugging)" << endl
@@ -879,15 +878,14 @@ static void parseOptions(int argc, const char **argv) {
 				throw 1;
 		}
 	} while(next_option != -1);
-	if (reorder == true) {
-		if (nthreads == 1 && !thread_stealing) {
-			reorder = false;
-		}
-		if (outType != OUTPUT_SAM) {
-			cerr << "Bowtie will attempt to reorder its output only when outputting SAM." << endl
-				<< "Please specify the `-S` parameter if you intend on using this option." << endl;
-			reorder = false;
-		}
+
+	if (nthreads == 1 && !thread_stealing) {
+		reorder = false;
+	}
+	if (reorder == true && outType != OUTPUT_SAM) {
+		cerr << "Bowtie will attempt to reorder its output only when outputting SAM." << endl
+			<< "Please specify the `-S` parameter if you intend on using this option." << endl;
+		reorder = false;
 	}
 	//bool paired = mates1.size() > 0 || mates2.size() > 0 || mates12.size() > 0;
 	if(rangeMode) {
@@ -1138,6 +1136,7 @@ void decrement_thread_counter() {
 #endif
 }
 
+#ifndef _WIN32
 void del_pid(const char* dirname,int pid) {
 	struct stat finfo;
 	char* fname = (char*) calloc(FNAME_SIZE,sizeof(char));
@@ -1163,7 +1162,6 @@ static void write_pid(const char* dirname,int pid) {
 	free(fname);
 }
 
-#ifndef _WIN32
 //from  http://stackoverflow.com/questions/612097/how-can-i-get-the-list-of-files-in-a-directory-using-c-or-c
 static int read_dir(const char* dirname,int* num_pids) {
 	DIR *dir;
@@ -1461,11 +1459,14 @@ static void exactSearch(PatternComposer& _patsrc,
 		if(!refs->loaded()) throw 1;
 	}
 	exactSearch_refs   = refs;
+	vector<int> tids;
+	tids.reserve(max(nthreads, thread_ceiling));
 #ifdef WITH_TBB
 	vector<std::thread*> threads;
+	vector<thread_tracking_pair> tps;
+	tps.reserve(max(nthreads, thread_ceiling));
 #else
 	vector<tthread::thread*> threads;
-	int *tids = new int[max(nthreads, thread_ceiling)];
 #endif
 
 #ifdef WITH_TBB
@@ -1476,36 +1477,37 @@ static void exactSearch(PatternComposer& _patsrc,
 	{
 		Timer _t(cerr, "Time for 0-mismatch search: ", timing);
 
+#ifndef _WIN32
 		int pid = 0;
 		if(thread_stealing) {
 			pid = getpid();
 			write_pid(thread_stealing_dir.c_str(), pid);
 			thread_counter = 0;
 		}
+#endif
 		
 		for(int i = 0; i < nthreads; i++) {
+			tids[i] = i;
 #ifdef WITH_TBB
-			thread_tracking_pair tp;
-			tp.tid = i;
-			tp.done = &all_threads_done;
+			tps[i].tid = i;
+			tps[i].done = &all_threads_done;
 			if (i == nthreads - 1) {
 				if(stateful) {
-					exactSearchWorkerStateful((void*)&tp);
+					exactSearchWorkerStateful((void*)&tps[i]);
 				} else {
-					exactSearchWorker((void*)&tp);
+					exactSearchWorker((void*)&tps[i]);
 				}
 			}
 			else {
 				if(stateful) {
-					threads.push_back(new std::thread(exactSearchWorkerStateful, (void*)&tp));
+					threads.push_back(new std::thread(exactSearchWorkerStateful, (void*)&tps[i]));
 				} else {
-					threads.push_back(new std::thread(exactSearchWorker, (void*)&tp));
+					threads.push_back(new std::thread(exactSearchWorker, (void*)&tps[i]));
 				}
 				threads[i]->detach();
 				SLEEP(10);
 			}
 #else
-			tids[i] = i;
 			if (i == nthreads - 1) {
 				if(stateful) {
 					exactSearchWorkerStateful((void*)(tids + i));
@@ -1532,19 +1534,18 @@ static void exactSearch(PatternComposer& _patsrc,
 			while(thread_counter > 0) {
 				if(steal_thread(pid, orig_threads)) { 
 					nthreads++;
+					tids[nthreads-1] = nthreads;
 #ifdef WITH_TBB
-					thread_tracking_pair tp;
-					tp.tid = nthreads - 1;
-					tp.done = &all_threads_done;
+					tps[nthreads-1].tid = nthreads - 1;
+					tps[nthreads-1].done = &all_threads_done;
 					if(stateful) {
-						threads.push_back(new std::thread(exactSearchWorkerStateful, (void*) &tp));
+						threads.push_back(new std::thread(exactSearchWorkerStateful, (void*)&tps[nthreads-1]));
 					} else {
-						threads.push_back(new std::thread(exactSearchWorker, (void*) &tp));
+						threads.push_back(new std::thread(exactSearchWorker, (void*)&tps[nthreads-1]));
 					}
 					threads[nthreads-1]->detach();
 					SLEEP(10);
 #else
-					tids[nthreads-1] = nthreads;
 					if(stateful) {
 						threads.push_back(new tthread::thread(exactSearchWorkerStateful, (void *)(tids + nthreads - 1)));
 					} else {
@@ -1843,11 +1844,14 @@ static void mismatchSearchFull(PatternComposer& _patsrc,
 	}
 	mismatchSearch_refs = refs;
 
+	vector<int> tids;
+	tids.reserve(max(nthreads, thread_ceiling));
 #ifdef WITH_TBB
 	vector<std::thread*> threads;
+	vector<thread_tracking_pair> tps;
+	tps.reserve(max(nthreads, thread_ceiling));
 #else
 	vector<tthread::thread*> threads;
-	int *tids = new int[max(nthreads, thread_ceiling)];
 #endif
 
 #ifdef WITH_TBB
@@ -1869,28 +1873,27 @@ static void mismatchSearchFull(PatternComposer& _patsrc,
 #endif
 
 		for(int i = 0; i < nthreads; i++) {
+			tids[i] = i;
 #ifdef WITH_TBB
-			thread_tracking_pair tp;
-			tp.tid = i;
-			tp.done = &all_threads_done;
+			tps[i].tid = i;
+			tps[i].done = &all_threads_done;
 			if (i == nthreads - 1) {
 				if(stateful) {
-					mismatchSearchWorkerFullStateful((void*)&tp);
+					mismatchSearchWorkerFullStateful((void*)&tps[i]);
 				} else {
-					mismatchSearchWorkerFull((void*)&tp);
+					mismatchSearchWorkerFull((void*)&tps[i]);
 				}
 			}
 			else {
 				if(stateful) {
-					threads.push_back(new std::thread(mismatchSearchWorkerFullStateful, (void*)&tp));
+					threads.push_back(new std::thread(mismatchSearchWorkerFullStateful, (void*)&tps[i]));
 				} else {
-					threads.push_back(new std::thread(mismatchSearchWorkerFull, (void*)&tp));
+					threads.push_back(new std::thread(mismatchSearchWorkerFull, (void*)&tps[i]));
 				}
 				threads[i]->detach();
 				SLEEP(10);
 			}
 #else
-			tids[i] = i;
 			if (i == nthreads - 1) {
 				if(stateful) {
 					mismatchSearchWorkerFullStateful((void*)(tids + i));
@@ -1917,19 +1920,18 @@ static void mismatchSearchFull(PatternComposer& _patsrc,
 			while(thread_counter > 0) {
 				if(steal_thread(pid, orig_threads)) {
 					nthreads++;
+					tids[nthreads-1] = nthreads;
 #ifdef WITH_TBB
-					thread_tracking_pair tp;
-					tp.tid = nthreads - 1;
-					tp.done = &all_threads_done;
+					tps[nthreads-1].tid = nthreads - 1;
+					tps[nthreads-1].done = &all_threads_done;
 					if(stateful) {
-						threads.push_back(new std::thread(mismatchSearchWorkerFullStateful, (void*)&tp));
+						threads.push_back(new std::thread(mismatchSearchWorkerFullStateful, (void*)&tps[nthreads-1]));
 					} else {
-						threads.push_back(new std::thread(mismatchSearchWorkerFull, (void*)&tp));
+						threads.push_back(new std::thread(mismatchSearchWorkerFull, (void*)&tps[nthreads-1]));
 					}
 					threads[nthreads - 1]->detach();
 					SLEEP(10);
 #else
-					tids[nthreads-1] = nthreads;
 					if(stateful) {
 						threads.push_back(new tthread::thread(mismatchSearchWorkerFullStateful, (void *)(tids + nthreads - 1)));
 					} else {
@@ -2347,11 +2349,14 @@ static void twoOrThreeMismatchSearchFull(
 	twoOrThreeMismatchSearch_hitMask  = NULL;
 	twoOrThreeMismatchSearch_two      = two;
 
+	vector<int> tids;
+	tids.reserve(max(nthreads, thread_ceiling));
 #ifdef WITH_TBB
 	vector<std::thread*> threads;
+	vector<thread_tracking_pair> tps;
+	tps.reserve(max(nthreads, thread_ceiling));
 #else
 	vector<tthread::thread*> threads;
-	int *tids = new int[max(nthreads, thread_ceiling)];
 #endif
 
 #ifdef WITH_TBB
@@ -2373,28 +2378,27 @@ static void twoOrThreeMismatchSearchFull(
 #endif
 
 		for(int i = 0; i < nthreads; i++) {
+			tids[i] = i;
 #ifdef WITH_TBB
-			thread_tracking_pair tp;
-			tp.tid = i;
-			tp.done = &all_threads_done;
+			tps[i].tid = i;
+			tps[i].done = &all_threads_done;
 			if (i == nthreads - 1) {
 				if(stateful) {
-					twoOrThreeMismatchSearchWorkerStateful((void*)&tp);
+					twoOrThreeMismatchSearchWorkerStateful((void*)&tps[i]);
 				} else {
-					twoOrThreeMismatchSearchWorkerFull((void*)&tp);
+					twoOrThreeMismatchSearchWorkerFull((void*)&tps[i]);
 				}
 			}
 			else {
 				if(stateful) {
-					threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerStateful, (void*)&tp));
+					threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerStateful, (void*)&tps[i]));
 				} else {
-					threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerFull, (void*)&tp));
+					threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerFull, (void*)&tps[i]));
 				}
 				threads[i]->detach();
 				SLEEP(10);
 			}
 #else
-			tids[i] = i;
 			if (i == nthreads - 1) {
 				if(stateful) {
 					twoOrThreeMismatchSearchWorkerStateful((void*)(tids + i));
@@ -2421,19 +2425,18 @@ static void twoOrThreeMismatchSearchFull(
 			while(thread_counter > 0) {
 				if(steal_thread(pid, orig_threads)) {
 					nthreads++;
+					tids[nthreads-1] = nthreads;
 #ifdef WITH_TBB
-					thread_tracking_pair tp;
-					tp.tid = nthreads - 1;
-					tp.done = &all_threads_done;
+					tps[nthreads-1].tid = nthreads - 1;
+					tps[nthreads-1].done = &all_threads_done;
 					if(stateful) {
-						threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerStateful, (void*) &tp));
+						threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerStateful, (void*)&tps[nthreads-1]));
 					} else {
-						threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerFull, (void*) &tp));
+						threads.push_back(new std::thread(twoOrThreeMismatchSearchWorkerFull, (void*)&tps[nthreads-1]));
 					}
 					threads[nthreads-1]->detach();
 					SLEEP(10);
 #else
-					tids[nthreads-1] = nthreads;
 					if(stateful) {
 						threads.push_back(new tthread::thread(twoOrThreeMismatchSearchWorkerStateful, (void *)(tids + nthreads - 1)));
 					} else {
@@ -2898,11 +2901,14 @@ static void seededQualCutoffSearchFull(
 	}
 	seededQualSearch_refs = refs;
 
+	vector<int> tids;
+	tids.reserve(max(nthreads, thread_ceiling));
 #ifdef WITH_TBB
 	vector<std::thread*> threads;
+	vector<thread_tracking_pair> tps;
+	tps.reserve(max(nthreads, thread_ceiling));
 #else
 	vector<tthread::thread*> threads;
-	int *tids = new int[max(nthreads, thread_ceiling)];
 #endif
 
 #ifdef WITH_TBB
@@ -2932,28 +2938,27 @@ static void seededQualCutoffSearchFull(
 #endif
 
 		for(int i = 0; i < nthreads; i++) {
+			tids[i] = i;
 #ifdef WITH_TBB
-			thread_tracking_pair tp;
-			tp.tid = i;
-			tp.done = &all_threads_done;
+			tps[i].tid = i;
+			tps[i].done = &all_threads_done;
 			if (i == nthreads - 1) {
 				if(stateful) {
-					seededQualSearchWorkerFullStateful((void*)&tp);
+					seededQualSearchWorkerFullStateful((void*)&tps[i]);
 				} else {
-					seededQualSearchWorkerFull((void*)&tp);
+					seededQualSearchWorkerFull((void*)&tps[i]);
 				}
 			}
 			else {
 				if(stateful) {
-					threads.push_back(new std::thread(seededQualSearchWorkerFullStateful, (void*)&tp));
+					threads.push_back(new std::thread(seededQualSearchWorkerFullStateful, (void*)&tps[i]));
 				} else {
-					threads.push_back(new std::thread(seededQualSearchWorkerFull, (void*)&tp));
+					threads.push_back(new std::thread(seededQualSearchWorkerFull, (void*)&tps[i]));
 				}
 				threads[i]->detach();
 				SLEEP(10);
 		    }
 #else
-			tids[i] = i;
 			if (i == nthreads - 1) {
 				if(stateful) {
 					seededQualSearchWorkerFullStateful((void*)(tids + i));
@@ -2980,19 +2985,18 @@ static void seededQualCutoffSearchFull(
 			while(thread_counter > 0) {
 				if(steal_thread(pid, orig_threads)) {
 					nthreads++;
+					tids[nthreads-1] = nthreads - 1;
 #ifdef WITH_TBB
-					thread_tracking_pair tp;
-					tp.tid = nthreads - 1;
-					tp.done = &all_threads_done;
+					tps[nthreads-1].tid = nthreads - 1;
+					tps[nthreads-1].done = &all_threads_done;
 					if(stateful) {
-						threads.push_back(new std::thread(seededQualSearchWorkerFullStateful, (void*) &tp));
+						threads.push_back(new std::thread(seededQualSearchWorkerFullStateful, (void*)&tps[nthreads-1]));
 					} else {
-						threads.push_back(new std::thread(seededQualSearchWorkerFull, (void*) &tp));
+						threads.push_back(new std::thread(seededQualSearchWorkerFull, (void*)&tps[nthreads-1]));
 					}
 					threads[nthreads-1]->detach();
 					SLEEP(10);
 #else
-					tids[nthreads-1] = nthreads - 1;
 					if(stateful) {
 						threads.push_back(new tthread::thread(seededQualSearchWorkerFullStateful, (void *)(tids + nthreads - 1)));
 					} else {
diff --git a/multikey_qsort.h b/multikey_qsort.h
index 18936de..e5d3095 100644
--- a/multikey_qsort.h
+++ b/multikey_qsort.h
@@ -820,9 +820,6 @@ void qsortSufDcU8(const T1& host1,
 #define BUCKET_SORT_CUTOFF (4 * 1024 * 1024)
 #define SELECTION_SORT_CUTOFF 6
 
-// 5 64-element buckets for bucket-sorting A, C, G, T, $
-static TIndexOffU bkts[4][4 * 1024 * 1024];
-
 /**
  * Straightforwardly obtain a uint8_t-ized version of t[off].  This
  * works fine as long as TStr is not packed.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/bowtie.git



More information about the debian-med-commit mailing list