Merge branch 'master' of ssh://nickel.broadinstitute.org/humgen/gsa-scr1/gsa-engineering/git/unstable

This commit is contained in:
Ryan Poplin 2011-09-28 16:17:39 -04:00
commit 1b1ca80df2
3 changed files with 63 additions and 2 deletions

View File

@ -0,0 +1,56 @@
package org.broadinstitute.sting.utils;
import com.google.java.contract.Ensures;
import com.google.java.contract.Requires;
import java.util.Comparator;
/**
*
* @author Mauricio Carneiro
* @since 9/28/11
*/
public class GenomeLocComparator implements Comparator<GenomeLoc> {
/**
* compares genomeLoc's contigs
*
* @param gl1 the genome loc to compare contigs
* @param gl2 the genome loc to compare contigs
* @return 0 if equal, -1 if gl2.contig is greater, 1 if gl1.contig is greater
*/
@Requires("gl2 != null")
@Ensures("result == 0 || result == 1 || result == -1")
public final int compareContigs( GenomeLoc gl1, GenomeLoc gl2 ) {
if (gl1.contigIndex == gl2.contigIndex)
return 0;
else if (gl1.contigIndex > gl2.contigIndex)
return 1;
return -1;
}
@Requires("gl2 != null")
@Ensures("result == 0 || result == 1 || result == -1")
public int compare ( GenomeLoc gl1, GenomeLoc gl2 ) {
int result = 0;
if ( gl1 == gl2 ) {
result = 0;
}
else if(GenomeLoc.isUnmapped(gl1))
result = 1;
else if(GenomeLoc.isUnmapped(gl2))
result = -1;
else {
final int cmpContig = compareContigs(gl1, gl2);
if ( cmpContig != 0 ) {
result = cmpContig;
} else {
if ( gl1.getStart() < gl2.getStart() ) result = -1;
if ( gl1.getStart() > gl2.getStart() ) result = 1;
}
}
return result;
}
}

View File

@ -93,8 +93,9 @@ public class ReadClipper {
public SAMRecord hardClipBothEndsByReferenceCoordinates(int left, int right) {
if (left == right)
return new SAMRecord(read.getHeader());
this.read = hardClipByReferenceCoordinates(right, -1);
return hardClipByReferenceCoordinates(-1, left);
SAMRecord leftTailRead = hardClipByReferenceCoordinates(right, -1);
ReadClipper clipper = new ReadClipper(leftTailRead);
return clipper.hardClipByReferenceCoordinatesLeftTail(left);
}
public SAMRecord hardClipLowQualEnds(byte lowQual) {

View File

@ -893,6 +893,10 @@ public class ReadUtils {
// base before the deletion (see warning in function contracts)
else if (fallsInsideDeletion && !endsWithinCigar)
readBases += shift - 1;
// If we reached our goal inside a deletion then we must backtrack to the last base before the deletion
else if (fallsInsideDeletion && endsWithinCigar)
readBases--;
}
}