Fixed divide by zero bug when downsampler goes over regions where reads are all filtered out. Added Guillermo's bug report as an integration test
This commit is contained in:
parent
78c1556186
commit
c6132ebe26
|
|
@ -536,6 +536,10 @@ public class SlidingWindow {
|
||||||
* @return a list of reads selected by the downsampler to cover the window to at least the desired coverage
|
* @return a list of reads selected by the downsampler to cover the window to at least the desired coverage
|
||||||
*/
|
*/
|
||||||
protected List<GATKSAMRecord> downsampleVariantRegion(final List<GATKSAMRecord> allReads) {
|
protected List<GATKSAMRecord> downsampleVariantRegion(final List<GATKSAMRecord> allReads) {
|
||||||
|
int nReads = allReads.size();
|
||||||
|
if (nReads == 0)
|
||||||
|
return allReads;
|
||||||
|
|
||||||
double fraction = 100 / allReads.size();
|
double fraction = 100 / allReads.size();
|
||||||
if (fraction >= 1)
|
if (fraction >= 1)
|
||||||
return allReads;
|
return allReads;
|
||||||
|
|
@ -545,6 +549,7 @@ public class SlidingWindow {
|
||||||
return downsampler.consumeDownsampledItems();
|
return downsampler.consumeDownsampledItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Properly closes a Sliding Window, finalizing all consensus and variant
|
* Properly closes a Sliding Window, finalizing all consensus and variant
|
||||||
* regions that still exist regardless of being able to fulfill the
|
* regions that still exist regardless of being able to fulfill the
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ public class SyntheticRead {
|
||||||
* @param base the base to add
|
* @param base the base to add
|
||||||
* @param count number of reads with this base
|
* @param count number of reads with this base
|
||||||
*/
|
*/
|
||||||
@Requires("count < Byte.MAX_VALUE")
|
@Requires("count <= Byte.MAX_VALUE")
|
||||||
public void add(BaseIndex base, byte count, byte qual, byte insQual, byte delQual, double mappingQuality) {
|
public void add(BaseIndex base, byte count, byte qual, byte insQual, byte delQual, double mappingQuality) {
|
||||||
counts.add(count);
|
counts.add(count);
|
||||||
bases.add(base);
|
bases.add(base);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ public class ReduceReadsIntegrationTest extends WalkerTest {
|
||||||
final String DELETION_BAM = validationDataLocation + "filtered_deletion_for_reduce_reads.bam";
|
final String DELETION_BAM = validationDataLocation + "filtered_deletion_for_reduce_reads.bam";
|
||||||
final String STASH_BAM = validationDataLocation + "ReduceReadsStashBug.bam";
|
final String STASH_BAM = validationDataLocation + "ReduceReadsStashBug.bam";
|
||||||
final String STASH_L = " -L 14:73718184-73718284 -L 14:73718294-73718330 -L 14:73718360-73718556";
|
final String STASH_L = " -L 14:73718184-73718284 -L 14:73718294-73718330 -L 14:73718360-73718556";
|
||||||
|
final String DIVIDEBYZERO_BAM = validationDataLocation + "ReduceReadsDivideByZeroBug.bam";
|
||||||
|
final String DIVIDEBYZERO_L = " -L " + validationDataLocation + "ReduceReadsDivideByZeroBug.intervals";
|
||||||
final String L = " -L 20:10,100,000-10,120,000 ";
|
final String L = " -L 20:10,100,000-10,120,000 ";
|
||||||
|
|
||||||
private void RRTest(String testName, String args, String md5) {
|
private void RRTest(String testName, String args, String md5) {
|
||||||
|
|
@ -64,5 +66,16 @@ public class ReduceReadsIntegrationTest extends WalkerTest {
|
||||||
String base = String.format("-T ReduceReads %s -npt -R %s -I %s", STASH_L, REF, STASH_BAM) + " -o %s ";
|
String base = String.format("-T ReduceReads %s -npt -R %s -I %s", STASH_L, REF, STASH_BAM) + " -o %s ";
|
||||||
executeTest("testAddingReadAfterTailingTheStash", new WalkerTestSpec(base, Arrays.asList("886b43e1f26ff18425814dc7563931c6")));
|
executeTest("testAddingReadAfterTailingTheStash", new WalkerTestSpec(base, Arrays.asList("886b43e1f26ff18425814dc7563931c6")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Divide by zero bug reported by GdA and users in the forum. Happens when the downsampler goes over a region where all reads get
|
||||||
|
* filtered out.
|
||||||
|
*/
|
||||||
|
@Test(enabled = true)
|
||||||
|
public void testDivideByZero() {
|
||||||
|
String base = String.format("-T ReduceReads %s -npt -R %s -I %s", DIVIDEBYZERO_L, REF, DIVIDEBYZERO_BAM) + " -o %s ";
|
||||||
|
executeTest("testDivideByZero", new WalkerTestSpec(base, Arrays.asList("137505c3efd1e9f8d9209dbdf8419ff9")));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue