From 5e234608c3b1601fa40264650c29ad0b62d69ed4 Mon Sep 17 00:00:00 2001 From: tfenne Date: Tue, 4 Apr 2017 13:20:03 -0400 Subject: [PATCH] Fix CollectHsMetrics and CollectTargetedPcrMetrics to correctly handle read pairs that are fully overlapped when CLIP_OVERLAPPING_READS=true. --- .../java/picard/analysis/directed/TargetMetricsCollector.java | 8 +++++++- src/test/java/picard/analysis/directed/CollectHsMetricsTest.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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