Fixed interval navigation bug.
If a read was hard clipped away from the current interval, all subsequent reads within that interval (not hardclipped) would be filtered out. Fixed.
This commit is contained in:
parent
9afccd11b1
commit
b76dbc72f0
|
|
@ -157,7 +157,7 @@ public class ReadUtils {
|
||||||
* |----------------| (interval)
|
* |----------------| (interval)
|
||||||
* <--------> (read)
|
* <--------> (read)
|
||||||
*/
|
*/
|
||||||
public enum ReadAndIntervalOverlap {NO_OVERLAP_CONTIG, NO_OVERLAP_LEFT, NO_OVERLAP_RIGHT, OVERLAP_LEFT, OVERLAP_RIGHT, OVERLAP_LEFT_AND_RIGHT, OVERLAP_CONTAINED}
|
public enum ReadAndIntervalOverlap {NO_OVERLAP_CONTIG, NO_OVERLAP_LEFT, NO_OVERLAP_RIGHT, NO_OVERLAP_HARDCLIPPED_LEFT, NO_OVERLAP_HARDCLIPPED_RIGHT, OVERLAP_LEFT, OVERLAP_RIGHT, OVERLAP_LEFT_AND_RIGHT, OVERLAP_CONTAINED}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* God, there's a huge information asymmetry in SAM format:
|
* God, there's a huge information asymmetry in SAM format:
|
||||||
|
|
@ -640,27 +640,35 @@ public class ReadUtils {
|
||||||
*/
|
*/
|
||||||
public static ReadAndIntervalOverlap getReadAndIntervalOverlapType(SAMRecord read, GenomeLoc interval) {
|
public static ReadAndIntervalOverlap getReadAndIntervalOverlapType(SAMRecord read, GenomeLoc interval) {
|
||||||
|
|
||||||
int start = getRefCoordSoftUnclippedStart(read);
|
int sStart = getRefCoordSoftUnclippedStart(read);
|
||||||
int stop = getRefCoordSoftUnclippedEnd(read);
|
int sStop = getRefCoordSoftUnclippedEnd(read);
|
||||||
|
int uStart = read.getUnclippedStart();
|
||||||
|
int uStop = read.getUnclippedEnd();
|
||||||
|
|
||||||
if ( !read.getReferenceName().equals(interval.getContig()) )
|
if ( !read.getReferenceName().equals(interval.getContig()) )
|
||||||
return ReadAndIntervalOverlap.NO_OVERLAP_CONTIG;
|
return ReadAndIntervalOverlap.NO_OVERLAP_CONTIG;
|
||||||
|
|
||||||
else if ( stop < interval.getStart() )
|
else if ( uStop < interval.getStart() )
|
||||||
return ReadAndIntervalOverlap.NO_OVERLAP_LEFT;
|
return ReadAndIntervalOverlap.NO_OVERLAP_LEFT;
|
||||||
|
|
||||||
else if ( start > interval.getStop() )
|
else if ( uStart > interval.getStop() )
|
||||||
return ReadAndIntervalOverlap.NO_OVERLAP_RIGHT;
|
return ReadAndIntervalOverlap.NO_OVERLAP_RIGHT;
|
||||||
|
|
||||||
else if ( (start >= interval.getStart()) &&
|
else if ( sStop < interval.getStart() )
|
||||||
(stop <= interval.getStop()) )
|
return ReadAndIntervalOverlap.NO_OVERLAP_HARDCLIPPED_LEFT;
|
||||||
|
|
||||||
|
else if ( sStart > interval.getStop() )
|
||||||
|
return ReadAndIntervalOverlap.NO_OVERLAP_HARDCLIPPED_RIGHT;
|
||||||
|
|
||||||
|
else if ( (sStart >= interval.getStart()) &&
|
||||||
|
(sStop <= interval.getStop()) )
|
||||||
return ReadAndIntervalOverlap.OVERLAP_CONTAINED;
|
return ReadAndIntervalOverlap.OVERLAP_CONTAINED;
|
||||||
|
|
||||||
else if ( (start < interval.getStart()) &&
|
else if ( (sStart < interval.getStart()) &&
|
||||||
(stop > interval.getStop()) )
|
(sStop > interval.getStop()) )
|
||||||
return ReadAndIntervalOverlap.OVERLAP_LEFT_AND_RIGHT;
|
return ReadAndIntervalOverlap.OVERLAP_LEFT_AND_RIGHT;
|
||||||
|
|
||||||
else if ( (start < interval.getStart()) )
|
else if ( (sStart < interval.getStart()) )
|
||||||
return ReadAndIntervalOverlap.OVERLAP_LEFT;
|
return ReadAndIntervalOverlap.OVERLAP_LEFT;
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue