From a9472c198061f5127225e8e632a9a97dd5c40985 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Mon, 20 Aug 2012 16:11:45 -0400 Subject: [PATCH 1/6] Another round of FindBugs fixes. Inefficient use of keySet iterator instead of entrySet iterator. --- .../walkers/haplotypecaller/LikelihoodCalculationEngine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 b5ce4b4bc..a69e39401 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 @@ -77,10 +77,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 ); } } From 5e28bca63023f8183cffaaf259e47e3fa0c7be48 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Mon, 20 Aug 2012 16:15:48 -0400 Subject: [PATCH 2/6] Another round of FindBugs fixes. Should be static inner class. --- .../java/src/org/broadinstitute/sting/utils/MannWhitneyU.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java b/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java index d1bc75583..99f43876c 100755 --- a/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java +++ b/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java @@ -434,7 +434,7 @@ 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> { public DitheringComparator() {} From 77fbaec04406afb7f621a1eb8199a3936ec7056f Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Mon, 20 Aug 2012 16:55:00 -0400 Subject: [PATCH 3/6] Another round of FindBugs fixes. Class implements its own compareTo() but uses base Object.equals() which can lead to unpredictable behavior. --- .../walkers/haplotypecaller/DeBruijnEdge.java | 12 +++++++---- .../walkers/haplotypecaller/KBestPaths.java | 4 +++- .../traversals/TraverseActiveRegions.java | 11 +++++----- .../walkers/variantrecalibration/Tranche.java | 14 ++++++++----- .../variantrecalibration/TrancheManager.java | 2 +- .../VariantDataManager.java | 2 +- .../variantrecalibration/VariantDatum.java | 12 +++++++---- .../utils/activeregion/ActiveRegion.java | 21 ++++++++++++++----- 8 files changed, 52 insertions(+), 26 deletions(-) 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..39bb3617f 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,8 @@ package org.broadinstitute.sting.gatk.walkers.haplotypecaller; import org.jgrapht.graph.DefaultDirectedGraph; +import java.util.Comparator; + /** * Created by IntelliJ IDEA. * User: ebanks @@ -9,7 +11,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 +55,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 { + @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/KBestPaths.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java index 0ef1a13a4..4a5a906f2 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 @@ -77,12 +77,14 @@ public class KBestPaths { } protected static class PathComparatorTotalScore implements Comparator { + @Override public int compare(final Path path1, final Path path2) { return path1.totalScore - path2.totalScore; } } //protected static class PathComparatorLowestEdge implements Comparator { + // @Override // public int compare(final Path path1, final Path path2) { // return path2.lowestEdge - path1.lowestEdge; // } @@ -124,7 +126,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/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/variantrecalibration/Tranche.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java index 9228dc375..14ef63264 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 @@ -41,7 +41,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 +83,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 { + @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 +106,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 +187,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 e88505f99..ba31d53cb 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..55052f73b 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,15 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.broadinstitute.sting.utils.GenomeLoc; +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 +54,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 { + @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/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 From 55b7949d68daf5f47d46c81227349b7d7982f844 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Tue, 21 Aug 2012 09:20:55 -0400 Subject: [PATCH 4/6] Another round of FindBugs fixes. Comparator doesn't implement Serializable. --- .../sting/gatk/walkers/haplotypecaller/DeBruijnEdge.java | 3 ++- .../sting/gatk/walkers/haplotypecaller/KBestPaths.java | 5 +++-- .../sting/gatk/walkers/annotator/HaplotypeScore.java | 3 ++- .../sting/gatk/walkers/variantrecalibration/Tranche.java | 7 ++----- .../gatk/walkers/variantrecalibration/VariantDatum.java | 3 ++- .../src/org/broadinstitute/sting/utils/MannWhitneyU.java | 5 ++++- 6 files changed, 15 insertions(+), 11 deletions(-) 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 39bb3617f..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,7 @@ package org.broadinstitute.sting.gatk.walkers.haplotypecaller; import org.jgrapht.graph.DefaultDirectedGraph; +import java.io.Serializable; import java.util.Comparator; /** @@ -55,7 +56,7 @@ public class DeBruijnEdge { return (graph.getEdgeSource(this).equals(graph2.getEdgeSource(edge))) && (graph.getEdgeTarget(this).equals(graph2.getEdgeTarget(edge))); } - public static class EdgeWeightComparator implements Comparator { + 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/KBestPaths.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/KBestPaths.java index 4a5a906f2..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,14 +77,14 @@ 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; 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 c6d8883c5..27a6c068f 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 @@ -47,6 +47,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.*; /** @@ -103,7 +104,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/variantrecalibration/Tranche.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/Tranche.java index 14ef63264..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.*; /** @@ -83,7 +80,7 @@ public class Tranche { return accessibleTruthSites > 0 ? callsAtTruthSites / (1.0*accessibleTruthSites) : 0.0; } - public static class TrancheTruthSensitivityComparator implements Comparator { + public static class TrancheTruthSensitivityComparator implements Comparator, Serializable { @Override public int compare(final Tranche tranche1, final Tranche tranche2) { return Double.compare(tranche1.ts, tranche2.ts); 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 55052f73b..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,6 +27,7 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.broadinstitute.sting.utils.GenomeLoc; +import java.io.Serializable; import java.util.Comparator; /** @@ -54,7 +55,7 @@ public class VariantDatum { public int worstAnnotation; public MultivariateGaussian assignment; // used in K-means implementation - public static class VariantDatumLODComparator implements Comparator { + 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/MannWhitneyU.java b/public/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java index 99f43876c..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 static 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; } From 605acaae9cf0b9de4f55dcd7891c7243fb555bab Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Tue, 21 Aug 2012 09:33:58 -0400 Subject: [PATCH 5/6] Another round of FindBugs fixes. Object internally stores a reference to an externally mutable array. Very dangerous. --- .../walkers/haplotypecaller/DeBruijnVertex.java | 2 +- .../walkers/bqsr/StandardRecalibrationEngine.java | 2 +- .../org/broadinstitute/sting/utils/Haplotype.java | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) 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..358bd0c38 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; } 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/utils/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java index fcde1f419..efddf1468 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; } From 10961db3ce04c46ac1370f40ee9640824fc30aaa Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Tue, 21 Aug 2012 09:35:55 -0400 Subject: [PATCH 6/6] Another round of FindBugs fixes. Object returns its internal reference to an externally mutable array. Very dangerous. --- .../sting/gatk/walkers/haplotypecaller/DeBruijnVertex.java | 2 +- public/java/src/org/broadinstitute/sting/utils/Haplotype.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 358bd0c38..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 @@ -37,7 +37,7 @@ public class DeBruijnVertex { } public byte[] getSequence() { - return sequence; + return sequence.clone(); } public byte[] getSuffix() { diff --git a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java index efddf1468..befd24307 100755 --- a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java @@ -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() {