New upstream version 2.3.3

parent 36f3b278
.project
bowtie2-align
bowtie2-build
bowtie2-inspect
*.zip
*.bt2
*.bt2l
*.dSYM
*.pyc
*.swp
.run.pl.child.*
.simple_tests*
.idea
bowtie2-build-s
bowtie2-build-l
bowtie2-align-s
bowtie2-align-l
bowtie2-inspect-s
bowtie2-inspect-l
bowtie2-build-s-debug
bowtie2-build-l-debug
bowtie2-align-s-debug
bowtie2-align-l-debug
bowtie2-inspect-s-debug
bowtie2-inspect-l-debug
Xcode
language: c++
compiler:
- clang
- gcc
cache: apt
addons:
apt:
packages:
- libtbb-dev
branches:
only:
- master
- cleaner_parsing
- batch_parsing
- no-io
- rel2.3
- v2.3.2
script: make allall && make simple-test
notifications:
slack:
secure: tfzT8N1fNV+oSV7tide9WrAj3ifs+LONJ3fCH1tUzexqrx23te4lE0oAj9C1cEMJ4evyRYwHNG8HZoLCOy8EfapqbWm6vgLIlkIBpeZ9E6f2jG6v0YuVDWWpqQC3qdGXCqWtHPjgs3i5OLsLwwQ/LItLoTqpBk2aYv+vGNs2F9g=
......@@ -26,4 +26,10 @@ check http://tinythreadpp.bitsnbites.eu/
Various users have kindly supplied patches, bug reports and feature requests
over the years. Many, many thanks go to them.
Contributors to this project include:
* Christopher Wilks -- cwilks3@jhu.edu,
* Aidan Reilly -- areilly8@jhu.edu
* Valentin Antonescu -- valentin@jhu.edu
* Rone Charles -- charro@cs.jhu.edu
September 2011
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -243,7 +243,6 @@ SRC_PKG_LIST = $(wildcard *.h) \
$(wildcard *.c) \
$(wildcard *.cpp) \
$(wildcard third_party/*) \
doc/strip_markdown.pl \
Makefile \
$(GENERAL_LIST)
......@@ -473,7 +472,7 @@ doc/manual.html: MANUAL.markdown
rm -f .tmp.head
MANUAL: MANUAL.markdown
perl doc/strip_markdown.pl < $^ > $@
pandoc -f markdown -t plain $^ -o $@
.PHONY: install
install: all
......
Bowtie 2 NEWS
=============
Bowtie 2 is now available for download from the project website,
http://bowtie-bio.sf.net/bowtie2. 2.0.0-beta1 is the first version released to
the public and 2.3.2 is the latest version. Bowtie 2 is licensed under
the GPLv3 license. See `LICENSE' file for details.
Bowtie 2 is available for download from the project website,
http://bowtie-bio.sf.net/bowtie2 and on Github,
https://github.com/BenLangmead/bowtie2/releases. 2.0.0-beta1 is
the first version released to the public and 2.3.3 is the latest
version. Bowtie 2 is licensed under the GPLv3 license. See `LICENSE'
file for details.
Reporting Issues
================
Please report any issues using the Sourceforge bug tracker:
Please report any issues to the Bowtie 2 Github page or using the Sourceforge bug tracker:
https://sourceforge.net/tracker/?group_id=236897&atid=1101606
* https://github.com/BenLangmead/bowtie2/issues
* https://sourceforge.net/tracker/?group_id=236897&atid=1101606
Version Release History
=======================
Version 2.3.3 - Sep 09, 2017
From this release forward prepackaged bowtie2 binaries are now
statically linked to the zlib compression library and, the recommended
threading library, TBB. Users who rely on prepackaged builds are
no longer required to have these packages pre-installed. As a result
of the aforementioned changes legacy packages have been discontinued.
* bowtie2-build now supports gzip-compressed FASTA inputs
* New --xeq parameter for bowtie2 disambiguates the 'M' CIGAR
flag. When specified, matches are indicated with the '=' operation and
mismatches with 'X'
* Fixed a possible infinite loop during parallel index building due
to the compiler optimizing away a loop condition
* Added --soft-clipped-unmapped-tlen parameter for bowtie2 that
ignores soft-clipped bases when calculating template length (TLEN)
* Added support for multi-line sequences in FASTA read inputs
* Expanded explanation of MD:Z field in manual
* Fixed a crashing bug when output is redirected to a pipe
* Fixed ambiguity in the SEED alignment policy that sometimes caused -N parameter to be ignored
Version 2.3.2 - May 05, 2017
* Added support for interleaved paired-end FASTQ inputs
(--interleaved)
......
......@@ -51,16 +51,14 @@ bool SAVal::repOk(const AlignmentCache& ac) const {
* Add a new association between a read sequnce ('seq') and a
* reference sequence ('')
*/
bool AlignmentCache::addOnTheFly(
bool AlignmentCache::addOnTheFlyImpl(
QVal& qv, // qval that points to the range of reference substrings
const SAKey& sak, // the key holding the reference substring
TIndexOffU topf, // top range elt in BWT index
TIndexOffU botf, // bottom range elt in BWT index
TIndexOffU topb, // top range elt in BWT' index
TIndexOffU botb, // bottom range elt in BWT' index
bool getLock)
TIndexOffU botb) // bottom range elt in BWT' index
{
ThreadSafe ts(lockPtr(), shared_ && getLock);
bool added = true;
// If this is the first reference sequence we're associating with
// the query sequence, initialize the QVal.
......@@ -104,6 +102,23 @@ bool AlignmentCache::addOnTheFly(
return true;
}
bool AlignmentCache::addOnTheFly(
QVal& qv, // qval that points to the range of reference substrings
const SAKey& sak, // the key holding the reference substring
TIndexOffU topf, // top range elt in BWT index
TIndexOffU botf, // bottom range elt in BWT index
TIndexOffU topb, // top range elt in BWT' index
TIndexOffU botb, // bottom range elt in BWT' index
bool getLock)
{
if(shared_ && getLock) {
ThreadSafe ts(mutex_m);
return addOnTheFlyImpl(qv, sak, topf, botf, topb, botb);
} else {
return addOnTheFlyImpl(qv, sak, topf, botf, topb, botb);
}
}
#ifdef ALIGNER_CACHE_MAIN
#include <iostream>
......
......@@ -444,10 +444,8 @@ public:
samap_(CACHE_PAGE_SZ, CA_CAT),
salist_(CA_CAT),
shared_(shared),
mutex_m(),
version_(0)
{
}
mutex_m(),
version_(0) { }
/**
* Given a QVal, populate the given EList of SATuples with records
......@@ -462,37 +460,11 @@ public:
size_t& nelt,
bool getLock = true)
{
ThreadSafe ts(lockPtr(), shared_ && getLock);
assert(qv.repOk(*this));
const size_t refi = qv.offset();
const size_t reff = refi + qv.numRanges();
// For each reference sequence sufficiently similar to the
// query sequence in the QKey...
for(size_t i = refi; i < reff; i++) {
// Get corresponding SAKey, containing similar reference
// sequence & length
SAKey sak = qlist_.get(i);
// Shouldn't have identical keys in qlist_
assert(i == refi || qlist_.get(i) != qlist_.get(i-1));
// Get corresponding SANode
SANode *n = samap_.lookup(sak);
assert(n != NULL);
const SAVal& sav = n->payload;
assert(sav.repOk(*this));
if(sav.len > 0) {
nrange++;
satups.expand();
satups.back().init(sak, sav.topf, sav.topb, TSlice(salist_, sav.i, sav.len));
nelt += sav.len;
#ifndef NDEBUG
// Shouldn't add consecutive identical entries too satups
if(i > refi) {
const SATuple b1 = satups.back();
const SATuple b2 = satups[satups.size()-2];
assert(b1.key != b2.key || b1.topf != b2.topf || b1.offs != b2.offs);
}
#endif
}
if(shared_ && getLock) {
ThreadSafe ts(mutex_m);
queryQvalImpl(qv, satups, nrange, nelt);
} else {
queryQvalImpl(qv, satups, nrange, nelt);
}
}
......@@ -522,12 +494,14 @@ public:
bool *added,
bool getLock = true)
{
ThreadSafe ts(lockPtr(), shared_ && getLock);
assert(qk.cacheable());
QNode *n = qmap_.add(pool(), qk, added);
return (n != NULL ? &n->payload : NULL);
if(shared_ && getLock) {
ThreadSafe ts(mutex_m);
return addImpl(qk, added);
} else {
return addImpl(qk, added);
}
}
/**
* Add a new association between a read sequnce ('seq') and a
* reference sequence ('')
......@@ -546,8 +520,8 @@ public:
* ranges in this cache will become invalid and the corresponding
* reads will have to be re-aligned.
*/
void clear(bool getLock = true) {
ThreadSafe ts(lockPtr(), shared_ && getLock);
void clear() {
ThreadSafe ts(mutex_m);
pool_.clear();
qmap_.clear();
qlist_.clear();
......@@ -585,17 +559,9 @@ public:
* Return the lock object.
*/
MUTEX_T& lock() {
return mutex_m;
return mutex_m;
}
/**
* Return a const pointer to the lock object. This allows us to
* write const member functions that grab the lock.
*/
MUTEX_T* lockPtr() const {
return const_cast<MUTEX_T*>(&mutex_m);
}
/**
* Return true iff this cache is shared among threads.
*/
......@@ -618,6 +584,79 @@ protected:
bool shared_; // true -> this cache is global
MUTEX_T mutex_m; // mutex used for syncronization in case the the cache is shared.
uint32_t version_; // cache version
private:
template <int S>
void queryQvalImpl(
const QVal& qv,
EList<SATuple, S>& satups,
size_t& nrange,
size_t& nelt)
{
assert(qv.repOk(*this));
const size_t refi = qv.offset();
const size_t reff = refi + qv.numRanges();
// For each reference sequence sufficiently similar to the
// query sequence in the QKey...
for(size_t i = refi; i < reff; i++) {
// Get corresponding SAKey, containing similar reference
// sequence & length
SAKey sak = qlist_.get(i);
// Shouldn't have identical keys in qlist_
assert(i == refi || qlist_.get(i) != qlist_.get(i-1));
// Get corresponding SANode
SANode *n = samap_.lookup(sak);
assert(n != NULL);
const SAVal& sav = n->payload;
assert(sav.repOk(*this));
if(sav.len > 0) {
nrange++;
satups.expand();
satups.back().init(sak, sav.topf, sav.topb, TSlice(salist_, sav.i, sav.len));
nelt += sav.len;
#ifndef NDEBUG
// Shouldn't add consecutive identical entries too satups
if(i > refi) {
const SATuple b1 = satups.back();
const SATuple b2 = satups[satups.size()-2];
assert(b1.key != b2.key || b1.topf != b2.topf || b1.offs != b2.offs);
}
#endif
}
}
}
/**
* Add a new association between a read sequnce ('seq') and a
* reference sequence ('')
*/
bool addOnTheFlyImpl(
QVal& qv, // qval that points to the range of reference substrings
const SAKey& sak, // the key holding the reference substring
TIndexOffU topf, // top range elt in BWT index
TIndexOffU botf, // bottom range elt in BWT index
TIndexOffU topb, // top range elt in BWT' index
TIndexOffU botb); // bottom range elt in BWT' index
/**
* Add a new query key ('qk'), usually a 2-bit encoded substring of
* the read) as the key in a new Red-Black node in the qmap and
* return a pointer to the node's QVal.
*
* The expectation is that the caller is about to set about finding
* associated reference substrings, and that there will be future
* calls to addOnTheFly to add associations to reference substrings
* found.
*/
QVal* addImpl(
const QKey& qk,
bool *added)
{
assert(qk.cacheable());
QNode *n = qmap_.add(pool(), qk, added);
return (n != NULL ? &n->payload : NULL);
}
};
/**
......
......@@ -295,7 +295,9 @@ public:
false, // mixedMode
false, // primary
false, // oppAligned
false); // oppFw
false, // oppFw
false, // scUnMapped
false); // xeq
}
AlnFlags(
......@@ -310,10 +312,13 @@ public:
bool mixedMode,
bool primary,
bool oppAligned, // opposite mate aligned?
bool oppFw) // opposite mate aligned forward?
bool oppFw, // opposite mate aligned forward?
bool scUnMapped,
bool xeq)
{
init(pairing, canMax, maxed, maxedPair, nfilt, scfilt,
lenfilt, qcfilt, mixedMode, primary, oppAligned, oppFw);
lenfilt, qcfilt, mixedMode, primary, oppAligned,
oppFw, scUnMapped, xeq);
}
/**
......@@ -331,7 +336,9 @@ public:
bool mixedMode,
bool primary,
bool oppAligned,
bool oppFw)
bool oppFw,
bool scUnMapped,
bool xeq)
{
assert_gt(pairing, 0);
assert_leq(pairing, ALN_FLAG_PAIR_UNPAIRED);
......@@ -347,6 +354,8 @@ public:
primary_ = primary;
oppAligned_ = oppAligned;
oppFw_ = oppFw;
scUnMapped_ = scUnMapped;
xeq_ = xeq;
}
/**
......@@ -495,10 +504,18 @@ public:
return oppAligned_;
}
inline bool isOppFw() const {
bool isOppFw() const {
return oppFw_;
}
bool scUnMapped() const {
return scUnMapped_;
}
bool xeq() const {
return xeq_;
}
protected:
// See ALN_FLAG_PAIR_* above
......@@ -533,6 +550,11 @@ protected:
// True if opposite mate aligned in the forward direction
bool oppFw_;
// True if soft clipped bases are considered unmapped w/r/t TLEN
bool scUnMapped_;
bool xeq_;
};
static inline ostream& operator<<(ostream& os, const AlnScore& o) {
......@@ -870,17 +892,20 @@ public:
*/
inline void getExtendedCoords(
Coord& st, // out: install starting coordinate here
Coord& en) // out: install ending coordinate here
Coord& en, // out: install ending coordinate here
const AlnFlags& flags)
const
{
getCoords(st, en);
// Take trimming into account
int64_t trim_st = (fw() ? trim5p_ : trim3p_);
int64_t trim_en = (fw() ? trim3p_ : trim5p_);
trim_st += (fw() ? pretrim5p_ : pretrim3p_);
trim_en += (fw() ? pretrim3p_ : pretrim5p_);
st.adjustOff(-trim_st);
en.adjustOff( trim_en);
if (!flags.scUnMapped()) {
int64_t trim_st = (fw() ? trim5p_ : trim3p_);
int64_t trim_en = (fw() ? trim3p_ : trim5p_);
trim_st += (fw() ? pretrim5p_ : pretrim3p_);
trim_en += (fw() ? pretrim3p_ : pretrim5p_);
st.adjustOff(-trim_st);
en.adjustOff( trim_en);
}
}
/**
......@@ -1268,7 +1293,7 @@ public:
if((sameChr && refcoord_.ref() == omate->refcoord_.ref()) ||
flags.alignedConcordant())
{
setFragmentLength(*omate);
setFragmentLength(*omate, flags);
} else {
assert(!isFraglenSet());
}
......@@ -1283,12 +1308,12 @@ public:
* by the user in how they set the maximum and minimum fragment length
* settings.
*/
int64_t setFragmentLength(const AlnRes& omate) {
int64_t setFragmentLength(const AlnRes& omate, const AlnFlags& flags) {
Coord st, en;
Coord ost, oen;
assert_eq(refid(), omate.refid());
getExtendedCoords(st, en);
omate.getExtendedCoords(ost, oen);
getExtendedCoords(st, en, flags);
omate.getExtendedCoords(ost, oen, flags);
bool imUpstream = st.off() < ost.off();
TRefOff up = std::min(st.off(), ost.off());
TRefOff dn = std::max(en.off(), oen.off());
......
......@@ -1526,7 +1526,7 @@ SeedAligner::searchSeedBi(
bool leaveZone = s.zones[i].first < 0;
//bool leaveZoneIns = zones_[i].second < 0;
Constraint& cons = *zones[abs(s.zones[i].first)];
Constraint& insCons = *zones[abs(s.zones[i].second)];
//Constraint& insCons = *zones[abs(s.zones[i].second)];
int c = (*seq_)[off]; assert_range(0, 4, c);
int q = (*qual_)[off];
// Is it legal for us to advance on characters other than 'c'?
......@@ -1598,14 +1598,14 @@ SeedAligner::searchSeedBi(
}
if(cons.canGap() && overall.canGap()) {
throw 1; // TODO
int delEx = 0;
if(cons.canDelete(delEx, *sc_) && overall.canDelete(delEx, *sc_)) {
// Try delete
}
int insEx = 0;
if(insCons.canInsert(insEx, *sc_) && overall.canInsert(insEx, *sc_)) {
// Try insert
}
// int delEx = 0;
// if(cons.canDelete(delEx, *sc_) && overall.canDelete(delEx, *sc_)) {
// // Try delete
// }
// int insEx = 0;
// if(insCons.canInsert(insEx, *sc_) && overall.canInsert(insEx, *sc_)) {
// // Try insert
// }
}
} // if(!bail)
}
......
......@@ -841,7 +841,7 @@ public:
size_t numRepeatSeeds() const {
return repTot_;
}
/**
* Return fraction of seeds that align repetitively.
*/
......@@ -1401,7 +1401,6 @@ struct SeedSearchMetrics {
* SeedSearchMetrics object shread by multiple threads.
*/
void merge(const SeedSearchMetrics& m, bool getLock = false) {
ThreadSafe ts(&mutex_m, getLock);
seedsearch += m.seedsearch;
nrange += m.nrange;
nelt += m.nelt;
......
......@@ -534,9 +534,9 @@ void SeedAlignmentPolicy::parseString(
* interval is determined by IVAL.
*/
else if(tag == "SEED") {
if(ctoks.size() > 2) {
if(ctoks.size() > 1) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag.c_str() << "'; RHS must have 1 or 2 tokens, "
<< "'" << tag.c_str() << "'; RHS must have 1 token, "
<< "had " << ctoks.size() << ". "
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
......@@ -553,13 +553,6 @@ void SeedAlignmentPolicy::parseString(
throw 1;
}
}
if(ctoks.size() >= 2) {
istringstream tmpss(ctoks[1]);
tmpss >> multiseedLen;
} else {
multiseedLen = gDefaultSeedLen;
;
}
}
else if(tag == "SEEDLEN") {
if(ctoks.size() > 1) {
......
......@@ -209,8 +209,8 @@ struct SwMetrics {
* object. This is the only safe way to update a SwMetrics shared
* by multiple threads.
*/
void merge(const SwMetrics& r, bool getLock = false) {
ThreadSafe ts(&mutex_m, getLock);
void merge(const SwMetrics& r) {
ThreadSafe ts(mutex_m);
sws += r.sws;
sws10 += r.sws10;
sws5 += r.sws5;
......
......@@ -326,11 +326,11 @@ void SwDriver::extend(
// Have to do both because whether we can get through an N depends on
// which direction we're coming in
bool fwContains = ebwtFw.contains(tmp_rdseq_);
tmp_rdseq_.reverse();
bool bwContains = ebwtBw != NULL && ebwtBw->contains(tmp_rdseq_);
tmp_rdseq_.reverse();
assert(fwContains || bwContains);
// bool fwContains = ebwtFw.contains(tmp_rdseq_);
// tmp_rdseq_.reverse();
// bool bwContains = ebwtBw != NULL && ebwtBw->contains(tmp_rdseq_);
// tmp_rdseq_.reverse();
// assert(fwContains || bwContains);
}
#endif
ASSERT_ONLY(tmp_rdseq_.reverse());
......@@ -471,11 +471,11 @@ void SwDriver::extend(
// Have to do both because whether we can get through an N depends on
// which direction we're coming in
bool fwContains = ebwtFw.contains(tmp_rdseq_);
tmp_rdseq_.reverse();
bool bwContains = ebwtBw != NULL && ebwtBw->contains(tmp_rdseq_);
tmp_rdseq_.reverse();
assert(fwContains || bwContains);
// bool fwContains = ebwtFw.contains(tmp_rdseq_);
// tmp_rdseq_.reverse();
// bool bwContains = ebwtBw != NULL && ebwtBw->contains(tmp_rdseq_);
// tmp_rdseq_.reverse();
// assert(fwContains || bwContains);
}
#endif
assert_lt(nlex, rdlen);
......
......@@ -41,8 +41,7 @@ struct SSEMetrics {
corerej = nrej = 0;
}
void merge(const SSEMetrics& o, bool getLock = false) {
ThreadSafe ts(&mutex_m, getLock);
void merge(const SSEMetrics& o) {
dp += o.dp;
dpsat += o.dpsat;
dpfail += o.dpfail;
......
......@@ -1362,7 +1362,7 @@ bool SwAligner::backtraceNucleotidesEnd2EndSseI16(
int readq = (*qu_)[row];
assert_leq(col, origCol);
// Get score in this cell
bool empty, reportedThru, canMoveThru, branch = false;
bool empty = false, reportedThru, canMoveThru, branch = false;
int cur = SSEMatrix::H;
if(!d.mat_.reset_[row]) {
d.mat_.resetRow(row);
......
......@@ -1721,7 +1721,7 @@ bool SwAligner::backtraceNucleotidesLocalSseI16(
int readq = (*qu_)[row];
assert_leq(col, origCol);
// Get score in this cell
bool empty, reportedThru, canMoveThru, branch = false;
bool empty = false, reportedThru, canMoveThru, branch = false;
int cur = SSEMatrix::H;
if(!d.mat_.reset_[row]) {
d.mat_.resetRow(row);
......
......@@ -1719,7 +1719,7 @@ bool SwAligner::backtraceNucleotidesLocalSseU8(
int readq = (*qu_)[row];
assert_leq(col, origCol);
// Get score in this cell
bool empty, reportedThru, canMoveThru, branch = false;
bool empty = false, reportedThru, canMoveThru, branch = false;
int cur = SSEMatrix::H;
if(!d.mat_.reset_[row]) {
d.mat_.resetRow(row);
......
......@@ -658,7 +658,9 @@ void AlnSinkWrap::finishRead(
const PerReadMetrics& prm, // per-read metrics
const Scoring& sc, // scoring scheme
bool suppressSeedSummary, // = true
bool suppressAlignments) // = false
bool suppressAlignments, // = false
bool scUnMapped, // = false
bool xeq) // = false
{
obuf_.clear();
OutputQueueMark qqm(g_.outq(), obuf_, rdid_, threadid_);
......@@ -776,7 +778,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
true, // primary
true, // opp aligned
rs2->fw()); // opp fw
rs2->fw(), // opp fw
scUnMapped,
xeq);
AlnFlags flags2(
ALN_FLAG_PAIR_CONCORD_MATE2,
st_.params().mhitsSet(),
......@@ -789,7 +793,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
false, // primary
true, // opp aligned
rs1->fw()); // opp fw
rs1->fw(), // opp fw
scUnMapped,
xeq);
// Issue: we only set the flags once, but some of the flags might
// vary from pair to pair among the pairs we're reporting. For
// instance, whether the a given mate aligns to the forward strand.
......@@ -838,7 +844,7 @@ void AlnSinkWrap::finishRead(
//g_.outq().finishRead(obuf_, rdid_, threadid_);
return;
}
// Report concordant paired-end alignments if possible
// Report disconcordant paired-end alignments if possible
else if(ndiscord > 0) {
ASSERT_ONLY(bool ret =) prepareDiscordants();
assert(ret);
......@@ -861,7 +867,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
true, // primary
true, // opp aligned
rs2->fw()); // opp fw
rs2->fw(), // opp fw
scUnMapped,
xeq);
AlnFlags flags2(
ALN_FLAG_PAIR_DISCORD_MATE2,
st_.params().mhitsSet(),
......@@ -874,7 +882,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
false, // primary
true, // opp aligned
rs1->fw()); // opp fw
rs1->fw(), // opp fw
scUnMapped,
xeq);
SeedAlSumm ssm1, ssm2;
sr1->toSeedAlSumm(ssm1);
sr2->toSeedAlSumm(ssm2);
......@@ -1174,7 +1184,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
true, // primary
repRs2 != NULL, // opp aligned
repRs2 == NULL || repRs2->fw()); // opp fw
repRs2 == NULL || repRs2->fw(), // opp fw
scUnMapped,
xeq);
for(size_t i = 0; i < rs1u_.size(); i++) {
rs1u_[i].setMateParams(ALN_RES_TYPE_UNPAIRED_MATE1, NULL, flags1);
}
......@@ -1196,7 +1208,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,
true, // primary
repRs1 != NULL, // opp aligned
repRs1 == NULL || repRs1->fw()); // opp fw
repRs1 == NULL || repRs1->fw(), // opp fw
scUnMapped,
xeq);
for(size_t i = 0; i < rs2u_.size(); i++) {
rs2u_[i].setMateParams(ALN_RES_TYPE_UNPAIRED_MATE2, NULL, flags2);
}
......@@ -1295,7 +1309,9 @@ void AlnSinkWrap::finishRead(
st_.params().mixed,