diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnEdge.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnEdge.java index 0890ac20c..287acafb3 100755 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnEdge.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnEdge.java @@ -2,6 +2,9 @@ package org.broadinstitute.sting.gatk.walkers.haplotypecaller; import org.jgrapht.graph.DefaultDirectedGraph; +import java.io.Serializable; +import java.util.Comparator; + /** * Created by IntelliJ IDEA. * User: ebanks @@ -9,7 +12,7 @@ import org.jgrapht.graph.DefaultDirectedGraph; */ // simple edge class for connecting nodes in the graph -public class DeBruijnEdge implements Comparable { +public class DeBruijnEdge { private int multiplicity; private boolean isRef; @@ -53,8 +56,10 @@ public class DeBruijnEdge implements Comparable { return (graph.getEdgeSource(this).equals(graph2.getEdgeSource(edge))) && (graph.getEdgeTarget(this).equals(graph2.getEdgeTarget(edge))); } - @Override - public int compareTo( final DeBruijnEdge that ) { - return this.multiplicity - that.multiplicity; + public static class EdgeWeightComparator implements Comparator, Serializable { + @Override + public int compare(final DeBruijnEdge edge1, final DeBruijnEdge edge2) { + return edge1.multiplicity - edge2.multiplicity; + } } } diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnVertex.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnVertex.java index 39833613d..4da3251bc 100755 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnVertex.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/DeBruijnVertex.java @@ -14,7 +14,7 @@ public class DeBruijnVertex { public final int kmer; public DeBruijnVertex( final byte[] sequence, final int kmer ) { - this.sequence = sequence; + this.sequence = sequence.clone(); this.kmer = kmer; } @@ -37,7 +37,7 @@ public class DeBruijnVertex { } public byte[] getSequence() { - return sequence; + return sequence.clone(); } public byte[] getSuffix() { diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java index 0ef1a13a4..f7575439b 100755 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java @@ -4,6 +4,7 @@ import org.apache.commons.lang.ArrayUtils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.jgrapht.graph.DefaultDirectedGraph; +import java.io.Serializable; import java.util.*; /** @@ -76,13 +77,15 @@ public class KBestPaths { } } - protected static class PathComparatorTotalScore implements Comparator { + protected static class PathComparatorTotalScore implements Comparator, Serializable { + @Override public int compare(final Path path1, final Path path2) { return path1.totalScore - path2.totalScore; } } - //protected static class PathComparatorLowestEdge implements Comparator { + //protected static class PathComparatorLowestEdge implements Comparator, Serializable { + // @Override // public int compare(final Path path1, final Path path2) { // return path2.lowestEdge - path1.lowestEdge; // } @@ -124,7 +127,7 @@ public class KBestPaths { // recursively run DFS final ArrayList edgeArrayList = new ArrayList(); edgeArrayList.addAll(graph.outgoingEdgesOf(path.lastVertex)); - Collections.sort(edgeArrayList); + Collections.sort(edgeArrayList, new DeBruijnEdge.EdgeWeightComparator()); Collections.reverse(edgeArrayList); for ( final DeBruijnEdge edge : edgeArrayList ) { // make sure the edge is not already in the path diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/LikelihoodCalculationEngine.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/LikelihoodCalculationEngine.java index 8d862e916..d04c1a9e2 100644 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/LikelihoodCalculationEngine.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/LikelihoodCalculationEngine.java @@ -78,10 +78,10 @@ public class LikelihoodCalculationEngine { PairHMM.initializeArrays(matchMetricArray, XMetricArray, YMetricArray, X_METRIC_LENGTH); // for each sample's reads - for( final String sample : perSampleReadList.keySet() ) { + for( final Map.Entry> sampleEntry : perSampleReadList.entrySet() ) { //if( DEBUG ) { System.out.println("Evaluating sample " + sample + " with " + perSampleReadList.get( sample ).size() + " passing reads"); } // evaluate the likelihood of the reads given those haplotypes - computeReadLikelihoods( haplotypes, perSampleReadList.get(sample), sample, matchMetricArray, XMetricArray, YMetricArray ); + computeReadLikelihoods( haplotypes, sampleEntry.getValue(), sampleEntry.getKey(), matchMetricArray, XMetricArray, YMetricArray ); } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java index 979e0f2d6..67de427e8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java @@ -12,6 +12,7 @@ import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import org.broadinstitute.sting.utils.activeregion.ActiveRegion; import org.broadinstitute.sting.utils.activeregion.ActivityProfile; import org.broadinstitute.sting.utils.activeregion.ActivityProfileResult; import org.broadinstitute.sting.utils.pileup.PileupElement; @@ -31,7 +32,7 @@ public class TraverseActiveRegions extends TraversalEngine workQueue = new LinkedList(); + private final LinkedList workQueue = new LinkedList(); private final LinkedHashSet myReads = new LinkedHashSet(); @Override @@ -110,18 +111,18 @@ public class TraverseActiveRegions extends TraversalEngine activeRegions = bandPassFiltered.createActiveRegions( activeRegionExtension, maxRegionSize ); + final List activeRegions = bandPassFiltered.createActiveRegions( activeRegionExtension, maxRegionSize ); // add active regions to queue of regions to process // first check if can merge active regions over shard boundaries if( !activeRegions.isEmpty() ) { if( !workQueue.isEmpty() ) { - final org.broadinstitute.sting.utils.activeregion.ActiveRegion last = workQueue.getLast(); - final org.broadinstitute.sting.utils.activeregion.ActiveRegion first = activeRegions.get(0); + final ActiveRegion last = workQueue.getLast(); + final ActiveRegion first = activeRegions.get(0); if( last.isActive == first.isActive && last.getLocation().contiguousP(first.getLocation()) && last.getLocation().size() + first.getLocation().size() <= maxRegionSize ) { workQueue.removeLast(); activeRegions.remove(first); - workQueue.add( new org.broadinstitute.sting.utils.activeregion.ActiveRegion(last.getLocation().union(first.getLocation()), first.isActive, this.engine.getGenomeLocParser(), activeRegionExtension) ); + workQueue.add( new ActiveRegion(last.getLocation().union(first.getLocation()), first.isActive, this.engine.getGenomeLocParser(), activeRegionExtension) ); } } workQueue.addAll( activeRegions ); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HaplotypeScore.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HaplotypeScore.java index b784bfe08..eedb8cbd7 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HaplotypeScore.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HaplotypeScore.java @@ -48,6 +48,7 @@ import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import java.io.Serializable; import java.util.*; /** @@ -111,7 +112,7 @@ public class HaplotypeScore extends InfoFieldAnnotation implements StandardAnnot return map; } - private static class HaplotypeComparator implements Comparator { + private static class HaplotypeComparator implements Comparator, Serializable { public int compare(Haplotype a, Haplotype b) { if (a.getQualitySum() < b.getQualitySum()) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/bqsr/StandardRecalibrationEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/bqsr/StandardRecalibrationEngine.java index 08c7da754..aec1bf7a8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/bqsr/StandardRecalibrationEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/bqsr/StandardRecalibrationEngine.java @@ -42,7 +42,7 @@ public class StandardRecalibrationEngine implements RecalibrationEngine, PublicP protected RecalibrationTables recalibrationTables; public void initialize(final Covariate[] covariates, final RecalibrationTables recalibrationTables) { - this.covariates = covariates; + this.covariates = covariates.clone(); this.recalibrationTables = recalibrationTables; } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java index 9228dc375..042d4741d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java @@ -29,10 +29,7 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.PrintStream; +import java.io.*; import java.util.*; /** @@ -41,7 +38,7 @@ import java.util.*; * Date: Mar 10, 2011 */ -public class Tranche implements Comparable { +public class Tranche { private static final int CURRENT_VERSION = 5; public double ts, minVQSLod, knownTiTv, novelTiTv; @@ -83,10 +80,14 @@ public class Tranche implements Comparable { return accessibleTruthSites > 0 ? callsAtTruthSites / (1.0*accessibleTruthSites) : 0.0; } - public int compareTo(Tranche other) { - return Double.compare(this.ts, other.ts); + public static class TrancheTruthSensitivityComparator implements Comparator, Serializable { + @Override + public int compare(final Tranche tranche1, final Tranche tranche2) { + return Double.compare(tranche1.ts, tranche2.ts); + } } + @Override public String toString() { return String.format("Tranche ts=%.2f minVQSLod=%.4f known=(%d @ %.4f) novel=(%d @ %.4f) truthSites(%d accessible, %d called), name=%s]", ts, minVQSLod, numKnown, knownTiTv, numNovel, novelTiTv, accessibleTruthSites, callsAtTruthSites, name); @@ -102,7 +103,7 @@ public class Tranche implements Comparable { final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); final PrintStream stream = new PrintStream(bytes); - Collections.sort(tranches); + Collections.sort( tranches, new TrancheTruthSensitivityComparator() ); stream.println("# Variant quality score tranches file"); stream.println("# Version number " + CURRENT_VERSION); @@ -183,7 +184,7 @@ public class Tranche implements Comparable { } } - Collections.sort(tranches); + Collections.sort( tranches, new TrancheTruthSensitivityComparator() ); return tranches; } catch( FileNotFoundException e ) { throw new UserException.CouldNotReadInputFile(f, e); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrancheManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrancheManager.java index af0778399..58b4e4fc7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrancheManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrancheManager.java @@ -146,7 +146,7 @@ public class TrancheManager { public static List findTranches( final ArrayList data, final double[] trancheThresholds, final SelectionMetric metric, final VariantRecalibratorArgumentCollection.Mode model, final File debugFile ) { logger.info(String.format("Finding %d tranches for %d variants", trancheThresholds.length, data.size())); - Collections.sort(data); + Collections.sort( data, new VariantDatum.VariantDatumLODComparator() ); metric.calculateRunningMetric(data); if ( debugFile != null) { writeTranchesDebuggingInfo(debugFile, data, metric); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDataManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDataManager.java index 1f06cc249..aacd987d5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDataManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDataManager.java @@ -158,7 +158,7 @@ public class VariantDataManager { logger.info( "Found " + numBadSitesAdded + " variants overlapping bad sites training tracks." ); // Next sort the variants by the LOD coming from the positive model and add to the list the bottom X percent of variants - Collections.sort( data ); + Collections.sort( data, new VariantDatum.VariantDatumLODComparator() ); final int numToAdd = Math.max( minimumNumber - trainingData.size(), Math.round((float)bottomPercentage * data.size()) ); if( numToAdd > data.size() ) { throw new UserException.BadInput( "Error during negative model training. Minimum number of variants to use in training is larger than the whole call set. One can attempt to lower the --minNumBadVariants arugment but this is unsafe." ); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDatum.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDatum.java index a85129d78..7b3b0d17d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDatum.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantDatum.java @@ -27,13 +27,16 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.broadinstitute.sting.utils.GenomeLoc; +import java.io.Serializable; +import java.util.Comparator; + /** * Created by IntelliJ IDEA. * User: rpoplin * Date: Mar 4, 2011 */ -public class VariantDatum implements Comparable { +public class VariantDatum { public double[] annotations; public boolean[] isNull; @@ -52,8 +55,10 @@ public class VariantDatum implements Comparable { public int worstAnnotation; public MultivariateGaussian assignment; // used in K-means implementation - @Override - public int compareTo( final VariantDatum other ) { - return Double.compare(this.lod, other.lod); + public static class VariantDatumLODComparator implements Comparator, Serializable { + @Override + public int compare(final VariantDatum datum1, final VariantDatum datum2) { + return Double.compare(datum1.lod, datum2.lod); + } } } diff --git a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java index fcde1f419..befd24307 100755 --- a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java @@ -55,22 +55,22 @@ public class Haplotype { * @param bases bases * @param qual qual */ - public Haplotype(byte[] bases, int qual) { - this.bases = bases; + public Haplotype( final byte[] bases, final int qual ) { + this.bases = bases.clone(); quals = new double[bases.length]; Arrays.fill(quals, (double)qual); } - public Haplotype(byte[] bases, double[] quals) { - this.bases = bases; - this.quals = quals; + public Haplotype( final byte[] bases, final double[] quals ) { + this.bases = bases.clone(); + this.quals = quals.clone(); } - public Haplotype(byte[] bases) { + public Haplotype( final byte[] bases ) { this(bases, 0); } - public Haplotype(byte[] bases, GenomeLoc loc) { + public Haplotype( final byte[] bases, final GenomeLoc loc ) { this(bases); this.genomeLocation = loc; } @@ -140,10 +140,10 @@ public class Haplotype { } public double[] getQuals() { - return quals; + return quals.clone(); } public byte[] getBases() { - return bases; + return bases.clone(); } public long getStartPosition() { diff --git a/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java b/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java index d1bc75583..8339e38c9 100755 --- a/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java +++ b/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java @@ -11,6 +11,7 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.StingException; +import java.io.Serializable; import java.util.Comparator; import java.util.TreeSet; @@ -434,12 +435,14 @@ public class MannWhitneyU { * A comparator class which uses dithering on tie-breaking to ensure that the internal treeset drops no values * and to ensure that rank ties are broken at random. */ - private class DitheringComparator implements Comparator> { + private static class DitheringComparator implements Comparator>, Serializable { public DitheringComparator() {} + @Override public boolean equals(Object other) { return false; } + @Override public int compare(Pair left, Pair right) { double comp = Double.compare(left.first.doubleValue(),right.first.doubleValue()); if ( comp > 0 ) { return 1; } diff --git a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java index 8e660350f..6756c1c02 100644 --- a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java +++ b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java @@ -15,7 +15,7 @@ import java.util.ArrayList; * Date: 1/4/12 */ -public class ActiveRegion implements HasGenomeLocation, Comparable { +public class ActiveRegion implements HasGenomeLocation { private final ArrayList reads = new ArrayList(); private final GenomeLoc activeRegionLoc; @@ -73,10 +73,6 @@ public class ActiveRegion implements HasGenomeLocation, Comparable Math.min(referenceReader.getSequenceDictionary().getSequence(fullExtentReferenceLoc.getContig()).getSequenceLength(), fullExtentReferenceLoc.getStop() + padding) ).getBases(); } - @Override - public int compareTo( final ActiveRegion other ) { - return this.getLocation().compareTo(other.getLocation()); - } @Override public GenomeLoc getLocation() { return activeRegionLoc; } @@ -97,4 +93,19 @@ public class ActiveRegion implements HasGenomeLocation, Comparable if ( extendedLoc.compareTo(other.extendedLoc) != 0 ) return false; return true; } + + /** + * A comparator class which is used to sort ActiveRegions by their start location + */ + /* + public static class ActiveRegionStartLocationComparator implements Comparator { + + public ActiveRegionStartLocationComparator() {} + + @Override + public int compare(final ActiveRegion left, final ActiveRegion right) { + return left.getLocation().compareTo(right.getLocation()); + } + } + */ } \ No newline at end of file