diff --git a/src/main/java/picard/analysis/directed/TargetMetricsCollector.java b/src/main/java/picard/analysis/directed/TargetMetricsCollector.java index fc91fda92..e11a6f234 100644 --- a/src/main/java/picard/analysis/directed/TargetMetricsCollector.java +++ b/src/main/java/picard/analysis/directed/TargetMetricsCollector.java @@ -538,7 +538,13 @@ public void acceptRecord(final SAMRecord record) { final int numOverlappingBasesToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record); rec = SAMUtils.clipOverlappingAlignedBases(record, numOverlappingBasesToClip, noSideEffects); metrics.PCT_EXC_OVERLAP += numOverlappingBasesToClip; - } else rec = record; + + // If clipping resulted in the read becoming unmapped (because all bases were clipped), return here + if (rec.getReadUnmappedFlag()) return; + } + else { + rec = record; + } // Find the target overlaps final Set coveredTargets = new HashSet<>(); diff --git a/src/test/java/picard/analysis/directed/CollectHsMetricsTest.java b/src/test/java/picard/analysis/directed/CollectHsMetricsTest.java index 7ac2b35bb..287d59cfc 100644 --- a/src/test/java/picard/analysis/directed/CollectHsMetricsTest.java +++ b/src/test/java/picard/analysis/directed/CollectHsMetricsTest.java @@ -32,7 +32,7 @@ public String getCommandLineProgramName() { // test that read 2 (with mapping quality 1) is filtered out with minimum mapping quality 2 {TEST_DIR + "/lowmapq.sam", intervals, 2, 0, true, 2, 202, 0, 0.0, 0.505, 0.0, 1000}, // test that we clip overlapping bases - {TEST_DIR + "/overlapping.sam", intervals, 0, 0, true, 2, 202, 0, 0.5, 0.505, 0.505, 1000}, + {TEST_DIR + "/overlapping.sam", intervals, 0, 0, true, 2, 202, 0, 0.5, 0.505, 0, 1000}, // test that we do not clip overlapping bases {TEST_DIR + "/overlapping.sam", intervals, 0, 0, false, 2, 202, 0, 0.0, 0.505, 0.505, 1000}, // A read 10 base pairs long. two intervals: one maps identically to the read, other does not overlap at all