From 413983acc8b63d0b252cdad0f88d97378fe3ad90 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 15 Jul 2022 16:12:09 -0400 Subject: [PATCH 1/2] added a slightly better read filtering message --- .../hellbender/engine/filters/CountingReadFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java b/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java index 51662ebeb4d..5a1026d1877 100644 --- a/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java +++ b/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java @@ -201,6 +201,7 @@ public void resetFilteredCount() { protected static final class CountingAndReadFilter extends CountingBinopReadFilter { private static final long serialVersionUID = 1L; + private long totalCount = 0; private CountingAndReadFilter(final CountingReadFilter lhs, final CountingReadFilter rhs) { super(lhs, rhs); @@ -212,6 +213,7 @@ public boolean test(final GATKRead read) { if (!accept) { filteredCount++; } + totalCount++; return accept; } @@ -249,7 +251,7 @@ private String getSummaryLineForLevelAllAndsSimplified() { } } - summaryLine.append(this.getFilteredCount() + " total reads filtered"); + summaryLine.append(this.getFilteredCount() + " total reads filtered out of "+ this.totalCount+ " reads processed"); return summaryLine.toString(); } From 7791882a0c2b8afa838005bd1d8f2d9b4b1ca7f7 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 19 Jul 2022 10:18:39 -0400 Subject: [PATCH 2/2] updating the tests to reflect the new behavior around tracking total reads on the and filter --- .../engine/filters/CountingReadFilter.java | 2 +- .../filters/CountingReadFilterUnitTest.java | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java b/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java index 5a1026d1877..cdaf4c0ddbc 100644 --- a/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java +++ b/src/main/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilter.java @@ -201,7 +201,7 @@ public void resetFilteredCount() { protected static final class CountingAndReadFilter extends CountingBinopReadFilter { private static final long serialVersionUID = 1L; - private long totalCount = 0; + protected long totalCount = 0; private CountingAndReadFilter(final CountingReadFilter lhs, final CountingReadFilter rhs) { super(lhs, rhs); diff --git a/src/test/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilterUnitTest.java b/src/test/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilterUnitTest.java index 9d8b649c0a4..b196b9b56b1 100644 --- a/src/test/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilterUnitTest.java +++ b/src/test/java/org/broadinstitute/hellbender/engine/filters/CountingReadFilterUnitTest.java @@ -329,34 +329,37 @@ public Object[][] testAndFilterSummaryLineDataProvider() { final CountingReadFilter secondOfPair2 = new CountingReadFilter(ReadFilterLibrary.SECOND_OF_PAIR); secondOfPair2.filteredCount = 2; - final CountingReadFilter firstOfPair1AndSecondOfPair2 = firstOfPair1.and(secondOfPair2); + final CountingReadFilter.CountingAndReadFilter firstOfPair1AndSecondOfPair2 = (CountingReadFilter.CountingAndReadFilter)firstOfPair1.and(secondOfPair2); firstOfPair1AndSecondOfPair2.filteredCount = 3; + firstOfPair1AndSecondOfPair2.totalCount = 3; final String andWithCountsAbove0 = "1 read(s) filtered by: FirstOfPairReadFilter \n" + "2 read(s) filtered by: SecondOfPairReadFilter \n" - + "3 total reads filtered"; + + "3 total reads filtered out of 3 reads processed"; - final CountingReadFilter firstOfPair1AndMappingQuality0 = firstOfPair1.and(mappingQuality0); + final CountingReadFilter.CountingAndReadFilter firstOfPair1AndMappingQuality0 = (CountingReadFilter.CountingAndReadFilter)firstOfPair1.and(mappingQuality0); firstOfPair1AndMappingQuality0.filteredCount = 1; + firstOfPair1AndMappingQuality0.totalCount = 3; final String andWith1CountAbove0 = "1 read(s) filtered by: FirstOfPairReadFilter \n" + "0 read(s) filtered by: MappingQualityAvailableReadFilter \n" - + "1 total reads filtered"; + + "1 total reads filtered out of 3 reads processed"; - final CountingReadFilter mappingQuality0AndGoodCigar0 = mappingQuality0.and(goodCigar0); + final CountingReadFilter.CountingAndReadFilter mappingQuality0AndGoodCigar0 = (CountingReadFilter.CountingAndReadFilter)mappingQuality0.and(goodCigar0); mappingQuality0AndGoodCigar0.filteredCount = 0; final String andWithBoth0Counts = "0 read(s) filtered by: MappingQualityAvailableReadFilter \n" + "0 read(s) filtered by: GoodCigarReadFilter \n" - + "0 total reads filtered"; + + "0 total reads filtered out of 0 reads processed"; final CountingReadFilter firstOfPair1AndMappingQuality0AndGoodCigar0 = firstOfPair1AndMappingQuality0.and(goodCigar0); firstOfPair1AndMappingQuality0AndGoodCigar0.filteredCount = 1; - final CountingReadFilter firstOfPair1AndMappingQuality0AndGoodCigar0AndSecondOfPair2 = firstOfPair1AndMappingQuality0AndGoodCigar0.and(secondOfPair2); + final CountingReadFilter.CountingAndReadFilter firstOfPair1AndMappingQuality0AndGoodCigar0AndSecondOfPair2 = (CountingReadFilter.CountingAndReadFilter)firstOfPair1AndMappingQuality0AndGoodCigar0.and(secondOfPair2); firstOfPair1AndMappingQuality0AndGoodCigar0AndSecondOfPair2.filteredCount = 3; + firstOfPair1AndMappingQuality0AndGoodCigar0AndSecondOfPair2.totalCount = 5; final String multiAndWithMixCounts = "1 read(s) filtered by: FirstOfPairReadFilter \n" + "0 read(s) filtered by: MappingQualityAvailableReadFilter \n" + "0 read(s) filtered by: GoodCigarReadFilter \n" + "2 read(s) filtered by: SecondOfPairReadFilter \n" - + "3 total reads filtered"; + + "3 total reads filtered out of 5 reads processed"; final CountingReadFilter firstOfPair1AndMappingQuality0AndGoodCigar0OrSecondOfPair2 = firstOfPair1AndMappingQuality0AndGoodCigar0.or(secondOfPair2); firstOfPair1AndMappingQuality0AndGoodCigar0OrSecondOfPair2.filteredCount = 3;