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.
This commit is contained in:
Mauricio Carneiro 2011-08-16 14:18:05 -04:00
parent b135565183
commit 07c1e113cd
1 changed files with 13 additions and 9 deletions

View File

@ -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) {