From 23c9e81bfe69b24dc3089182e355f98d497ffd6f Mon Sep 17 00:00:00 2001
From: Marco Biasini <marco.biasini@unibas.ch>
Date: Tue, 31 May 2011 18:05:23 +0200
Subject: [PATCH] fix MergePairwiseAlignments for reference sequences with
trailing gaps
---
.../seq/alg/src/merge_pairwise_alignments.cc | 4 +++
.../tests/test_merge_pairwise_alignments.cc | 26 +++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/modules/seq/alg/src/merge_pairwise_alignments.cc b/modules/seq/alg/src/merge_pairwise_alignments.cc
index 5636f32c9..9ebdcd142 100644
--- a/modules/seq/alg/src/merge_pairwise_alignments.cc
+++ b/modules/seq/alg/src/merge_pairwise_alignments.cc
@@ -141,9 +141,13 @@ AlignmentHandle MergePairwiseAlignments(const AlignmentList& pairwise_alns,
AlignmentHandle merged=CreateAlignment();
merged.AddSequence(shift_reference(ref_seq, shifts));
+ size_t ref_len=merged.GetSequence(0).GetLength();
for (AlignmentList::const_iterator i=pairwise_alns.begin(),
e=pairwise_alns.end(); i!=e; ++i) {
SequenceHandle new_seq=realign_sequence(*i, shifts);
+ for (size_t j=new_seq.GetLength(); j<ref_len; ++j) {
+ new_seq.Append('-');
+ }
merged.AddSequence(new_seq);
}
return merged;
diff --git a/modules/seq/alg/tests/test_merge_pairwise_alignments.cc b/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
index 3f67ac5d1..f89715ade 100644
--- a/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
+++ b/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
@@ -107,4 +107,30 @@ BOOST_AUTO_TEST_CASE(merge_pairwise_alignments_three)
BOOST_CHECK_EQUAL(seqs[1].GetString(), "xyabcdefghijk");
BOOST_CHECK_EQUAL(seqs[2].GetString(), "-zabcdefghijk");
}
+
+BOOST_AUTO_TEST_CASE(merge_pairwise_alignments_four)
+{
+ SequenceHandle ref=CreateSequence("REF", "abcdefghijk");
+ SequenceHandle s1=CreateSequence("S1", "abcdefghijk--");
+ SequenceHandle s2=CreateSequence("S2", "abcdefghijkxy");
+ AlignmentHandle aln1=CreateAlignment();
+ aln1.AddSequence(s1);
+ aln1.AddSequence(s2);
+
+ SequenceHandle s3=CreateSequence("S1", "-abcdefghijk");
+ SequenceHandle s4=CreateSequence("S2", "zabcdefghijk");
+
+ AlignmentHandle aln2=CreateAlignment();
+ aln2.AddSequence(s3);
+ aln2.AddSequence(s4);
+ AlignmentList l;
+ l.push_back(aln1);
+ l.push_back(aln2);
+ AlignmentHandle m=alg::MergePairwiseAlignments(l, ref);
+ ConstSequenceList seqs=m.GetSequences();
+ BOOST_CHECK_EQUAL(seqs[0].GetString(), "-abcdefghijk--");
+ BOOST_CHECK_EQUAL(seqs[1].GetString(), "-abcdefghijkxy");
+ BOOST_CHECK_EQUAL(seqs[2].GetString(), "zabcdefghijk--");
+}
+
BOOST_AUTO_TEST_SUITE_END()
--
GitLab