From 07c1e113cdcca92f6cfda2651279d3a90425c3a7 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Tue, 16 Aug 2011 14:18:05 -0400 Subject: [PATCH] Fixed interval traversal for previously hard clipped reads. If a read was hard clipped for being low quality and no does not overlap the interval anymore, this read will now be discarded instead of treated as an error by the GATK traversal engine. --- .../sting/utils/sam/ReadUtils.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java index 79967f49f..b25c6c475 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java @@ -148,7 +148,7 @@ public class ReadUtils { * |----------------| (interval) * <--------> (read) */ - public enum ReadAndIntervalOverlap {NO_OVERLAP, LEFT_OVERLAP, RIGHT_OVERLAP, FULL_OVERLAP, CONTAINED} + public enum ReadAndIntervalOverlap {NO_OVERLAP_CONTIG, NO_OVERLAP_LEFT, NO_OVERLAP_RIGHT, OVERLAP_LEFT, OVERLAP_RIGHT, OVERLAP_LEFT_AND_RIGHT, OVERLAP_CONTAINED} /** * God, there's a huge information asymmetry in SAM format: @@ -634,24 +634,28 @@ public class ReadUtils { int start = getSoftUnclippedStart(read); int stop = getSoftUnclippedStop(read); - if ( (!read.getReferenceName().equals(interval.getContig())) || - (stop < interval.getStart()) || - (start > interval.getStop()) ) - return ReadAndIntervalOverlap.NO_OVERLAP; + if ( !read.getReferenceName().equals(interval.getContig()) ) + return ReadAndIntervalOverlap.NO_OVERLAP_CONTIG; + + else if ( stop < interval.getStart() ) + return ReadAndIntervalOverlap.NO_OVERLAP_LEFT; + + else if ( start > interval.getStop() ) + return ReadAndIntervalOverlap.NO_OVERLAP_RIGHT; else if ( (start >= interval.getStart()) && (stop <= interval.getStop()) ) - return ReadAndIntervalOverlap.CONTAINED; + return ReadAndIntervalOverlap.OVERLAP_CONTAINED; else if ( (start < interval.getStart()) && (stop > interval.getStop()) ) - return ReadAndIntervalOverlap.FULL_OVERLAP; + return ReadAndIntervalOverlap.OVERLAP_LEFT_AND_RIGHT; else if ( (start < interval.getStart()) ) - return ReadAndIntervalOverlap.LEFT_OVERLAP; + return ReadAndIntervalOverlap.OVERLAP_LEFT; else - return ReadAndIntervalOverlap.RIGHT_OVERLAP; + return ReadAndIntervalOverlap.OVERLAP_RIGHT; } public static int getSoftUnclippedStart(SAMRecord read) {