Imported Upstream version 2.0.5

parent 6795cc21
Ben Langmead <blangmea@jhsph.edu> wrote Bowtie 2, which is based partially on
Ben Langmead <langmea@cs.jhu.edu> wrote Bowtie 2, which is based partially on
Bowtie. Bowtie was written by Ben Langmead and Cole Trapnell.
Bowtie & Bowtie 2: http://bowtie-bio.sf.net
......
......@@ -400,7 +400,8 @@ instance, when seeking [structural variants].
The expected relative orientation of the mates is set using the [`--ff`],
[`--fr`], or [`--rf`] options. The expected range of inter-mates distances (as
measured from the furthest extremes of the mates; also called "outer distance")
is set with the [`-I`] and [`-X`] options.
is set with the [`-I`] and [`-X`] options. Note that setting [`-I`] and [`-X`]
far apart makes Bowtie 2 slower. See documentation for [`-I`] and [`-X`].
To declare that a pair aligns discordantly, Bowtie 2 requires that both mates
align uniquely. This is a conservative threshold, but this is often desirable
......@@ -1520,7 +1521,15 @@ specified and a paired-end alignment consists of two 20-bp alignments in the
appropriate orientation with a 20-bp gap between them, that alignment is
considered valid (as long as [`-X`] is also satisfied). A 19-bp gap would not
be valid in that case. If trimming options [`-3`] or [`-5`] are also used, the
[`-I`] constraint is applied with respect to the untrimmed mates. Default: 0.
[`-I`] constraint is applied with respect to the untrimmed mates.
The larger the difference between [`-I`] and [`-X`], the slower Bowtie 2 will
run. This is because larger differences bewteen [`-I`] and [`-X`] require that
Bowtie 2 scan a larger window to determine if a concordant alignment exists.
For typical fragment length ranges (200 to 400 nucleotides), Bowtie 2 is very
efficient.
Default: 0 (essentially imposing no minimum)
</td></tr>
<tr><td id="bowtie2-options-X">
......@@ -1538,7 +1547,15 @@ proper orientation with a 60-bp gap between them, that alignment is considered
valid (as long as [`-I`] is also satisfied). A 61-bp gap would not be valid in
that case. If trimming options [`-3`] or [`-5`] are also used, the `-X`
constraint is applied with respect to the untrimmed mates, not the trimmed
mates. Default: 500.
mates.
The larger the difference between [`-I`] and [`-X`], the slower Bowtie 2 will
run. This is because larger differences bewteen [`-I`] and [`-X`] require that
Bowtie 2 scan a larger window to determine if a concordant alignment exists.
For typical fragment length ranges (200 to 400 nucleotides), Bowtie 2 is very
efficient.
Default: 500.
</td></tr>
<tr><td id="bowtie2-options-fr">
......
#
# Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
# Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
#
# This file is part of Bowtie 2.
#
......@@ -76,9 +76,6 @@ PTHREAD_LIB = -lpthread
endif
endif
PREFETCH_LOCALITY = 2
PREF_DEF = -DPREFETCH_LOCALITY=$(PREFETCH_LOCALITY)
LIBS =
SEARCH_LIBS = $(PTHREAD_LIB)
BUILD_LIBS =
......@@ -97,6 +94,7 @@ SEARCH_CPPS = qual.cpp pat.cpp sam.cpp \
pe.cpp aln_sink.cpp dp_framer.cpp \
scoring.cpp presets.cpp unique.cpp \
simple_func.cpp \
random_util.cpp \
aligner_bt.cpp sse_util.cpp \
aligner_swsse.cpp outq.cpp \
aligner_swsse_loc_i16.cpp \
......@@ -154,7 +152,7 @@ GENERAL_LIST = $(wildcard scripts/*.sh) \
$(PTHREAD_PKG) \
bowtie2 \
AUTHORS \
COPYING \
LICENSE \
NEWS \
MANUAL \
MANUAL.markdown \
......@@ -307,6 +305,7 @@ doc/manual.html: MANUAL.markdown
--css style.css -o $@ \
--from markdown --to HTML \
--table-of-contents $^
rm -f .tmp.head
MANUAL: MANUAL.markdown
perl doc/strip_markdown.pl < $^ > $@
......
......@@ -3,8 +3,8 @@ 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.0.4 is the latest version. Bowtie 2 is licensed under
the GPLv3 license. See `COPYING' file for details.
the public and 2.0.5 is the latest version. Bowtie 2 is licensed under
the GPLv3 license. See `LICENSE' file for details.
Reporting Issues
================
......@@ -16,6 +16,19 @@ Please report any issues using the Sourceforge bug tracker:
Version Release History
=======================
Version 2.0.5 - January 4, 2013
* Fixed an issue that would cause excessive memory allocation when aligning
to very repetitive genomes.
* Fixed an issue that would cause a pseudo-randomness-related assert to be
thrown in debug mode under rare circumstances.
* When bowtie2-build fails, it will now delete index files created so far so
that invalid index files don't linger.
* Tokenizer no longer has limit of 10,000 tokens, which was a problem for
users trying to index a very large number of FASTA files.
* Updated manual's discussion of the -I and -X options to mention that
setting them farther apart makes Bowtie 2 slower.
* Renamed COPYING to LICENSE and created a README to be GitHub-friendly.
Version 2.0.4 - December 17, 2012
* Fixed issue whereby --un, --al, --un-conc and --al-conc options would
incorrectly suppress SAM output.
......
2.0.4
\ No newline at end of file
2.0.5
\ No newline at end of file
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2012, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2012, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2012, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2012, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......@@ -38,7 +38,7 @@ static int parseFuncType(const std::string& otype) {
} else if(type == "G" || type == "Log") {
return SIMPLE_FUNC_LOG;
}
std::cerr << "Error: Bad function type '" << otype
std::cerr << "Error: Bad function type '" << otype.c_str()
<< "'. Should be C (constant), L (linear), "
<< "S (square root) or G (natural log)." << std::endl;
throw 1;
......@@ -325,7 +325,7 @@ void SeedAlignmentPolicy::parseString(
if(etoks.size() != 2) {
cerr << "Error parsing alignment policy setting " << setting
<< "; must be bisected by = sign" << endl
<< "Policy: " << s << endl;
<< "Policy: " << s.c_str() << endl;
assert(false); throw 1;
}
// LHS is tag, RHS value
......@@ -340,14 +340,14 @@ void SeedAlignmentPolicy::parseString(
if(ctoks.size() == 0) {
cerr << "Error parsing alignment policy setting " << setting
<< "; RHS must have at least 1 token" << endl
<< "Policy: " << s << endl;
<< "Policy: " << s.c_str() << endl;
assert(false); throw 1;
}
for(size_t i = 0; i < ctoks.size(); i++) {
if(ctoks[i].length() == 0) {
cerr << "Error parsing alignment policy setting " << setting
<< "; token " << i+1 << " on RHS had length=0" << endl
<< "Policy: " << s << endl;
<< "Policy: " << s.c_str() << endl;
assert(false); throw 1;
}
}
......@@ -357,7 +357,7 @@ void SeedAlignmentPolicy::parseString(
if(ctoks.size() != 1) {
cerr << "Error parsing alignment policy setting " << setting
<< "; RHS must have 1 token" << endl
<< "Policy: " << s << endl;
<< "Policy: " << s.c_str() << endl;
assert(false); throw 1;
}
string tmp = ctoks[0];
......@@ -373,9 +373,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "MMP") {
if(ctoks.size() > 3) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'"
<< "'" << tag.c_str() << "'"
<< "; RHS must have at most 3 tokens" << endl
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks[0][0] == 'C') {
......@@ -414,9 +414,9 @@ void SeedAlignmentPolicy::parseString(
penMmcType = COST_MODEL_ROUNDED_QUAL;
} else {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'"
<< "'" << tag.c_str() << "'"
<< "; RHS must start with C, Q or R" << endl
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
}
......@@ -429,9 +429,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "NP") {
if(ctoks.size() != 1) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'"
<< "'" << tag.c_str() << "'"
<< "; RHS must have 1 token" << endl
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks[0][0] == 'C') {
......@@ -449,9 +449,9 @@ void SeedAlignmentPolicy::parseString(
penNType = COST_MODEL_ROUNDED_QUAL;
} else {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'"
<< "'" << tag.c_str() << "'"
<< "; RHS must start with C, Q or R" << endl
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
}
......@@ -536,9 +536,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "SEED") {
if(ctoks.size() > 2) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'; RHS must have 1 or 2 tokens, "
<< "'" << tag.c_str() << "'; RHS must have 1 or 2 tokens, "
<< "had " << ctoks.size() << ". "
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks.size() >= 1) {
......@@ -563,9 +563,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "SEEDLEN") {
if(ctoks.size() > 1) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'; RHS must have 1 token, "
<< "'" << tag.c_str() << "'; RHS must have 1 token, "
<< "had " << ctoks.size() << ". "
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks.size() >= 1) {
......@@ -576,9 +576,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "DPS") {
if(ctoks.size() > 1) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'; RHS must have 1 token, "
<< "'" << tag.c_str() << "'; RHS must have 1 token, "
<< "had " << ctoks.size() << ". "
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks.size() >= 1) {
......@@ -589,9 +589,9 @@ void SeedAlignmentPolicy::parseString(
else if(tag == "ROUNDS") {
if(ctoks.size() > 1) {
cerr << "Error parsing alignment policy setting "
<< "'" << tag << "'; RHS must have 1 token, "
<< "'" << tag.c_str() << "'; RHS must have 1 token, "
<< "had " << ctoks.size() << ". "
<< "Policy: '" << s << "'" << endl;
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
if(ctoks.size() >= 1) {
......@@ -624,8 +624,8 @@ void SeedAlignmentPolicy::parseString(
else {
// Unknown tag
cerr << "Unexpected alignment policy setting "
<< "'" << tag << "'" << endl
<< "Policy: '" << s << "'" << endl;
<< "'" << tag.c_str() << "'" << endl
<< "Policy: '" << s.c_str() << "'" << endl;
assert(false); throw 1;
}
}
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......@@ -234,17 +234,19 @@ public:
double rd = rnd.nextFloat() * mass_;
double mass_sofar = 0.0f;
size_t sz = masses_.size();
size_t last_unelim = std::numeric_limits<size_t>::max();
for(size_t i = 0; i < sz; i++) {
if(!elim_[i]) {
last_unelim = i;
mass_sofar += masses_[i];
if(rd < mass_sofar || i == sz - 1) {
if(rd < mass_sofar) {
// This is the one we hit
return i;
}
}
}
assert(false);
return 0;
assert_neq(std::numeric_limits<size_t>::max(), last_unelim);
return last_unelim;
}
protected:
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......@@ -657,6 +657,7 @@ void AlnSinkWrap::finishRead(
RandomSource& rnd, // pseudo-random generator
ReportingMetrics& met, // reporting metrics
const PerReadMetrics& prm, // per-read metrics
const Scoring& sc, // scoring scheme
bool suppressSeedSummary, // = true
bool suppressAlignments) // = false
{
......@@ -766,6 +767,7 @@ void AlnSinkWrap::finishRead(
assert(!select1_.empty());
g_.reportHits(
obuf_,
staln_,
threadid_,
rd1_,
rd2_,
......@@ -781,7 +783,8 @@ void AlnSinkWrap::finishRead(
&flags1,
&flags2,
prm,
mapq_);
mapq_,
sc);
if(pairMax) {
met.nconcord_rep++;
} else {
......@@ -855,6 +858,7 @@ void AlnSinkWrap::finishRead(
assert(!select1_.empty());
g_.reportHits(
obuf_,
staln_,
threadid_,
rd1_,
rd2_,
......@@ -870,7 +874,8 @@ void AlnSinkWrap::finishRead(
&flags1,
&flags2,
prm,
mapq_);
mapq_,
sc);
met.nconcord_0++;
met.ndiscord++;
init_ = false;
......@@ -1066,6 +1071,7 @@ void AlnSinkWrap::finishRead(
assert(!select1_.empty());
g_.reportHits(
obuf_,
staln_,
threadid_,
rd1_,
repRs2 != NULL ? rd2_ : NULL,
......@@ -1081,7 +1087,8 @@ void AlnSinkWrap::finishRead(
&flags1,
repRs2 != NULL ? &flags2 : NULL,
prm,
mapq_);
mapq_,
sc);
assert_lt(select1_[0], rs1u_.size());
refid = rs1u_[select1_[0]].refid();
refoff = rs1u_[select1_[0]].refoff();
......@@ -1095,6 +1102,7 @@ void AlnSinkWrap::finishRead(
assert(!select2_.empty());
g_.reportHits(
obuf_,
staln_,
threadid_,
rd2_,
repRs1 != NULL ? rd1_ : NULL,
......@@ -1110,7 +1118,8 @@ void AlnSinkWrap::finishRead(
&flags2,
repRs1 != NULL ? &flags1 : NULL,
prm,
mapq_);
mapq_,
sc);
assert_lt(select2_[0], rs2u_.size());
refid = rs2u_[select2_[0]].refid();
refoff = rs2u_[select2_[0]].refoff();
......@@ -1147,6 +1156,7 @@ void AlnSinkWrap::finishRead(
(repRs2 != NULL) ? repRs2->fw() : false); // opp fw
g_.reportUnaligned(
obuf_, // string to write output to
staln_,
threadid_,
rd1_, // read 1
NULL, // read 2
......@@ -1156,8 +1166,9 @@ void AlnSinkWrap::finishRead(
ssm2,
&flags1, // flags 1
NULL, // flags 2
prm,
prm, // per-read metrics
mapq_, // MAPQ calculator
sc, // scoring scheme
true); // get lock?
}
if(rd2_ != NULL && nunpair2 == 0) {
......@@ -1191,6 +1202,7 @@ void AlnSinkWrap::finishRead(
(repRs1 != NULL) ? repRs1->fw() : false); // opp fw
g_.reportUnaligned(
obuf_, // string to write output to
staln_,
threadid_,
rd2_, // read 1
NULL, // read 2
......@@ -1200,13 +1212,13 @@ void AlnSinkWrap::finishRead(
ssm2,
&flags2, // flags 1
NULL, // flags 2
prm,
prm, // per-read metrics
mapq_, // MAPQ calculator
sc, // scoring scheme
true); // get lock?
}
} // if(suppress alignments)
init_ = false;
//g_.outq().finishRead(obuf_, rdid_, threadid_);
return;
}
......@@ -1234,7 +1246,6 @@ bool AlnSinkWrap::report(
bool one = (rs1 != NULL);
const AlnRes* rsa = one ? rs1 : rs2;
const AlnRes* rsb = one ? rs2 : rs1;
//assert(!st_.done());
if(paired) {
assert(readIsPair());
st_.foundConcordant();
......@@ -1291,8 +1302,6 @@ bool AlnSinkWrap::prepareDiscordants() {
assert(rs2_.empty());
rs1_.push_back(rs1u_[0]);
rs2_.push_back(rs2u_[0]);
//rs1u_.clear();
//rs2u_.clear();
return true;
}
return false;
......@@ -1626,6 +1635,7 @@ void AlnSink::appendSeedSummary(
*/
void AlnSinkSam::appendMate(
BTString& o, // append to this string
StackedAln& staln, // store stacked alignment struct here
const Read& rd,
const Read* rdo,
const TReadId rdid,
......@@ -1636,15 +1646,16 @@ void AlnSinkSam::appendMate(
const SeedAlSumm& ssmo,
const AlnFlags& flags,
const PerReadMetrics& prm,
const Mapq& mapqCalc)
const Mapq& mapqCalc,
const Scoring& sc)
{
if(rs == NULL && samc_.omitUnalignedReads()) {
return;
}
char buf[1024];
char mapqInps[1024];
StackedAln staln;
if(rs != NULL) {
staln.reset();
rs->initStacked(rd, staln);
staln.leftAlign(false /* not past MMs */);
}
......@@ -1833,6 +1844,7 @@ void AlnSinkSam::appendMate(
summ, // summary of alignments for this read
ssm, // seed alignment summary
prm, // per-read metrics
sc, // scoring scheme
mapqInps); // inputs to MAPQ calculation
} else {
samc_.printEmptyOptFlags(
......@@ -1842,7 +1854,8 @@ void AlnSinkSam::appendMate(
flags, // alignment flags
summ, // summary of alignments for this read
ssm, // seed alignment summary
prm); // per-read metrics
prm, // per-read metrics
sc); // scoring scheme
}
o.append('\n');
}
......
/*
* Copyright 2011, Ben Langmead <blangmea@jhsph.edu>
* Copyright 2011, Ben Langmead <langmea@cs.jhu.edu>
*
* This file is part of Bowtie 2.
*
......@@ -622,6 +622,7 @@ public:
*/
virtual void append(
BTString& o,
StackedAln& staln,
size_t threadId,
const Read *rd1,
const Read *rd2,
......@@ -635,6 +636,7 @@ public:
const AlnFlags* flags2,
const PerReadMetrics& prm,
const Mapq& mapq,
const Scoring& sc,
bool report2) = 0;