diff --git a/modules/seq/alg/src/merge_pairwise_alignments.cc b/modules/seq/alg/src/merge_pairwise_alignments.cc index 5636f32c97af7b96297663f75d6456abf954a4d4..9ebdcd142d970a9aa5c5a7b9a04969efb4f9deeb 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 3f67ac5d161840199ac352ffb09d5bf7c883603d..f89715adeccc627198420c1fc80826502db617a6 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()