Merge pull request #157 from broadinstitute/rp_smith_waterman_failing_test

Bug fix in SWPairwiseAlignment.
This commit is contained in:
Mark DePristo 2013-04-10 13:54:25 -07:00
commit 7d267639d8
3 changed files with 18 additions and 25 deletions

View File

@ -72,22 +72,22 @@ public class SWPairwiseAlignmentUnitTest extends BaseTest {
Assert.assertEquals(sw.getCigar().toString(), expectedCigar); Assert.assertEquals(sw.getCigar().toString(), expectedCigar);
} }
// TODO @DataProvider(name = "OddNoAlignment")
// TODO public Object[][] makeOddNoAlignment() {
// TODO this example demonstrates some kind of failure mode of SW that results in the read not being aligned List<Object[]> tests = new ArrayList<Object[]>();
// TODO to the reference at all. It has something to do with the specific parameters provided to the
// TODO SW code. With the default parameters the result is the one expected. With the specified parameters final String ref1 = "AAAGACTACTG";
// TODO the code fails final String read1 = "AACGGACACTG";
// TODO tests.add(new Object[]{ref1, read1, 5.0, -10.0, -22.0, -1.2, 1, "2M2I3M1D4M"});
// TODO tests.add(new Object[]{ref1, read1, 20.0, -5.0, -30.0, -2.2, 0, "11M"});
@Test(enabled = false)
public void testOddNoAlignment() { return tests.toArray(new Object[][]{});
final String reference = "AAAGACTACTG"; }
final String read = "AACGGACACTG";
final int expectedStart = 0; @Test(dataProvider = "OddNoAlignment", enabled = true)
final String expectedCigar = "11M"; public void testOddNoAlignment(final String reference, final String read, final double match, final double mismatch, final double gap, final double gap_extend,
final SWPairwiseAlignment sw = new SWPairwiseAlignment(reference.getBytes(), read.getBytes(), 5.0, -10.0, -22.0, -1.2); final int expectedStart, final String expectedCigar) {
sw.printAlignment(reference.getBytes(), read.getBytes()); final SWPairwiseAlignment sw = new SWPairwiseAlignment(reference.getBytes(), read.getBytes(), match, mismatch, gap, gap_extend);
Assert.assertEquals(sw.getAlignmentStart2wrt1(), expectedStart); Assert.assertEquals(sw.getAlignmentStart2wrt1(), expectedStart);
Assert.assertEquals(sw.getCigar().toString(), expectedCigar); Assert.assertEquals(sw.getCigar().toString(), expectedCigar);
} }

View File

@ -205,10 +205,9 @@ public final class SWPairwiseAlignment {
private void calculateCigar(int n, int m, double [] sw, int [] btrack) { private void calculateCigar(int n, int m, double [] sw, int [] btrack) {
// p holds the position we start backtracking from; we will be assembling a cigar in the backwards order // p holds the position we start backtracking from; we will be assembling a cigar in the backwards order
//PrimitivePair.Int p = new PrimitivePair.Int();
int p1 = 0, p2 = 0; int p1 = 0, p2 = 0;
double maxscore = 0.0; double maxscore = Double.NEGATIVE_INFINITY; // sw scores are allowed to be negative
int segment_length = 0; // length of the segment (continuous matches, insertions or deletions) int segment_length = 0; // length of the segment (continuous matches, insertions or deletions)
// look for largest score. we use >= combined with the traversal direction // look for largest score. we use >= combined with the traversal direction
@ -259,7 +258,7 @@ public final class SWPairwiseAlignment {
// move to next best location in the sw matrix: // move to next best location in the sw matrix:
switch( new_state ) { switch( new_state ) {
case MSTATE: data_offset -= (m+2); p1--; p2--; break; // move back along the diag in th esw matrix case MSTATE: data_offset -= (m+2); p1--; p2--; break; // move back along the diag in the sw matrix
case ISTATE: data_offset -= step_length; p2 -= step_length; break; // move left case ISTATE: data_offset -= step_length; p2 -= step_length; break; // move left
case DSTATE: data_offset -= (m+1)*step_length; p1 -= step_length; break; // move up case DSTATE: data_offset -= (m+1)*step_length; p1 -= step_length; break; // move up
} }

View File

@ -127,12 +127,6 @@ public class HaplotypeBAMWriterUnitTest extends BaseTest {
} }
} }
// test that reads without a good alignment to hap get excluded
{
final GATKSAMRecord read = makeRead("NNNNN");
tests.add(new Object[]{read, allM, 10, -1, null});
}
// example case of bad alignment because SW doesn't necessarily left-align indels // example case of bad alignment because SW doesn't necessarily left-align indels
{ {
final String hap = "ACTGTGGGTTCCTCTTATTTTATTTCTACATCAATGTTCATATTTAACTTATTATTTTATCTTATTTTTAAATTTCTTTTATGTTGAGCCTTGATGAAAGCCATAGGTTCTCTCATATAATTGTATGTGTATGTATGTATATGTACATAATATATACATATATGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTGTATTACATAATATATACATATATGTATATATTATGTATATGTACATAATATATACATATATG"; final String hap = "ACTGTGGGTTCCTCTTATTTTATTTCTACATCAATGTTCATATTTAACTTATTATTTTATCTTATTTTTAAATTTCTTTTATGTTGAGCCTTGATGAAAGCCATAGGTTCTCTCATATAATTGTATGTGTATGTATGTATATGTACATAATATATACATATATGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTGTATTACATAATATATACATATATGTATATATTATGTATATGTACATAATATATACATATATG";