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