Optimized interval iteration
Using a TreedSet to manipulate getToolkit.getIntervals() and being smart about which intervals to test makes interval clipping O(1) instead of O(n).
This commit is contained in:
parent
5c9b659c02
commit
3c7b7f74ef
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue