From e91ae6b2659e13442627e85038991b40ffe4d16b Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Wed, 29 Jun 2011 15:00:26 -0400 Subject: [PATCH 001/161] AF matching when selecting random variants --- .../walkers/variantutils/SelectVariants.java | 69 +++++++++++++++++-- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java index 963aa0ce5..4916c4ac4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java @@ -24,14 +24,12 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; +import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.variantcontext.*; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.MendelianViolation; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -42,9 +40,10 @@ import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.apache.log4j.Logger; import java.io.File; +import java.lang.annotation.AnnotationFormatError; import java.util.*; /** @@ -75,12 +74,24 @@ public class SelectVariants extends RodWalker { @Argument(fullName="excludeFiltered", shortName="ef", doc="Don't include filtered loci in the analysis.", required=false) private boolean EXCLUDE_FILTERED = false; + @Argument(fullName="keepOriginalAC", shortName="keepOriginalAC", doc="Don't include filtered loci.", required=false) + private boolean KEEP_ORIGINAL_CHR_COUNTS = false; + @Argument(fullName="discordance", shortName = "disc", doc="Output variants that were not called on a ROD comparison track. Use -disc ROD_NAME", required=false) private String discordanceRodName = ""; @Argument(fullName="concordance", shortName = "conc", doc="Output variants that were also called on a ROD comparison track. Use -conc ROD_NAME", required=false) private String concordanceRodName = ""; + @Hidden + @Argument(fullName="inputAF", shortName = "inputAF", doc="", required=false) + private String inputAFRodName = ""; + + @Hidden + @Argument(fullName="keepAFSpectrum", shortName="keepAF", doc="Don't include loci found to be non-variant after the subsetting procedure.", required=false) + private boolean KEEP_AF_SPECTRUM = false; + + @Argument(fullName="family_structure", shortName="family", doc="USE YAML FILE INSTEAD (-SM) !!! string formatted as dad+mom=child where these parameters determine which sample names are examined", required=false) private String FAMILY_STRUCTURE = ""; @@ -178,6 +189,12 @@ public class SelectVariants extends RodWalker { // Initialize VCF header Set headerLines = VCFUtils.smartMergeHeaders(vcfRods.values(), logger); headerLines.add(new VCFHeaderLine("source", "SelectVariants")); + + if (KEEP_ORIGINAL_CHR_COUNTS) { + headerLines.add(new VCFFormatHeaderLine("AC_Orig", 1, VCFHeaderLineType.Integer, "Original AC")); + headerLines.add(new VCFFormatHeaderLine("AF_Orig", 1, VCFHeaderLineType.Float, "Original AF")); + headerLines.add(new VCFFormatHeaderLine("AN_Orig", 1, VCFHeaderLineType.Integer, "Original AN")); + } vcfWriter.writeHeader(new VCFHeader(headerLines, samples)); for (int i = 0; i < SELECT_EXPRESSIONS.size(); i++) { @@ -269,6 +286,38 @@ public class SelectVariants extends RodWalker { else if (!SELECT_RANDOM_FRACTION || GenomeAnalysisEngine.getRandomGenerator().nextDouble() < fractionRandom) { vcfWriter.add(sub, ref.getBase()); } + else { + if (SELECT_RANDOM_FRACTION && KEEP_AF_SPECTRUM ) { + Collection compVCs = tracker.getVariantContexts(ref, inputAFRodName, null, context.getLocation(), true, false); + if (compVCs.isEmpty()) + return 0; + + // ok we have a comp VC and we need to match the AF spectrum of inputAFRodName. + // We then pick a variant with probablity AF*desiredFraction + for (VariantContext compVC : compVCs) { + if ( compVC.hasAttribute(VCFConstants.ALLELE_FREQUENCY_KEY) ) { + String afo = compVC.getAttributeAsString(VCFConstants.ALLELE_FREQUENCY_KEY); + + double af; + if (afo.contains(",")) { + String[] afs = afo.split(","); + afs[0] = afs[0].substring(1,afs[0].length()); + afs[afs.length-1] = afs[afs.length-1].substring(0,afs[afs.length-1].length()-1); + af = Double.valueOf(afs[0]); + + } + else + af = Double.valueOf(afo); + + System.out.format("%s .. %4.1f\n",afo.toString(), af); + if (GenomeAnalysisEngine.getRandomGenerator().nextDouble() < fractionRandom * af) + vcfWriter.add(sub, ref.getBase()); + } + break; // do only one vc + } + + } + } } } @@ -413,6 +462,16 @@ public class SelectVariants extends RodWalker { } + if (KEEP_ORIGINAL_CHR_COUNTS) { + if ( attributes.containsKey(VCFConstants.ALLELE_COUNT_KEY) ) + attributes.put("AC_Orig",attributes.get(VCFConstants.ALLELE_COUNT_KEY)); + if ( attributes.containsKey(VCFConstants.ALLELE_FREQUENCY_KEY) ) + attributes.put("AF_Orig",attributes.get(VCFConstants.ALLELE_FREQUENCY_KEY)); + if ( attributes.containsKey(VCFConstants.ALLELE_NUMBER_KEY) ) + attributes.put("AN_Orig",attributes.get(VCFConstants.ALLELE_NUMBER_KEY)); + + } + VariantContextUtils.calculateChromosomeCounts(sub,attributes,false); attributes.put("DP", depth); From dc4f63a1a819a71815df2748a27528516176bd4f Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Wed, 29 Jun 2011 16:00:23 -0400 Subject: [PATCH 002/161] a) consensus goes to week queue b) New experimental TechnologyComposition annotation c) SelectVariants fixes --- .../annotator/TechnologyComposition.java | 77 +++++++++++++++++++ .../walkers/variantutils/SelectVariants.java | 12 ++- 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100755 public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java new file mode 100755 index 000000000..351117809 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java @@ -0,0 +1,77 @@ +package org.broadinstitute.sting.gatk.walkers.annotator; + +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.IndelUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.sam.ReadUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.util.*; + +/** + * Created by IntelliJ IDEA. + * User: delangel + * Date: 6/29/11 + * Time: 3:14 PM + * To change this template use File | Settings | File Templates. + */ +public class TechnologyComposition implements ExperimentalAnnotation,InfoFieldAnnotation { + private String nSLX = "NumSLX"; + private String n454 ="Num454"; + private String nSolid = "NumSOLiD"; + private String nOther = "NumOther"; + public Map annotate(RefMetaDataTracker tracker, ReferenceContext ref, Map stratifiedContexts, VariantContext vc) { + if ( stratifiedContexts.size() == 0 ) + return null; + + int readsIllumina = 0; + int readsSolid = 0; + int reads454 = 0; + int readsOther = 0; + + for ( Map.Entry sample : stratifiedContexts.entrySet() ) { + AlignmentContext context = sample.getValue(); + + ReadBackedPileup pileup = null; + if (context.hasExtendedEventPileup()) + pileup = context.getExtendedEventPileup(); + else if (context.hasBasePileup()) + pileup = context.getBasePileup(); + + if (pileup != null) { + for (PileupElement p : pileup ) { + if(ReadUtils.is454Read(p.getRead())) + reads454++; + else if (ReadUtils.isSOLiDRead(p.getRead())) + readsSolid++; + else if (ReadUtils.isSLXRead(p.getRead())) + readsIllumina++; + else + readsOther++; + } + } + } + + Map map = new HashMap(); + map.put(nSLX, String.format("%d", readsIllumina)); + map.put(n454, String.format("%d", reads454)); + map.put(nSolid, String.format("%d", readsSolid)); + map.put(nOther, String.format("%d", readsOther)); + return map; + } + + public List getKeyNames() { return Arrays.asList(nSLX,n454,nSolid,nOther); } + + public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine(nSLX, 1, VCFHeaderLineType.Integer, "Number of SLX reads"), + new VCFInfoHeaderLine(n454, 1, VCFHeaderLineType.Integer, "Number of 454 reads"), + new VCFInfoHeaderLine(nSolid, 1, VCFHeaderLineType.Integer, "Number of SOLiD reads"), + new VCFInfoHeaderLine(nOther, 1, VCFHeaderLineType.Integer, "Number of Other technology reads")); } + +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java index 4916c4ac4..cbac54326 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java @@ -25,6 +25,7 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.variantcontext.*; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; @@ -303,13 +304,20 @@ public class SelectVariants extends RodWalker { String[] afs = afo.split(","); afs[0] = afs[0].substring(1,afs[0].length()); afs[afs.length-1] = afs[afs.length-1].substring(0,afs[afs.length-1].length()-1); - af = Double.valueOf(afs[0]); + + double[] afd = new double[afs.length]; + + for (int k=0; k < afd.length; k++) + afd[k] = Double.valueOf(afs[k]); + + af = MathUtils.arrayMax(afd); + //af = Double.valueOf(afs[0]); } else af = Double.valueOf(afo); - System.out.format("%s .. %4.1f\n",afo.toString(), af); + //System.out.format("%s .. %4.4f\n",afo.toString(), af); if (GenomeAnalysisEngine.getRandomGenerator().nextDouble() < fractionRandom * af) vcfWriter.add(sub, ref.getBase()); } From 2b88033ef4ab4501b5b78ae2d13b78d46c082a62 Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Wed, 29 Jun 2011 16:12:55 -0400 Subject: [PATCH 003/161] Enable considering 454 reads, just lower GOP by 15 --- .../IndelGenotypeLikelihoodsCalculationModel.java | 4 ++-- .../gatk/walkers/indels/PairHMMIndelErrorModel.java | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index 1f430548b..62f6ff5a6 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -157,10 +157,10 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood GATKSAMRecord read = ReadUtils.hardClipAdaptorSequence(p.getRead()); if (read == null) continue; - if(ReadUtils.is454Read(read)) { + /* if(ReadUtils.is454Read(read)) { continue; } - + */ if (DEBUG && p.isIndel()) { System.out.format("Read: %s, cigar: %s, aln start: %d, aln end: %d, p.len:%d, Type:%s, EventBases:%s\n", read.getReadName(),read.getCigar().toString(),read.getAlignmentStart(),read.getAlignmentEnd(), diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java index e7b9cfa68..419ae694f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java @@ -105,6 +105,7 @@ public class PairHMMIndelErrorModel { private static final double MIN_GAP_CONT_PENALTY = 10.0; private static final double GAP_PENALTY_HRUN_STEP = 1.0; // each increase in hrun decreases gap penalty by this. + private static final double GOP_454_DELTA = 15.0; // lower gap penalty for 454 reads private boolean doViterbi = false; @@ -771,10 +772,10 @@ public class PairHMMIndelErrorModel { if (read == null) continue; - if(ReadUtils.is454Read(read) && !getGapPenaltiesFromFile) { + /* if(ReadUtils.is454Read(read) && !getGapPenaltiesFromFile) { continue; } - + */ double[] recalQuals = null; /* @@ -990,6 +991,10 @@ public class PairHMMIndelErrorModel { } else { currentContextGOP = Arrays.copyOfRange(gapOpenProbabilityMap.get(a), (int)indStart, (int)indStop); currentContextGCP = Arrays.copyOfRange(gapContProbabilityMap.get(a), (int)indStart, (int)indStop); + if(ReadUtils.is454Read(read)) { + for (int k=0; k Date: Fri, 1 Jul 2011 13:13:24 -0400 Subject: [PATCH 006/161] Fixes to the queue pipeline tests to account for the new directory structure. --- .../pipeline/examples/ExampleCountLociPipelineTest.scala | 2 +- .../queue/pipeline/examples/HelloWorldPipelineTest.scala | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala index 2b3b51783..09f80f2c3 100644 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala +++ b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala @@ -35,7 +35,7 @@ class ExampleCountLociPipelineTest { val spec = new PipelineTestSpec spec.name = "countloci" spec.args = Array( - " -S scala/qscript/examples/ExampleCountLoci.scala", + " -S public/scala/qscript/examples/ExampleCountLoci.scala", " -R " + BaseTest.hg18Reference, " -I " + BaseTest.validationDataLocation + "small_bam_for_countloci.bam", " -o " + testOut).mkString diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala index 8b8fa86a4..37531e791 100644 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala +++ b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala @@ -32,7 +32,7 @@ class HelloWorldPipelineTest { def testHelloWorld { val spec = new PipelineTestSpec spec.name = "HelloWorld" - spec.args = "-S scala/qscript/examples/HelloWorld.scala" + spec.args = "-S public/scala/qscript/examples/HelloWorld.scala" PipelineTest.executeTest(spec) } @@ -40,7 +40,7 @@ class HelloWorldPipelineTest { def testHelloWorldWithPrefix { val spec = new PipelineTestSpec spec.name = "HelloWorldWithPrefix" - spec.args = "-S scala/qscript/examples/HelloWorld.scala -jobPrefix HelloWorld" + spec.args = "-S public/scala/qscript/examples/HelloWorld.scala -jobPrefix HelloWorld" PipelineTest.executeTest(spec) } @@ -48,7 +48,7 @@ class HelloWorldPipelineTest { def testHelloWorldWithPriority { val spec = new PipelineTestSpec spec.name = "HelloWorldWithPriority" - spec.args = "-S scala/qscript/examples/HelloWorld.scala -jobPriority 100" + spec.args = "-S public/scala/qscript/examples/HelloWorld.scala -jobPriority 100" PipelineTest.executeTest(spec) } } From 11d4af0e7528d0d3dd8b5da3745ad7d7bced7280 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Fri, 1 Jul 2011 13:41:34 -0400 Subject: [PATCH 007/161] Path-related fixes to the private queue pipeline tests. --- .../pipeline/IPFLibraryPipelineTest.scala | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100755 public/scala/test/org/broadinstitute/sting/queue/pipeline/IPFLibraryPipelineTest.scala diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/IPFLibraryPipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/IPFLibraryPipelineTest.scala deleted file mode 100755 index 6b32e5c9d..000000000 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/IPFLibraryPipelineTest.scala +++ /dev/null @@ -1,71 +0,0 @@ -package org.broadinstitute.sting.queue.pipeline - -import org.testng.annotations.Test -import org.broadinstitute.sting.BaseTest - -class IPFLibraryPipelineTest { - - @Test - def testVCFExtractSites { - var testOut = "vcfes.vcf" - val spec = new PipelineTestSpec - spec.name = "vcfExtractSites" - spec.args = "-S scala/qscript/oneoffs/QTools.q -T VCFExtractSites -ivcf %s -out %s".format( - BaseTest.validationDataLocation + "omni_1212.subset.b37.vcf", testOut - ) - spec.fileMD5s += testOut -> "4f496b8cf90302428a9edda486a337f4" - PipelineTest.executeTest(spec) - } - - @Test - def testVCFExtractSamples { - var testOut = "vcf.extract.samples.vcf" - val spec = new PipelineTestSpec - spec.name = "vcfExtractSamples" - spec.args = "-S scala/qscript/oneoffs/QTools.q -T VCFExtractSamples -ivcf %s -out %s -sm HG00107,HG00500,NA18501,NA18942".format( - BaseTest.validationDataLocation + "omni_1212.subset.b37.vcf", testOut - ) - - spec.fileMD5s += testOut -> "180d5a2e7a1fbc5117de6705bde3a7c8" - } - - @Test - def testVCFExtractIntervals { - var testOut = "vcf.extract.intervals.list" - val spec = new PipelineTestSpec - spec.name = "vcfExtractIntervals" - spec.args = "-S scala/qscript/oneoffs/QTools.q -T VCFExtractIntervals -ivcf %s -out %s".format( - BaseTest.validationDataLocation + "omni_1212.subset.b37.vcf", testOut - ) - - spec.fileMD5s += testOut ->"28589eeb28fac753577c027abf939345" - - } - - @Test - def testVCFSimpleMerge { - var testOut = "vcf.simplemerge.vcf" - val spec = new PipelineTestSpec - val int1 = BaseTest.validationDataLocation + "omni.subset.interleaved.1.vcf" - val int2 = BaseTest.validationDataLocation + "omni.subset.interleaved.2.vcf" - spec.name = "vcfSimpleMerge" - spec.args = "-S scala/qscript/oneoffs/QTools.q -T VCFSimpleMerge -vcfs %s,%s -out %s -ref %s".format( - int1,int2,testOut,BaseTest.b37KGReference - ) - - spec.fileMD5s += testOut -> "c59b8de64ba787a2ca3a1734bdebf277" - } - - @Test - def testSortByRef { - var testOut = "vcf.refsorted.vcf" - val spec = new PipelineTestSpec - val unsorted = BaseTest.validationDataLocation + "omni.pos_sorted.vcf" - spec.name = "sortByRef" - spec.args = "-S scala/qscript/oneoffs/QTools.q -T SortByRef -ivcf %s -out %s -ref %s".format( - unsorted, testOut, BaseTest.b37KGReference - ) - - spec.fileMD5s += testOut -> "ee09af803bc94987d55d044c2ebbc0b8" - } -} From d19351f71acc60673286d5dc8b1e6516bcc7a4a3 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 1 Jul 2011 16:02:28 -0400 Subject: [PATCH 008/161] Added capability of running multiple bam files in the same directory. --- .../sting/queue/qscripts/RecalibrateBaseQualities.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index 678b356ee..51de3a7ad 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -41,9 +41,9 @@ class RecalibrateBaseQualities extends QScript { nContigs = getNumberOfContigs(input) - val recalFile1: File = new File("recal1.csv") - val recalFile2: File = new File("recal2.csv") - val recalBam: File = swapExt(input, ".bam", "recal.bam") + val recalFile1: File = swapExt(input, ".bam", "recal1.csv") + val recalFile2: File = swapExt(input, ".bam", "recal2.csv") + val recalBam: File = swapExt(input, ".bam", "recal.bam") val path1: String = "before" val path2: String = "after" @@ -88,4 +88,4 @@ class RecalibrateBaseQualities extends QScript { this.analysisName = queueLogDir + inRecalFile + ".analyze_covariates" this.jobName = queueLogDir + inRecalFile + ".analyze_covariates" } -} \ No newline at end of file +} From d647ea4fdc4274507d0456c955f2dfbf66ae70c1 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Fri, 1 Jul 2011 16:04:30 -0400 Subject: [PATCH 009/161] Long-delayed change to CachingIndexedFastaSequenceFile. Made the cache non-static to avoid problems when multiple references are used within the same thread (eg., during integration tests). This should kill the intermittent IndelRealignerIntegrationTest failures. --- .../utils/fasta/CachingIndexedFastaSequenceFile.java | 8 ++++---- .../fasta/CachingIndexedFastaSequenceFileUnitTest.java | 5 ----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java b/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java index bda52dd4e..0c5085cc7 100644 --- a/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java +++ b/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java @@ -68,13 +68,13 @@ public class CachingIndexedFastaSequenceFile extends IndexedFastaSequenceFile { ReferenceSequence seq = null; } - private static ThreadLocal cache; + private ThreadLocal cache; - static { + { resetThreadLocalCache(); - }; + } - protected static void resetThreadLocalCache() { + protected void resetThreadLocalCache() { cache = new ThreadLocal () { @Override protected Cache initialValue() { return new Cache(); diff --git a/public/java/test/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFileUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFileUnitTest.java index a60f1b0fe..74cd8d8fe 100644 --- a/public/java/test/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFileUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFileUnitTest.java @@ -34,11 +34,6 @@ public class CachingIndexedFastaSequenceFileUnitTest extends BaseTest { private static final List QUERY_SIZES = Arrays.asList(1, 10, 100, 1000); private static final List CACHE_SIZES = Arrays.asList(-1, 10, 1000); - @BeforeMethod - public void clearCache() { - CachingIndexedFastaSequenceFile.resetThreadLocalCache(); - } - @DataProvider(name = "fastas") public Object[][] createData1() { List params = new ArrayList(); From b0fb63e20a86e5d3542a1c5301663eb8cc884795 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 1 Jul 2011 16:14:59 -0400 Subject: [PATCH 010/161] moving the example scala scripts to the qscripts package. --- .../sting/queue/qscripts}/examples/ExampleCountLoci.scala | 2 ++ .../sting/queue/qscripts}/examples/ExampleCountReads.scala | 2 ++ .../sting/queue/qscripts}/examples/ExampleCustomWalker.scala | 2 ++ .../queue/qscripts}/examples/ExampleUnifiedGenotyper.scala | 2 ++ .../sting/queue/qscripts}/examples/HelloWorld.scala | 2 ++ .../broadinstitute/sting/queue/qscripts}/lib/Vcf2Table.q | 2 ++ 6 files changed, 12 insertions(+) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/examples/ExampleCountLoci.scala (93%) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/examples/ExampleCountReads.scala (97%) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/examples/ExampleCustomWalker.scala (96%) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/examples/ExampleUnifiedGenotyper.scala (98%) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/examples/HelloWorld.scala (76%) rename public/scala/qscript/{ => org/broadinstitute/sting/queue/qscripts}/lib/Vcf2Table.q (95%) diff --git a/public/scala/qscript/examples/ExampleCountLoci.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountLoci.scala similarity index 93% rename from public/scala/qscript/examples/ExampleCountLoci.scala rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountLoci.scala index ba834e72f..4ca3cbb89 100644 --- a/public/scala/qscript/examples/ExampleCountLoci.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountLoci.scala @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.examples + import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ diff --git a/public/scala/qscript/examples/ExampleCountReads.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountReads.scala similarity index 97% rename from public/scala/qscript/examples/ExampleCountReads.scala rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountReads.scala index 85f796a51..9fdd1ba4c 100644 --- a/public/scala/qscript/examples/ExampleCountReads.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountReads.scala @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.examples + import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ diff --git a/public/scala/qscript/examples/ExampleCustomWalker.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCustomWalker.scala similarity index 96% rename from public/scala/qscript/examples/ExampleCustomWalker.scala rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCustomWalker.scala index 340934b5b..d3796d350 100644 --- a/public/scala/qscript/examples/ExampleCustomWalker.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCustomWalker.scala @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.examples + import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ diff --git a/public/scala/qscript/examples/ExampleUnifiedGenotyper.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleUnifiedGenotyper.scala similarity index 98% rename from public/scala/qscript/examples/ExampleUnifiedGenotyper.scala rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleUnifiedGenotyper.scala index 2f6940d64..4a93233eb 100644 --- a/public/scala/qscript/examples/ExampleUnifiedGenotyper.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleUnifiedGenotyper.scala @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.examples + import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ diff --git a/public/scala/qscript/examples/HelloWorld.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala similarity index 76% rename from public/scala/qscript/examples/HelloWorld.scala rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala index 64e0c161c..9f2ce27fe 100644 --- a/public/scala/qscript/examples/HelloWorld.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.examples + import org.broadinstitute.sting.queue.QScript class HelloWorld extends QScript { diff --git a/public/scala/qscript/lib/Vcf2Table.q b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/lib/Vcf2Table.q similarity index 95% rename from public/scala/qscript/lib/Vcf2Table.q rename to public/scala/qscript/org/broadinstitute/sting/queue/qscripts/lib/Vcf2Table.q index 1b66a648b..25ff8fddd 100755 --- a/public/scala/qscript/lib/Vcf2Table.q +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/lib/Vcf2Table.q @@ -1,3 +1,5 @@ +package org.broadinstitute.sting.queue.qscripts.lib + import org.broadinstitute.sting.commandline.Hidden import org.broadinstitute.sting.queue.extensions.gatk.{RodBind, VariantsToTable} import org.broadinstitute.sting.queue.QScript From 546e7777fa1c8f6d091f75aa28e6ac490fbf3523 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Fri, 1 Jul 2011 16:39:10 -0400 Subject: [PATCH 011/161] Re-fixing paths in pipeline tests after example qscripts got moved. --- .../pipeline/examples/ExampleCountLociPipelineTest.scala | 2 +- .../queue/pipeline/examples/HelloWorldPipelineTest.scala | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala index 09f80f2c3..1e6c93cff 100644 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala +++ b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/ExampleCountLociPipelineTest.scala @@ -35,7 +35,7 @@ class ExampleCountLociPipelineTest { val spec = new PipelineTestSpec spec.name = "countloci" spec.args = Array( - " -S public/scala/qscript/examples/ExampleCountLoci.scala", + " -S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountLoci.scala", " -R " + BaseTest.hg18Reference, " -I " + BaseTest.validationDataLocation + "small_bam_for_countloci.bam", " -o " + testOut).mkString diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala index 37531e791..0871e769b 100644 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala +++ b/public/scala/test/org/broadinstitute/sting/queue/pipeline/examples/HelloWorldPipelineTest.scala @@ -32,7 +32,7 @@ class HelloWorldPipelineTest { def testHelloWorld { val spec = new PipelineTestSpec spec.name = "HelloWorld" - spec.args = "-S public/scala/qscript/examples/HelloWorld.scala" + spec.args = "-S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala" PipelineTest.executeTest(spec) } @@ -40,7 +40,7 @@ class HelloWorldPipelineTest { def testHelloWorldWithPrefix { val spec = new PipelineTestSpec spec.name = "HelloWorldWithPrefix" - spec.args = "-S public/scala/qscript/examples/HelloWorld.scala -jobPrefix HelloWorld" + spec.args = "-S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala -jobPrefix HelloWorld" PipelineTest.executeTest(spec) } @@ -48,7 +48,7 @@ class HelloWorldPipelineTest { def testHelloWorldWithPriority { val spec = new PipelineTestSpec spec.name = "HelloWorldWithPriority" - spec.args = "-S public/scala/qscript/examples/HelloWorld.scala -jobPriority 100" + spec.args = "-S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/HelloWorld.scala -jobPriority 100" PipelineTest.executeTest(spec) } } From 444eae316c8d33e4b3ff765aa5b7211f5bd746a9 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Fri, 1 Jul 2011 17:26:25 -0400 Subject: [PATCH 013/161] Moving these supported perl scripts to public --- public/perl/liftOverVCF.pl | 83 ++++++++++++++++++++++++ public/perl/sortByRef.pl | 127 +++++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100755 public/perl/liftOverVCF.pl create mode 100755 public/perl/sortByRef.pl diff --git a/public/perl/liftOverVCF.pl b/public/perl/liftOverVCF.pl new file mode 100755 index 000000000..21cb8bb6b --- /dev/null +++ b/public/perl/liftOverVCF.pl @@ -0,0 +1,83 @@ +#!/usr/bin/perl -w + +# Runs the liftover tool on a VCF and properly handles the output + +use strict; +use Getopt::Long; + +my $in = undef; +my $gatk = undef; +my $chain = undef; +my $newRef = undef; +my $oldRef = undef; +my $out = undef; +my $tmp = "/tmp"; +my $recordOriginalLocation = 0; +GetOptions( "vcf=s" => \$in, + "gatk=s" => \$gatk, + "chain=s" => \$chain, + "newRef=s" => \$newRef, + "oldRef=s" => \$oldRef, + "out=s" => \$out, + "tmp=s" => \$tmp, + "recordOriginalLocation" => \$recordOriginalLocation); + +if ( !$in || !$gatk || !$chain || !$newRef || !$oldRef || !$out ) { + print "Usage: liftOverVCF.pl\n\t-vcf \t\t\n\t-gatk \t\t\n\t-chain \t\t\n\t-newRef \t\n\t-oldRef \t\n\t-out \t\t\n\t-tmp \t\t\n\t-recordOriginalLocation \t\t\n"; + print "Example: ./liftOverVCF.pl\n\t-vcf /humgen/gsa-hpprojects/GATK/data/Comparisons/Validated/1kg_snp_validation/all_validation_batches.b36.vcf\n\t-chain b36ToHg19.broad.over.chain\n\t-out lifted.hg19.vcf\n\t-gatk /humgen/gsa-scr1/ebanks/Sting_dev\n\t-newRef /seq/references/Homo_sapiens_assembly19/v0/Homo_sapiens_assembly19\n\t-oldRef /humgen/1kg/reference/human_b36_both\n"; + exit(1); +} + +# generate a random number +my $random_number = rand(); +my $tmp_prefix = "$tmp/$random_number"; +print "Writing temporary files to prefix: $tmp_prefix\n"; +my $unsorted_vcf = "$tmp_prefix.unsorted.vcf"; + +# lift over the file +print "Lifting over the vcf..."; +my $cmd = "java -jar $gatk/dist/GenomeAnalysisTK.jar -T LiftoverVariants -R $oldRef.fasta -B:variant,vcf $in -o $unsorted_vcf -chain $chain -dict $newRef.dict"; +if ($recordOriginalLocation) { + $cmd .= " -recordOriginalLocation"; +} +system($cmd) == 0 or quit("The liftover step failed. Please correct the necessary errors before retrying."); + +# we need to sort the lifted over file now +print "\nRe-sorting the vcf...\n"; +my $sorted_vcf = "$tmp_prefix.sorted.vcf"; +open(SORTED, ">$sorted_vcf") or die "can't open $sorted_vcf: $!"; + +# write the header +open(UNSORTED, "< $unsorted_vcf") or die "can't open $unsorted_vcf: $!"; +my $inHeader = 1; +while ( $inHeader == 1 ) { + my $line = ; + if ( $line !~ m/^#/ ) { + $inHeader = 0; + } else { + print SORTED "$line"; + } +} +close(UNSORTED); +close(SORTED); + +$cmd = "grep \"^#\" -v $unsorted_vcf | sort -n -k2 -T $tmp | $gatk/public/perl/sortByRef.pl --tmp $tmp - $newRef.fasta.fai >> $sorted_vcf"; +system($cmd) == 0 or quit("The sorting step failed. Please correct the necessary errors before retrying."); + +# Filter the VCF for bad records +print "\nFixing/removing bad records...\n"; +$cmd = "java -jar $gatk/dist/GenomeAnalysisTK.jar -T FilterLiftedVariants -R $newRef.fasta -B:variant,vcf $sorted_vcf -o $out"; +system($cmd) == 0 or quit("The filtering step failed. Please correct the necessary errors before retrying."); + +# clean up +unlink $unsorted_vcf; +unlink $sorted_vcf; +my $sorted_index = "$sorted_vcf.idx"; +unlink $sorted_index; + +print "\nDone!\n"; + +sub quit { + print "\n$_[0]\n"; + exit(1); +} diff --git a/public/perl/sortByRef.pl b/public/perl/sortByRef.pl new file mode 100755 index 000000000..71d3f4477 --- /dev/null +++ b/public/perl/sortByRef.pl @@ -0,0 +1,127 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Long; + +sub usage { + + print "\nUsage:\n"; + print "sortByRef.pl [--k POS] [--tmp dir] INPUT REF_DICT\n\n"; + + print " Sorts lines of the input file INFILE according\n"; + print " to the reference contig order specified by the\n"; + print " reference dictionary REF_DICT (.fai file).\n"; + print " The sort is stable. If -k option is not specified,\n"; + print " it is assumed that the contig name is the first\n"; + print " field in each line.\n\n"; + print " INPUT input file to sort. If '-' is specified, \n"; + print " then reads from STDIN.\n"; + print " REF_DICT .fai file, or ANY file that has contigs, in the\n"; + print " desired soting order, as its first column.\n"; + print " --k POS : contig name is in the field POS (1-based)\n"; + print " of input lines.\n\n"; + print " --tmp DIR : temp directory [default=/tmp]\n\n"; + + exit(1); +} + +my $pos = 1; +my $tmp = "/tmp"; +GetOptions( "k:i" => \$pos, + "tmp=s" => \$tmp); + +$pos--; + +usage() if ( scalar(@ARGV) == 0 ); + +if ( scalar(@ARGV) != 2 ) { + print "Wrong number of arguments\n"; + usage(); +} + +my $input_file = $ARGV[0]; +my $dict_file = $ARGV[1]; + + +open(DICT, "< $dict_file") or die("Can not open $dict_file: $!"); + +my %ref_order; + +my $n = 0; +while ( ) { + chomp; + my ($contig, $rest) = split "\t"; + die("Dictionary file is probably corrupt: multiple instances of contig $contig") if ( defined $ref_order{$contig} ); + + $ref_order{$contig} = $n; + $n++; +} + +close DICT; +#we have loaded contig ordering now + +my $INPUT; +if ($input_file eq "-" ) { + $INPUT = "STDIN"; +} else { + open($INPUT, "< $input_file") or die("Can not open $input_file: $!"); +} + +my %temp_outputs; + +while ( <$INPUT> ) { + + my @fields = split '\s'; + die("Specified field position exceeds the number of fields:\n$_") + if ( $pos >= scalar(@fields) ); + + my $contig = $fields[$pos]; + if ( $contig =~ m/:/ ) { + my @loc = split(/:/, $contig); + # print $contig . " " . $loc[0] . "\n"; + $contig = $loc[0] + } + chomp $contig if ( $pos == scalar(@fields) - 1 ); # if last field in line + + my $order; + if ( defined $ref_order{$contig} ) { $order = $ref_order{$contig}; } + else { + $ref_order{$contig} = $n; + $order = $n; # input line has contig that was not in the dict; + $n++; # this contig will go at the end of the output, + # after all known contigs + } + + my $fhandle; + if ( defined $temp_outputs{$order} ) { $fhandle = $temp_outputs{$order} } + else { + #print "opening $order $$ $_\n"; + open( $fhandle, " > $tmp/sortByRef.$$.$order.tmp" ) or + die ( "Can not open temporary file $order: $!"); + $temp_outputs{$order} = $fhandle; + } + + # we got the handle to the temp file that keeps all + # lines with contig $contig + + print $fhandle $_; # send current line to its corresponding temp file +} + +close $INPUT; + +foreach my $f ( values %temp_outputs ) { close $f; } + +# now collect back into single output stream: + +for ( my $i = 0 ; $i < $n ; $i++ ) { + # if we did not have any lines on contig $i, then there's + # no temp file and nothing to do + next if ( ! defined $temp_outputs{$i} ) ; + + my $f; + open ( $f, "< $tmp/sortByRef.$$.$i.tmp" ); + while ( <$f> ) { print ; } + close $f; + + unlink "$tmp/sortByRef.$$.$i.tmp"; +} From 0c9105ca221508c5205f61ee23d5fe779936c513 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Fri, 1 Jul 2011 18:07:35 -0400 Subject: [PATCH 014/161] Minor fix of description --- .../org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java index 33069f1f5..f23433bb5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java @@ -42,5 +42,5 @@ public class LowMQ implements InfoFieldAnnotation { public List getKeyNames() { return Arrays.asList("LowMQ"); } - public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine(getKeyNames().get(0), 3, VCFHeaderLineType.Integer, "3-tuple: ,,")); } + public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine(getKeyNames().get(0), 3, VCFHeaderLineType.Float, "3-tuple: ,,")); } } From b6bc64a0c8e4c2dd616dd5a9aad86416857d6d09 Mon Sep 17 00:00:00 2001 From: Khalid Shakir Date: Fri, 1 Jul 2011 20:47:03 -0400 Subject: [PATCH 015/161] Cleanup of the utils.broad package. Using Picard IoUtils on sample names. --- .../{datasources => }/pipeline/Pipeline.java | 2 +- .../pipeline/PipelineProject.java | 2 +- .../pipeline/PipelineSample.java | 2 +- .../utils/broad/PicardAggregationUtils.java | 149 ------------------ .../utils/broad/PicardAnalysisFiles.java | 108 ------------- .../sting/utils/broad/PicardPipeline.java | 123 --------------- .../sting/utils/broad/ReferenceData.java | 135 ---------------- .../pipeline/PipelineUnitTest.java | 4 +- .../broad/PicardAggregationUtilsUnitTest.java | 61 ------- .../broad/PicardAnalysisFilesUnitTest.java | 56 ------- .../utils/broad/PicardPipelineUnitTest.java | 71 --------- .../utils/broad/ReferenceDataUnitTest.java | 49 ------ public/packages/Queue.xml | 2 +- .../sting/queue/pipeline/PipelineTest.scala | 87 ---------- 14 files changed, 7 insertions(+), 844 deletions(-) rename public/java/src/org/broadinstitute/sting/{datasources => }/pipeline/Pipeline.java (97%) rename public/java/src/org/broadinstitute/sting/{datasources => }/pipeline/PipelineProject.java (98%) rename public/java/src/org/broadinstitute/sting/{datasources => }/pipeline/PipelineSample.java (97%) delete mode 100755 public/java/src/org/broadinstitute/sting/utils/broad/PicardAggregationUtils.java delete mode 100755 public/java/src/org/broadinstitute/sting/utils/broad/PicardAnalysisFiles.java delete mode 100755 public/java/src/org/broadinstitute/sting/utils/broad/PicardPipeline.java delete mode 100755 public/java/src/org/broadinstitute/sting/utils/broad/ReferenceData.java rename public/java/test/org/broadinstitute/sting/{datasources => }/pipeline/PipelineUnitTest.java (96%) delete mode 100755 public/java/test/org/broadinstitute/sting/utils/broad/PicardAggregationUtilsUnitTest.java delete mode 100755 public/java/test/org/broadinstitute/sting/utils/broad/PicardAnalysisFilesUnitTest.java delete mode 100755 public/java/test/org/broadinstitute/sting/utils/broad/PicardPipelineUnitTest.java delete mode 100755 public/java/test/org/broadinstitute/sting/utils/broad/ReferenceDataUnitTest.java diff --git a/public/java/src/org/broadinstitute/sting/datasources/pipeline/Pipeline.java b/public/java/src/org/broadinstitute/sting/pipeline/Pipeline.java similarity index 97% rename from public/java/src/org/broadinstitute/sting/datasources/pipeline/Pipeline.java rename to public/java/src/org/broadinstitute/sting/pipeline/Pipeline.java index f8f8b2d29..e0e75c353 100644 --- a/public/java/src/org/broadinstitute/sting/datasources/pipeline/Pipeline.java +++ b/public/java/src/org/broadinstitute/sting/pipeline/Pipeline.java @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -package org.broadinstitute.sting.datasources.pipeline; +package org.broadinstitute.sting.pipeline; import java.util.ArrayList; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineProject.java b/public/java/src/org/broadinstitute/sting/pipeline/PipelineProject.java similarity index 98% rename from public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineProject.java rename to public/java/src/org/broadinstitute/sting/pipeline/PipelineProject.java index 7967ba5df..8d33047bf 100644 --- a/public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineProject.java +++ b/public/java/src/org/broadinstitute/sting/pipeline/PipelineProject.java @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -package org.broadinstitute.sting.datasources.pipeline; +package org.broadinstitute.sting.pipeline; import java.io.File; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineSample.java b/public/java/src/org/broadinstitute/sting/pipeline/PipelineSample.java similarity index 97% rename from public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineSample.java rename to public/java/src/org/broadinstitute/sting/pipeline/PipelineSample.java index 701841302..7cd25fed5 100644 --- a/public/java/src/org/broadinstitute/sting/datasources/pipeline/PipelineSample.java +++ b/public/java/src/org/broadinstitute/sting/pipeline/PipelineSample.java @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -package org.broadinstitute.sting.datasources.pipeline; +package org.broadinstitute.sting.pipeline; import java.io.File; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/utils/broad/PicardAggregationUtils.java b/public/java/src/org/broadinstitute/sting/utils/broad/PicardAggregationUtils.java deleted file mode 100755 index 8f3ffd741..000000000 --- a/public/java/src/org/broadinstitute/sting/utils/broad/PicardAggregationUtils.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2011, The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.utils.broad; - -import org.apache.commons.io.filefilter.RegexFileFilter; - -import java.io.File; -import java.io.FileFilter; -import java.io.FileNotFoundException; -import java.util.Arrays; - -public class PicardAggregationUtils { - public static final String PICARD_AGGREGATION_DIR = "/seq/picard_aggregation/"; - - /** - * Returns the path to the sample BAM. - * @param project Project - * @param sample Sample - * @param version Version - * @return The path to the sample BAM. - */ - public static String getSampleBam(String project, String sample, int version) { - return getSampleDir(project, sample, version) + sample + ".bam"; - } - - /** - * Returns the path to the latest BAM. - * @param project Project - * @param sample Sample - * @return The path to the latest BAM. - * @throws FileNotFoundException If a finished directory cannot be found for a sample. - */ - public static String getSampleBam(String project, String sample) throws FileNotFoundException { - return getSampleDir(project, sample) + sample + ".bam"; - } - - /** - * Returns the sample directory. - * @param project Project - * @param sample Sample - * @param version Version - * @return the sample directory. - */ - public static String getSampleDir(String project, String sample, int version) { - return PICARD_AGGREGATION_DIR + String.format("%s/%s/v%d/", project, sample, version); - } - - /** - * Returns the latest finished directory for this project sample. - * @param project Project - * @param sample Sample - * @return The path to the latest finished directory. - * @throws FileNotFoundException If a finished directory cannot be found for a sample. - */ - public static String getSampleDir(String project, String sample) throws FileNotFoundException { - int latestVersion = getLatestVersion(project, sample); - if (latestVersion == 0) - throw new FileNotFoundException("Unable to find a finished directory for project sample " + project + "/" + sample); - return getSampleDir(project, sample, latestVersion); - } - - /** - * Returns the latest finished version directory. - * Because isilon metadata operations are relatively slow this method - * tries not to look for every possible versioned directory. - * @param project Project - * @param sample Sample - * @return The highest finished version directory or 0 if a finished directory was not found. - */ - public static int getLatestVersion(String project, String sample) { - return getLatestVersion(project, sample, 0); - } - - /** - * Returns the latest finished version directory after startVersion. - * Because isilon metadata operations are relatively slow this method - * tries not to look for every possible versioned directory. - * @param project Project - * @param sample Sample - * @param startVersion minimum version to return - * @return The highest finished version directory after startVersion - */ - public static int getLatestVersion(String project, String sample, int startVersion) { - int version = Math.max(0, startVersion); - boolean nextExists = true; - while (nextExists) { - nextExists = false; - for (int next = 3; next > 0; next--) - if (isFinished(project, sample, version + next)) { - version += next; - nextExists = true; - break; - } - } - // Special case when the version is 0 - // Because isilon storage takes a while to do meta data operations only look through every file if we have to. - if (version == 0) { - File sampleDir = new File(PICARD_AGGREGATION_DIR + project + "/" + sample); - if (sampleDir.exists()) { - FileFilter filter = new RegexFileFilter("v\\d+"); - File[] files = sampleDir.listFiles(filter); - int[] versions = new int[files.length]; - for (int i = 0; i < files.length; i++) - versions[i] = Integer.parseInt(files[i].getName().substring(1)); - Arrays.sort(versions); - for (int i = versions.length - 1; i >= 0; i--) { - if (isFinished(project, sample, versions[i])) { - version = versions[i]; - break; - } - } - } - } - return version == 0 ? startVersion : version; - } - - /** - * Returns true if the project sample directory contains a finished.txt - * @param project Project - * @param sample Sample - * @param version Version - * @return true if the project sample directory contains a finished.txt - */ - public static boolean isFinished(String project, String sample, int version) { - return new File(getSampleDir(project, sample, version), "finished.txt").exists(); - } -} diff --git a/public/java/src/org/broadinstitute/sting/utils/broad/PicardAnalysisFiles.java b/public/java/src/org/broadinstitute/sting/utils/broad/PicardAnalysisFiles.java deleted file mode 100755 index 02381916e..000000000 --- a/public/java/src/org/broadinstitute/sting/utils/broad/PicardAnalysisFiles.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2011, The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.utils.broad; - -import org.apache.commons.lang.ArrayUtils; -import org.broadinstitute.sting.utils.exceptions.StingException; -import org.broadinstitute.sting.utils.text.XReadLines; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class PicardAnalysisFiles { - private static final String REFERENCE_SEQUENCE_HEADER = "REFERENCE_SEQUENCE"; - private static final String TARGET_INTERVALS_HEADER = "TARGET_INTERVALS"; - private static final String BAIT_INTERVALS_HEADER = "BAIT_INTERVALS"; - private static final String[] ANALYSIS_HEADERS = {REFERENCE_SEQUENCE_HEADER, TARGET_INTERVALS_HEADER, BAIT_INTERVALS_HEADER}; - private static final String ANALYSIS_FILES = "analysis_files.txt"; - - private String path; - private Map> headerValues = new HashMap>(); - - public PicardAnalysisFiles(String project, String sample) throws FileNotFoundException { - this(PicardAggregationUtils.getSampleDir(project, sample) + ANALYSIS_FILES); - } - - public PicardAnalysisFiles(String project, String sample, int version) throws FileNotFoundException { - this(PicardAggregationUtils.getSampleDir(project, sample, version) + ANALYSIS_FILES); - } - - public PicardAnalysisFiles(String path) throws FileNotFoundException { - this.path = path; - HashMap headerIndexes = null; - for (String line: new XReadLines(new File(path))) { - if (line.startsWith("#")) - continue; - String[] values = line.split("\t"); - if (headerIndexes == null) { - headerIndexes = new HashMap(); - for (String header: ANALYSIS_HEADERS) { - headerIndexes.put(header, ArrayUtils.indexOf(values, header)); - headerValues.put(header, new HashSet()); - } - } else { - for (String header: ANALYSIS_HEADERS) { - int index = headerIndexes.get(header); - if (values.length <= index) - throw new StingException(String.format("Unable to parse line in %s: %n%s", path, line)); - String value = values[index]; - headerValues.get(header).add(value); - } - } - } - } - - public String getPath() { - return path; - } - - public String getReferenceSequence() { - return getSingle(REFERENCE_SEQUENCE_HEADER); - } - - public String getTargetIntervals() { - return getSingle(TARGET_INTERVALS_HEADER); - } - - public String getBaitIntervals() { - return getSingle(BAIT_INTERVALS_HEADER); - } - - private String getSingle(String header) { - Set values = headerValues.get(header); - if (values.size() > 1) { - throw new UnsupportedOperationException(path + " contains more than one value for " + header + ": " + values); - } else if (values.size() == 0) { - return null; - } else { - String value = values.iterator().next(); - return "null".equals(value) ? null : value; - } - } -} diff --git a/public/java/src/org/broadinstitute/sting/utils/broad/PicardPipeline.java b/public/java/src/org/broadinstitute/sting/utils/broad/PicardPipeline.java deleted file mode 100755 index 96bbb2455..000000000 --- a/public/java/src/org/broadinstitute/sting/utils/broad/PicardPipeline.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2011, The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.utils.broad; - -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang.NullArgumentException; -import org.broadinstitute.sting.datasources.pipeline.Pipeline; -import org.broadinstitute.sting.datasources.pipeline.PipelineProject; -import org.broadinstitute.sting.datasources.pipeline.PipelineSample; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.utils.yaml.YamlUtils; - -import java.io.File; -import java.io.FileNotFoundException; - -/** - * Automatically gets the latest version using PicardAggregationUtils. - */ -public class PicardPipeline { - - protected static final String PROJECT_TAG = "SQUIDProject"; - protected static final String SAMPLE_TAG = "CollaboratorID"; - protected static final String PICARD_BAM_TYPE = "cleaned"; - - private PicardPipeline() {} - - /** - * Creates a new PicardPipeline - * @param path Path to a tsv with project [tab] sample on each line or a pipeline yaml. - * @return a new Picard - * @throws FileNotFoundException when unable to find the file or any supporting files. - */ - public static Pipeline parse(File path) throws FileNotFoundException { - if (path == null) - throw new NullArgumentException("path"); - - Pipeline pipeline; - if (path.getName().endsWith(".tsv")) { - pipeline = new Pipeline(); - pipeline.getProject().setName(FilenameUtils.getBaseName(path.getPath())); - for (String line: new XReadLines(path)) { - String[] projectSample = line.split("\t"); - addSample(pipeline, projectSample[0], projectSample[1]); - } - } else if (path.getName().endsWith(".yaml")) { - pipeline = YamlUtils.load(Pipeline.class, path); - } else { - throw new UserException.BadInput("Path does not end with .tsv or .yaml: " + path.getPath()); - } - - update(pipeline); - return pipeline; - } - - private static void update(Pipeline pipeline) throws FileNotFoundException { - for (PipelineSample sample: pipeline.getSamples()) - updateSample(pipeline.getProject(), sample); - } - - private static void addSample(Pipeline pipeline, String project, String sample) { - PipelineSample pipelineSample = new PipelineSample(); - pipelineSample.getTags().put(PROJECT_TAG, project); - pipelineSample.getTags().put(SAMPLE_TAG, sample); - pipeline.getSamples().add(pipelineSample); - } - - private static void updateSample(PipelineProject pipelineProject, PipelineSample pipelineSample) throws FileNotFoundException { - if (!pipelineSample.getTags().containsKey(PROJECT_TAG) && !pipelineSample.getTags().containsKey(SAMPLE_TAG)) - return; - String project = pipelineSample.getTags().get(PROJECT_TAG); - String sample = pipelineSample.getTags().get(SAMPLE_TAG); - int version = PicardAggregationUtils.getLatestVersion(project, sample); - if (version <= 0) - throw new UserException.BadInput("Project sample not found: " + project + "/" + sample); - String bam = PicardAggregationUtils.getSampleBam(project, sample, version); - if (pipelineSample.getId() == null) - pipelineSample.setId(project + "_" + sample); - pipelineSample.getBamFiles().put(PICARD_BAM_TYPE, new File(bam)); - - PicardAnalysisFiles analysis = new PicardAnalysisFiles(project, sample, version); - if (pipelineProject.getReferenceFile() == null) { - String referenceSequence = analysis.getReferenceSequence(); - ReferenceData referenceData = ReferenceData.getByReference(referenceSequence); - pipelineProject.setReferenceFile(new File(referenceData.getReference())); - pipelineProject.setRefseqTable(new File(referenceData.getRefseq())); - if (analysis.getTargetIntervals() != null) - pipelineProject.setIntervalList(new File(analysis.getTargetIntervals())); - pipelineProject.setEvalDbsnp(new File(referenceData.getDbsnp(129))); - if (referenceData.getDbsnpVersions().contains(132)) { - pipelineProject.setGenotypeDbsnp(new File(referenceData.getDbsnp(132))); - } else { - pipelineProject.setGenotypeDbsnp(new File(referenceData.getDbsnp(129))); - } - } else { - String referenceSequence = analysis.getReferenceSequence(); - if (!pipelineProject.getReferenceFile().getPath().equals(referenceSequence)) - throw new UserException.BadInput("Samples sequenced with different references"); - } - } -} diff --git a/public/java/src/org/broadinstitute/sting/utils/broad/ReferenceData.java b/public/java/src/org/broadinstitute/sting/utils/broad/ReferenceData.java deleted file mode 100755 index 36a59ec70..000000000 --- a/public/java/src/org/broadinstitute/sting/utils/broad/ReferenceData.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2011, The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.utils.broad; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -/** - * Tracks data related to reference files at the Broad. - */ -public enum ReferenceData { - /** - * HG18 reference data - */ - HG18("hg18"), - - /** - * HG19 reference data - */ - HG19("hg19"); - - private static final String REFSEQ_DIR = "/humgen/gsa-hpprojects/GATK/data/Annotations/refseq/"; - private static final String DBSNP_DIR = "/humgen/gsa-hpprojects/GATK/data/"; - - private final String name; - private final String reference; - private final String refseq; - private final Map dbsnps; - - ReferenceData(String name) { - this.name = name; - Map dbsnps = new TreeMap(); - if ("hg18".equals(name)) { - this.reference = "/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta"; - this.refseq = REFSEQ_DIR + "refGene-big-table-hg18.txt"; - dbsnps.put(129, DBSNP_DIR + "dbsnp_129_hg18.rod"); - } else if ("hg19".equals(name)) { - this.reference = "/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta"; - this.refseq = REFSEQ_DIR + "refGene-big-table-hg19.txt"; - dbsnps.put(129, DBSNP_DIR + "dbsnp_129_b37.vcf"); - dbsnps.put(132, DBSNP_DIR + "dbsnp_132_b37.vcf"); - } else - throw new UnsupportedOperationException("Unknown reference: " + name); - this.dbsnps = Collections.unmodifiableMap(dbsnps); - } - - /** - * Returns the name of the reference. - * @return the name of the reference. - */ - public String getName() { - return name; - } - - /** - * Returns the path to the fasta. - * @return the path to the fasta. - */ - public String getReference() { - return reference; - } - - /** - * Returns the path to the refseq table. - * @return the path to the refseq table. - */ - public String getRefseq() { - return refseq; - } - - /** - * Returns the dbsnp versions available. - * @return the dbsnp versions available. - */ - public Set getDbsnpVersions() { - return dbsnps.keySet(); - } - - /** - * Returns the dbsnp path for the version. - * @param version version from getDbsnpVersions() - * @return the dbsnp path for the version. - */ - public String getDbsnp(int version) { - return dbsnps.get(version); - } - - /** - * Returns the dbsnp type for the version, "VCF" or "DBSNP". - * @param version version from getDbsnpVersions() - * @return the dbsnp type for the version, "VCF" or "DBSNP". - */ - public String getDbsnpType(int version) { - String dbsnp = getDbsnp(version); - if (dbsnp == null) - return null; - return dbsnp.toLowerCase().endsWith(".vcf") ? "VCF" : "DBSNP"; - } - - /** - * Returns the reference data based on the path or null. - * @param reference path to the reference - * @return the reference data based on the path or null. - */ - public static ReferenceData getByReference(String reference) { - for (ReferenceData data: ReferenceData.values()) - if (data.reference.equals(reference)) - return data; - return null; - } -} diff --git a/public/java/test/org/broadinstitute/sting/datasources/pipeline/PipelineUnitTest.java b/public/java/test/org/broadinstitute/sting/pipeline/PipelineUnitTest.java similarity index 96% rename from public/java/test/org/broadinstitute/sting/datasources/pipeline/PipelineUnitTest.java rename to public/java/test/org/broadinstitute/sting/pipeline/PipelineUnitTest.java index 8e18fac6f..891356670 100644 --- a/public/java/test/org/broadinstitute/sting/datasources/pipeline/PipelineUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/pipeline/PipelineUnitTest.java @@ -22,8 +22,10 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -package org.broadinstitute.sting.datasources.pipeline; +package org.broadinstitute.sting.pipeline; +import org.broadinstitute.sting.pipeline.Pipeline; +import org.broadinstitute.sting.pipeline.PipelineSample; import org.testng.Assert; import org.broadinstitute.sting.utils.yaml.YamlUtils; diff --git a/public/java/test/org/broadinstitute/sting/utils/broad/PicardAggregationUtilsUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/broad/PicardAggregationUtilsUnitTest.java deleted file mode 100755 index 77a8a1ac8..000000000 --- a/public/java/test/org/broadinstitute/sting/utils/broad/PicardAggregationUtilsUnitTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.broadinstitute.sting.utils.broad; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.io.FileNotFoundException; - -public class PicardAggregationUtilsUnitTest { - public static final String PROJECT = "C474"; - public static final String SAMPLE = "NA19651"; - public static final String MISSING_PROJECT = "C0"; - public static final String MISSING_SAMPLE = "0"; - private int latestVersion = -1; - - @Test - public void testGetLatestVersion() { - latestVersion = PicardAggregationUtils.getLatestVersion(PROJECT, SAMPLE); - System.out.println(String.format("Latest version for %s %s is %d", PROJECT, SAMPLE, latestVersion)); - Assert.assertTrue(latestVersion > 0); - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(PROJECT, SAMPLE, latestVersion), latestVersion); - } - - @Test(dependsOnMethods = "testGetLatestVersion") - public void testGetSampleBam() throws Exception { - String test = PicardAggregationUtils.getSampleBam(PROJECT, SAMPLE); - String latest = PicardAggregationUtils.getSampleBam(PROJECT, SAMPLE, latestVersion); - Assert.assertEquals(test, latest); - } - - @Test(dependsOnMethods = "testGetLatestVersion") - public void testGetSampleDir() throws Exception { - String test = PicardAggregationUtils.getSampleDir(PROJECT, SAMPLE); - String latest = PicardAggregationUtils.getSampleDir(PROJECT, SAMPLE, latestVersion); - Assert.assertEquals(test, latest); - } - - @Test(dependsOnMethods = "testGetLatestVersion") - public void testIsFinished() { - Assert.assertTrue(PicardAggregationUtils.isFinished(PROJECT, SAMPLE, latestVersion)); - Assert.assertFalse(PicardAggregationUtils.isFinished(PROJECT, SAMPLE, latestVersion + 1)); - } - - @Test(expectedExceptions = FileNotFoundException.class) - public void testMissingSampleBam() throws Exception { - PicardAggregationUtils.getSampleBam(MISSING_PROJECT, MISSING_SAMPLE); - } - - @Test(expectedExceptions = FileNotFoundException.class) - public void testMissingSampleDir() throws Exception { - PicardAggregationUtils.getSampleDir(MISSING_PROJECT, MISSING_SAMPLE); - } - - @Test - public void testLatestVersionMissing() { - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(MISSING_PROJECT, MISSING_SAMPLE), 0); - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(MISSING_PROJECT, MISSING_SAMPLE, -1), -1); - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(MISSING_PROJECT, MISSING_SAMPLE, 0), 0); - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(MISSING_PROJECT, MISSING_SAMPLE, 1), 1); - Assert.assertEquals(PicardAggregationUtils.getLatestVersion(MISSING_PROJECT, MISSING_SAMPLE, 2), 2); - } -} diff --git a/public/java/test/org/broadinstitute/sting/utils/broad/PicardAnalysisFilesUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/broad/PicardAnalysisFilesUnitTest.java deleted file mode 100755 index de58bf983..000000000 --- a/public/java/test/org/broadinstitute/sting/utils/broad/PicardAnalysisFilesUnitTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.broadinstitute.sting.utils.broad; - -import org.broadinstitute.sting.BaseTest; -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.io.FileNotFoundException; - -import static org.broadinstitute.sting.utils.broad.PicardAggregationUtilsUnitTest.*; - -public class PicardAnalysisFilesUnitTest extends BaseTest { - @Test - public void testParseLatest() throws Exception { - PicardAnalysisFiles files = new PicardAnalysisFiles(PROJECT, SAMPLE); - Assert.assertNotNull(files.getPath()); - files = new PicardAnalysisFiles(PROJECT, SAMPLE, PicardAggregationUtils.getLatestVersion(PROJECT, SAMPLE)); - Assert.assertNotNull(files.getPath()); - } - - @Test - public void testParseValid() throws Exception { - PicardAnalysisFiles file = new PicardAnalysisFiles(BaseTest.validationDataLocation + "picard_analysis_file.txt"); - Assert.assertEquals(file.getReferenceSequence(), "/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta"); - Assert.assertEquals(file.getTargetIntervals(), "/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list"); - Assert.assertEquals(file.getBaitIntervals(), "/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.baits.interval_list"); - } - - @Test - public void testParseValidWithComments() throws Exception { - PicardAnalysisFiles file = new PicardAnalysisFiles(BaseTest.validationDataLocation + "picard_analysis_file_with_comments.txt"); - Assert.assertEquals(file.getReferenceSequence(), "/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta"); - Assert.assertEquals(file.getTargetIntervals(), "/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list"); - Assert.assertEquals(file.getBaitIntervals(), "/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.baits.interval_list"); - } - - @Test(expectedExceptions = FileNotFoundException.class) - public void testParseBadPath() throws Exception { - new PicardAnalysisFiles(BaseTest.validationDataLocation + "non_existent_picard_analysis_file.txt"); - } - - @Test(expectedExceptions = FileNotFoundException.class) - public void testParseMissingLatest() throws Exception { - new PicardAnalysisFiles(MISSING_PROJECT, MISSING_SAMPLE); - } - - @Test(expectedExceptions = FileNotFoundException.class) - public void testParseMissingVersion() throws Exception { - new PicardAnalysisFiles(PROJECT, SAMPLE, PicardAggregationUtils.getLatestVersion(PROJECT, SAMPLE) + 2); - } - - @Test(expectedExceptions = UnsupportedOperationException.class) - public void testParseMultipleReferences() throws Exception { - PicardAnalysisFiles file = new PicardAnalysisFiles(BaseTest.validationDataLocation + "picard_analysis_file_with_different_references.txt"); - file.getReferenceSequence(); - } -} diff --git a/public/java/test/org/broadinstitute/sting/utils/broad/PicardPipelineUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/broad/PicardPipelineUnitTest.java deleted file mode 100755 index 121ca4619..000000000 --- a/public/java/test/org/broadinstitute/sting/utils/broad/PicardPipelineUnitTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.broadinstitute.sting.utils.broad; - -import org.testng.Assert; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.broadinstitute.sting.BaseTest; -import org.broadinstitute.sting.datasources.pipeline.Pipeline; -import org.broadinstitute.sting.datasources.pipeline.PipelineSample; -import org.broadinstitute.sting.utils.yaml.YamlUtils; -import org.testng.annotations.Test; -import static org.broadinstitute.sting.utils.broad.PicardAggregationUtilsUnitTest.*; - -import java.io.File; -import java.io.IOException; -import java.util.Collections; - -public class PicardPipelineUnitTest { - @Test - public void testParseTsv() throws IOException { - File tsv = writeTsv(PROJECT, SAMPLE); - Pipeline pipeline = PicardPipeline.parse(tsv); - validatePipeline(pipeline, FilenameUtils.getBaseName(tsv.getPath())); - } - - @Test - public void testParseTsvWithPicardComments() throws Exception { - File tsv = writeTsv("C460", "HG01359"); - PicardPipeline.parse(tsv); - } - - @Test - public void testParseYaml() throws IOException { - File yaml = writeYaml("project_name", PROJECT, SAMPLE); - Pipeline pipeline = PicardPipeline.parse(yaml); - validatePipeline(pipeline, "project_name"); - } - - private void validatePipeline(Pipeline pipeline, String name) { - Assert.assertEquals(pipeline.getProject().getName(), name); - Assert.assertTrue(pipeline.getProject().getReferenceFile().exists(), "reference not found"); - Assert.assertTrue(pipeline.getProject().getIntervalList().exists(), "intervals not found"); - Assert.assertTrue(pipeline.getProject().getRefseqTable().exists(), "refseq not found"); - Assert.assertTrue(pipeline.getProject().getGenotypeDbsnp().exists(), "genotype dbsnp not found"); - Assert.assertTrue(pipeline.getProject().getEvalDbsnp().exists(), "eval dbsnp not found"); - Assert.assertEquals(pipeline.getSamples().size(), 1); - for (PipelineSample sample: pipeline.getSamples()) { - Assert.assertEquals(sample.getId(), PROJECT + "_" + SAMPLE); - Assert.assertTrue(sample.getBamFiles().get(PicardPipeline.PICARD_BAM_TYPE).exists(), "bam not found"); - Assert.assertEquals(sample.getTags().get(PicardPipeline.PROJECT_TAG), PROJECT); - Assert.assertEquals(sample.getTags().get(PicardPipeline.SAMPLE_TAG), SAMPLE); - } - } - - private File writeTsv(String project, String sample) throws IOException { - File tsv = BaseTest.createTempFile("pipeline", ".tsv"); - FileUtils.writeLines(tsv, Collections.singletonList(project + "\t" + sample)); - return tsv; - } - - private File writeYaml(String projectName, String project, String sample) throws IOException { - File yaml = BaseTest.createTempFile("pipeline", ".yaml"); - PipelineSample pipelineSample = new PipelineSample(); - pipelineSample.getTags().put(PicardPipeline.PROJECT_TAG, project); - pipelineSample.getTags().put(PicardPipeline.SAMPLE_TAG, sample); - Pipeline pipeline = new Pipeline(); - pipeline.getProject().setName(projectName); - pipeline.getSamples().add(pipelineSample); - YamlUtils.dump(pipeline, yaml); - return yaml; - } -} diff --git a/public/java/test/org/broadinstitute/sting/utils/broad/ReferenceDataUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/broad/ReferenceDataUnitTest.java deleted file mode 100755 index e58ea3858..000000000 --- a/public/java/test/org/broadinstitute/sting/utils/broad/ReferenceDataUnitTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.broadinstitute.sting.utils.broad; - -import org.broadinstitute.sting.BaseTest; -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.io.File; - -public class ReferenceDataUnitTest { - @Test - public void testNames() { - Assert.assertEquals(ReferenceData.HG18.getName(), "hg18"); - Assert.assertEquals(ReferenceData.HG19.getName(), "hg19"); - } - - @Test - public void testFilesExist() { - for (ReferenceData data: ReferenceData.values()) { - Assert.assertTrue(new File(data.getReference()).exists()); - Assert.assertTrue(new File(data.getRefseq()).exists()); - for (int version: data.getDbsnpVersions()) { - Assert.assertTrue(new File(data.getDbsnp(version)).exists()); - } - } - } - - @Test - public void testDbsnps() { - Assert.assertTrue(new File(ReferenceData.HG18.getDbsnp(129)).exists()); - Assert.assertTrue(new File(ReferenceData.HG19.getDbsnp(129)).exists()); - Assert.assertTrue(new File(ReferenceData.HG19.getDbsnp(132)).exists()); - Assert.assertNull(ReferenceData.HG19.getDbsnp(130)); - } - - @Test - public void testDbsnpTypes() { - Assert.assertEquals(ReferenceData.HG18.getDbsnpType(129), "DBSNP"); - Assert.assertEquals(ReferenceData.HG19.getDbsnpType(129), "VCF"); - Assert.assertEquals(ReferenceData.HG19.getDbsnpType(132), "VCF"); - Assert.assertNull(ReferenceData.HG19.getDbsnpType(130)); - } - - @Test - public void testGetByReference() { - Assert.assertEquals(ReferenceData.getByReference(BaseTest.hg18Reference), ReferenceData.HG18); - Assert.assertEquals(ReferenceData.getByReference(BaseTest.hg19Reference), ReferenceData.HG19); - Assert.assertEquals(ReferenceData.getByReference("none"), null); - } -} diff --git a/public/packages/Queue.xml b/public/packages/Queue.xml index 347b24db3..58da4398e 100644 --- a/public/packages/Queue.xml +++ b/public/packages/Queue.xml @@ -33,7 +33,7 @@ - + diff --git a/public/scala/test/org/broadinstitute/sting/queue/pipeline/PipelineTest.scala b/public/scala/test/org/broadinstitute/sting/queue/pipeline/PipelineTest.scala index 6b87981ff..dc3cfd9d4 100644 --- a/public/scala/test/org/broadinstitute/sting/queue/pipeline/PipelineTest.scala +++ b/public/scala/test/org/broadinstitute/sting/queue/pipeline/PipelineTest.scala @@ -32,8 +32,6 @@ import java.util.Date import java.text.SimpleDateFormat import org.broadinstitute.sting.BaseTest import org.broadinstitute.sting.queue.QCommandLine -import org.broadinstitute.sting.datasources.pipeline.{Pipeline, PipelineProject, PipelineSample} -import org.broadinstitute.sting.utils.broad.PicardAggregationUtils import org.broadinstitute.sting.queue.util.{Logging, ProcessController} import java.io.{FileNotFoundException, File} import org.broadinstitute.sting.gatk.report.GATKReportParser @@ -42,23 +40,6 @@ import org.broadinstitute.sting.queue.engine.CommandLinePluginManager object PipelineTest extends BaseTest with Logging { - case class K1gBam(squidId: String, sampleId: String, version: Int) - - /** 1000G BAMs used for validation */ - val k1gBams = List( - new K1gBam("C474", "NA19651", 2), - new K1gBam("C474", "NA19655", 2), - new K1gBam("C474", "NA19669", 2), - new K1gBam("C454", "NA19834", 2), - new K1gBam("C460", "HG01440", 2), - new K1gBam("C456", "NA12342", 2), - new K1gBam("C456", "NA12748", 2), - new K1gBam("C474", "NA19649", 2), - new K1gBam("C474", "NA19652", 2), - new K1gBam("C474", "NA19654", 2)) - - validateK1gBams() - private val validationReportsDataLocation = "/humgen/gsa-hpprojects/GATK/validationreports/submitted/" val run = System.getProperty("pipeline.run") == "run" @@ -92,49 +73,6 @@ object PipelineTest extends BaseTest with Logging { */ private def tempDir(testName: String, jobRunner: String) = testDir(testName, jobRunner) + "temp/" - /** - * Creates a new pipeline from a project. - * @param project Pipeline project info. - * @param samples List of samples. - * @return a new pipeline project. - */ - def createPipeline(project: PipelineProject, samples: List[PipelineSample]) = { - val pipeline = new Pipeline - pipeline.setProject(project) - pipeline.setSamples(samples) - pipeline - } - - /** - * Creates a new pipeline project for hg19 with b37 132 dbsnp for genotyping, and b37 129 dbsnp for eval. - * @param projectName Name of the project. - * @param intervals The intervals file to use. - * @return a new pipeline project. - */ - def createHg19Project(projectName: String, intervals: String) = { - val project = new PipelineProject - project.setName(projectName) - project.setReferenceFile(new File(BaseTest.hg19Reference)) - project.setGenotypeDbsnp(new File(BaseTest.b37dbSNP132)) - project.setEvalDbsnp(new File(BaseTest.b37dbSNP129)) - project.setRefseqTable(new File(BaseTest.hg19Refseq)) - project.setIntervalList(new File(intervals)) - project - } - - /** - * Creates a 1000G pipeline sample from one of the bams. - * @param idPrefix Text to prepend to the sample name. - * @param k1gBam bam to create the sample for. - * @return the created pipeline sample. - */ - def createK1gSample(idPrefix: String, k1gBam: K1gBam) = { - val sample = new PipelineSample - sample.setId(idPrefix + "_" + k1gBam.sampleId) - sample.setBamFiles(Map("cleaned" -> getPicardBam(k1gBam))) - sample - } - /** * Runs the pipelineTest. * @param pipelineTest test to run. @@ -267,31 +205,6 @@ object PipelineTest extends BaseTest with Logging { } } - /** - * Throws an exception if any of the 1000G bams do not exist and warns if they are out of date. - */ - private def validateK1gBams() { - var missingBams = List.empty[File] - for (k1gBam <- k1gBams) { - val latest = getLatestVersion(k1gBam) - val bam = getPicardBam(k1gBam) - if (k1gBam.version != latest) - logger.warn("1000G bam is not the latest version %d: %s".format(latest, k1gBam)) - if (!bam.exists) - missingBams :+= bam - } - if (missingBams.size > 0) { - val nl = "%n".format() - throw new FileNotFoundException("The following 1000G bam files are missing.%n%s".format(missingBams.mkString(nl))) - } - } - - private def getPicardBam(k1gBam: K1gBam): File = - new File(PicardAggregationUtils.getSampleBam(k1gBam.squidId, k1gBam.sampleId, k1gBam.version)) - - private def getLatestVersion(k1gBam: K1gBam): Int = - PicardAggregationUtils.getLatestVersion(k1gBam.squidId, k1gBam.sampleId, k1gBam.version) - private var runningCommandLines = Set.empty[QCommandLine] Runtime.getRuntime.addShutdownHook(new Thread { From 17ff5bb09436b8805657859b787f4f7f8714cc08 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Sat, 2 Jul 2011 09:55:35 -0400 Subject: [PATCH 017/161] Variant records coming out of the VQSR are now annotated with which input annotation was most divergent from the Gaussian mixture model. This gives a general sense for why each variant was removed from the callset. --- .../ApplyRecalibration.java | 8 +++++++- .../GaussianMixtureModel.java | 13 +++++++++++++ .../VariantDataManager.java | 4 +++- .../variantrecalibration/VariantDatum.java | 1 + .../VariantRecalibrator.java | 2 ++ .../VariantRecalibratorEngine.java | 17 +++++++++++++++++ ...iantRecalibrationWalkersIntegrationTest.java | 4 ++-- 7 files changed, 45 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java index 9877781d1..02d850211 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java @@ -55,7 +55,6 @@ import java.util.*; public class ApplyRecalibration extends RodWalker { - ///////////////////////////// // Inputs ///////////////////////////// @@ -86,6 +85,7 @@ public class ApplyRecalibration extends RodWalker { final private List tranches = new ArrayList(); final private Set inputNames = new HashSet(); final private NestedHashMap lodMap = new NestedHashMap(); + final private NestedHashMap annotationMap = new NestedHashMap(); final private Set ignoreInputFilterSet = new TreeSet(); //--------------------------------------------------------------------------------------------------------------- @@ -124,6 +124,7 @@ public class ApplyRecalibration extends RodWalker { final Set hInfo = new HashSet(); hInfo.addAll(VCFUtils.getHeaderFields(getToolkit(), inputNames)); hInfo.add(new VCFInfoHeaderLine(VariantRecalibrator.VQS_LOD_KEY, 1, VCFHeaderLineType.Float, "Log odds ratio of being a true variant versus being false under the trained gaussian mixture model")); + hInfo.add(new VCFInfoHeaderLine(VariantRecalibrator.CULPRIT_KEY, 1, VCFHeaderLineType.String, "The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out")); final TreeSet samples = new TreeSet(); samples.addAll(SampleUtils.getUniqueSamplesFromRods(getToolkit(), inputNames)); @@ -149,6 +150,7 @@ public class ApplyRecalibration extends RodWalker { for ( final String line : new XReadLines( RECAL_FILE ) ) { final String[] vals = line.split(","); lodMap.put( Double.parseDouble(vals[3]), vals[0], Integer.parseInt(vals[1]), Integer.parseInt(vals[2]) ); // value comes before the keys + annotationMap.put( vals[4], vals[0], Integer.parseInt(vals[1]), Integer.parseInt(vals[2]) ); // value comes before the keys } } catch ( FileNotFoundException e ) { throw new UserException.CouldNotReadInputFile(RECAL_FILE, e); @@ -174,11 +176,15 @@ public class ApplyRecalibration extends RodWalker { String filterString = null; final Map attrs = new HashMap(vc.getAttributes()); final Double lod = (Double) lodMap.get( vc.getChr(), vc.getStart(), vc.getEnd() ); + final String worstAnnotation = (String) annotationMap.get( vc.getChr(), vc.getStart(), vc.getEnd() ); if( lod == null ) { throw new UserException("Encountered input variant which isn't found in the input recal file. Please make sure VariantRecalibrator and ApplyRecalibration were run on the same set of input variants. First seen at: " + vc ); } + // Annotate the new record with its VQSLOD and the worst performing annotation attrs.put(VariantRecalibrator.VQS_LOD_KEY, String.format("%.4f", lod)); + attrs.put(VariantRecalibrator.CULPRIT_KEY, worstAnnotation); + for( int i = tranches.size() - 1; i >= 0; i-- ) { final Tranche tranche = tranches.get(i); if( lod >= tranche.minVQSLod ) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java index 9ffe7be7a..a09a30145 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java @@ -190,6 +190,19 @@ public class GaussianMixtureModel { return MathUtils.log10sumLog10(pVarInGaussianLog10); // Sum(pi_k * p(v|n,k)) } + public Double evaluateDatumInOneDimension( final VariantDatum datum, final int iii ) { + if(datum.isNull[iii]) { return null; } + + final Normal normal = new Normal(0.0, 1.0, null); + final double[] pVarInGaussianLog10 = new double[gaussians.size()]; + int gaussianIndex = 0; + for( final MultivariateGaussian gaussian : gaussians ) { + normal.setState( gaussian.mu[iii], gaussian.sigma.get(iii, iii) ); + pVarInGaussianLog10[gaussianIndex++] = gaussian.pMixtureLog10 + Math.log10( normal.pdf( datum.annotations[iii] ) ); + } + return MathUtils.log10sumLog10(pVarInGaussianLog10); // Sum(pi_k * p(v|n,k)) + } + public double evaluateDatumMarginalized( final VariantDatum datum ) { int numVals = 0; double sumPVarInGaussian = 0.0; 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 2fd1326fe..efff5b780 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 @@ -254,7 +254,9 @@ public class VariantDataManager { public void writeOutRecalibrationTable( final PrintStream RECAL_FILE ) { for( final VariantDatum datum : data ) { - RECAL_FILE.println(String.format("%s,%d,%d,%.4f", datum.contig, datum.start, datum.stop, datum.lod)); + RECAL_FILE.println(String.format("%s,%d,%d,%.4f,%s", + datum.contig, datum.start, datum.stop, datum.lod, + (datum.worstAnnotation != -1 ? annotationKeys.get(datum.worstAnnotation) : "NULL"))); } } } 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 ac875b645..38e2affb6 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 @@ -24,6 +24,7 @@ public class VariantDatum implements Comparable { public String contig; public int start; public int stop; + public int worstAnnotation; public MultivariateGaussian assignment; // used in K-means implementation public int compareTo( final VariantDatum other ) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java index e651b62e0..b5fda4443 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java @@ -60,6 +60,7 @@ import java.util.*; public class VariantRecalibrator extends RodWalker, ExpandingArrayList> implements TreeReducible> { public static final String VQS_LOD_KEY = "VQSLOD"; + public static final String CULPRIT_KEY = "culprit"; @ArgumentCollection private VariantRecalibratorArgumentCollection VRAC = new VariantRecalibratorArgumentCollection(); @@ -232,6 +233,7 @@ public class VariantRecalibrator extends RodWalker randomData = dataManager.getRandomDataForPlotting( 6000 ); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibratorEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibratorEngine.java index a0fbc572d..81e4d190c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibratorEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibratorEngine.java @@ -57,6 +57,23 @@ public class VariantRecalibratorEngine { } } + public void calculateWorstPerformingAnnotation( final List data, final GaussianMixtureModel goodModel, final GaussianMixtureModel badModel ) { + for( final VariantDatum datum : data ) { + int worstAnnotation = -1; + double minProb = Double.MAX_VALUE; + for( int iii = 0; iii < datum.annotations.length; iii++ ) { + final Double goodProbLog10 = goodModel.evaluateDatumInOneDimension(datum, iii); + final Double badProbLog10 = badModel.evaluateDatumInOneDimension(datum, iii); + if( goodProbLog10 != null && badProbLog10 != null ) { + final double prob = goodProbLog10 - badProbLog10; + if(prob < minProb) { minProb = prob; worstAnnotation = iii; } + } + } + datum.worstAnnotation = worstAnnotation; + } + } + + ///////////////////////////// // Private Methods used for generating a GaussianMixtureModel ///////////////////////////// diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java index eb6a1a4c6..9600046da 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java @@ -26,8 +26,8 @@ public class VariantRecalibrationWalkersIntegrationTest extends WalkerTest { VRTest lowPass = new VRTest("phase1.projectConsensus.chr20.raw.snps.vcf", "d33212a84368e821cbedecd4f59756d6", // tranches - "a35cd067f378442eee8cd5edeea92be0", // recal file - "126d52843f4a57199ee97750ffc16a07"); // cut VCF + "4652dca41222bebdf9d9fda343b2a835", // recal file + "5350b1a4c1250cf3b77ca45327c04711"); // cut VCF @DataProvider(name = "VRTest") public Object[][] createData1() { From 5faf40b79deea87ceb0e682bf6e27721cc51f621 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Sat, 2 Jul 2011 10:39:53 -0400 Subject: [PATCH 019/161] Moving AnalyzeAnnotations into the archive because it has outlived its usefulness. --- .../R/plot_Annotations_BinnedTruthMetrics.R | 190 ------------------ .../AnalyzeAnnotationsWalker.java | 154 -------------- .../AnnotationDataManager.java | 169 ---------------- .../analyzeannotations/AnnotationDatum.java | 170 ---------------- public/packages/GenomeAnalysisTK.xml | 1 - 5 files changed, 684 deletions(-) delete mode 100644 public/R/plot_Annotations_BinnedTruthMetrics.R delete mode 100755 public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnalyzeAnnotationsWalker.java delete mode 100755 public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDataManager.java delete mode 100755 public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDatum.java diff --git a/public/R/plot_Annotations_BinnedTruthMetrics.R b/public/R/plot_Annotations_BinnedTruthMetrics.R deleted file mode 100644 index 9f9ee290c..000000000 --- a/public/R/plot_Annotations_BinnedTruthMetrics.R +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/env Rscript - -args <- commandArgs(TRUE) -verbose = TRUE - -input = args[1] -annotationName = args[2] -minBinCutoff = as.numeric(args[3]) -medianNumVariants = args[4] - -c <- read.table(input, header=T) - -all = c[c$numVariants>minBinCutoff & c$category=="all",] -novel = c[c$numVariants>minBinCutoff & c$category=="novel",] -dbsnp = c[c$numVariants>minBinCutoff & c$category=="dbsnp",] -truth = c[c$numVariants>minBinCutoff & c$category=="truth",] - -# -# Calculate min, max, medians -# - -d = c[c$numVariants>minBinCutoff,] -ymin = min(d$titv) -ymax = max(d$titv) -xmin = min(d$value) -xmax = max(d$value) -m = weighted.mean(all$value,all$numVariants/sum(all$numVariants)) -ma = all[all$value > m,] -mb = all[all$value < m,] -m75 = weighted.mean(ma$value,ma$numVariants/sum(ma$numVariants)) -m25 = weighted.mean(mb$value,mb$numVariants/sum(mb$numVariants)) -if(medianNumVariants == "true") { -vc = cumsum( all$numVariants/sum(all$numVariants) ) -m10 = all$value[ max(which(vc<=0.10)) ] -m25 = all$value[ max(which(vc<=0.25)) ] -m = all$value[ max(which(vc<=0.5)) ] -m75 = all$value[ min(which(vc>=0.75)) ] -m90 = all$value[ min(which(vc>=0.90)) ] -} - -# -# Plot TiTv ratio as a function of the annotation -# - -outfile = paste(input, ".TiTv.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -plot(all$value,all$titv,xlab=annotationName,ylab="Ti/Tv Ratio",pch=20,ylim=c(ymin,ymax),xaxt="n",ps=14); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -abline(v=m,lty=2,col="red") -abline(v=m75,lty=3) -abline(v=m25,lty=3) -text(m, ymin, "50", col="red", cex=0.6); -text(m75, ymin, "75", col="black", cex=0.6); -text(m25, ymin, "25", col="black", cex=0.6); -if(medianNumVariants == "true") { -abline(v=m90,lty=3) -abline(v=m10,lty=3) -text(m10, ymin, "10", col="black", cex=0.6); -text(m90, ymin, "90", col="black", cex=0.6); -} -points(novel$value,novel$titv,col="green",pch=20) -points(dbsnp$value,dbsnp$titv,col="blue",pch=20) -if( sum(all$truePositive==0) != length(all$truePositive) ) { -points(truth$value,truth$titv,col="magenta",pch=20) -legend("topleft", c("all","novel","dbsnp","truth"),col=c("black","green","blue","magenta"),pch=c(20,20,20,20)) -} else { -legend("topleft", c("all","novel","dbsnp"),col=c("black","green","blue"),pch=c(20,20,20)) -} -dev.off() - -# -# Plot TiTv ratio as a function of the annotation, log scale on the x-axis -# - -outfile = paste(input, ".TiTv_log.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -plot(all$value,all$titv,xlab=annotationName,log="x",ylab="Ti/Tv Ratio",pch=20,ylim=c(ymin,ymax),xaxt="n",ps=14); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -abline(v=m,lty=2,col="red") -abline(v=m75,lty=3) -abline(v=m25,lty=3) -text(m, ymin, "50", col="red", cex=0.6); -text(m75, ymin, "75", col="black", cex=0.6); -text(m25, ymin, "25", col="black", cex=0.6); -if(medianNumVariants == "true") { -abline(v=m90,lty=3) -abline(v=m10,lty=3) -text(m10, ymin, "10", col="black", cex=0.6); -text(m90, ymin, "90", col="black", cex=0.6); -} -points(novel$value,novel$titv,col="green",pch=20) -points(dbsnp$value,dbsnp$titv,col="blue",pch=20) -if( sum(all$truePositive==0) != length(all$truePositive) ) { -points(truth$value,truth$titv,col="magenta",pch=20) -legend("topleft", c("all","novel","dbsnp","truth"),col=c("black","green","blue","magenta"),pch=c(20,20,20,20)) -} else { -legend("topleft", c("all","novel","dbsnp"),col=c("black","green","blue"),pch=c(20,20,20)) -} -dev.off() - -# -# Plot dbsnp and true positive rate as a function of the annotation -# - -ymin = min(all$dbsnp) -ymax = max(all$dbsnp) -outfile = paste(input, ".truthRate.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -yLabel = "DBsnp Rate" -if( sum(all$truePositive==0) != length(all$truePositive) ) { -t = all[all$truePositive>0,] -yLabel = "DBsnp/True Positive Rate" -ymin = min(min(all$dbsnp),min(t$truePositive)) -ymax = max(max(all$dbsnp),max(t$truePositive)) -} -plot(all$value,all$dbsnp,xlab=annotationName,ylab=yLabel,pch=20,ylim=c(ymin,ymax),xaxt="n",ps=14); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -abline(v=m,lty=2,col="red") -abline(v=m75,lty=3) -abline(v=m25,lty=3) -text(m, ymin, "50", col="red", cex=0.6); -text(m75, ymin, "75", col="black", cex=0.6); -text(m25, ymin, "25", col="black", cex=0.6); -if(medianNumVariants == "true") { -abline(v=m90,lty=3) -abline(v=m10,lty=3) -text(m10, ymin, "10", col="black", cex=0.6); -text(m90, ymin, "90", col="black", cex=0.6); -} -if( sum(all$truePositive==0) != length(all$truePositive) ) { -points(t$value,t$truePositive,col="magenta",pch=20); -legend("topleft", c("dbsnp","truth"),col=c("black","magenta"),pch=c(20,20)) -} -dev.off() - -# -# Plot dbsnp and true positive rate as a function of the annotation, log scale on the x-axis -# - -outfile = paste(input, ".truthRate_log.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -yLabel = "DBsnp Rate" -if( sum(all$truePositive==0) != length(all$truePositive) ) { -yLabel = "DBsnp/Truth Rate" -} -plot(all$value,all$dbsnp,xlab=annotationName,log="x",ylab=yLabel,ylim=c(ymin,ymax),pch=20,xaxt="n",ps=14); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -abline(v=m,lty=2,col="red") -abline(v=m75,lty=3) -abline(v=m25,lty=3) -text(m, ymin, "50", col="red", cex=0.6); -text(m75, ymin, "75", col="black", cex=0.6); -text(m25, ymin, "25", col="black", cex=0.6); -if(medianNumVariants == "true") { -abline(v=m90,lty=3) -abline(v=m10,lty=3) -text(m10, ymin, "10", col="black", cex=0.6); -text(m90, ymin, "90", col="black", cex=0.6); -} -if( sum(all$truePositive==0) != length(all$truePositive) ) { -points(t$value,t$truePositive,col="magenta",pch=20); -legend("topleft", c("dbsnp","truth"),col=c("black","magenta"),pch=c(20,20)) -} -dev.off() - -# -# Plot histogram of the annotation's value -# - -outfile = paste(input, ".Histogram.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -plot(all$value,all$numVariants,xlab=annotationName,ylab="Num variants in bin",type="h",xaxt="n",ps=14,lwd=4); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -dev.off() - -# -# Plot histogram of the annotation's value, log scale on x-axis -# - -outfile = paste(input, ".Histogram_log.pdf", sep="") -pdf(outfile, height=7, width=7) -par(cex=1.1) -plot(all$value,all$numVariants,xlab=annotationName,log="x",ylab="Num variants in bin",type="h",xaxt="n",ps=14,lwd=4); -axis(1,axTicks(1), format(axTicks(1), scientific=F)) -dev.off() diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnalyzeAnnotationsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnalyzeAnnotationsWalker.java deleted file mode 100755 index 54fd0a20c..000000000 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnalyzeAnnotationsWalker.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2010 The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR - * THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.gatk.walkers.analyzeannotations; - -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.commandline.Argument; - -import java.util.HashMap; -import java.util.Collection; - -/** - * Takes variant calls as .vcf files and creates plots of truth metrics as a function of the various annotations found in the INFO field. - * - * @author rpoplin - * @since Jan 15, 2010 - * @help.summary Takes variant calls as .vcf files and creates plots of truth metrics as a function of the various annotations found in the INFO field. - */ - -public class AnalyzeAnnotationsWalker extends RodWalker { - - ///////////////////////////// - // Command Line Arguments - ///////////////////////////// - @Argument(fullName = "output_prefix", shortName = "output", doc = "The output path and name to prepend to all plots and intermediate data files", required = false) - private String OUTPUT_PREFIX = "analyzeAnnotations/"; - @Argument(fullName = "path_to_Rscript", shortName = "Rscript", doc = "The path to your implementation of Rscript. For Broad users this is maybe /broad/tools/apps/R-2.6.0/bin/Rscript", required = false) - private String PATH_TO_RSCRIPT = "Rscript"; - @Argument(fullName = "path_to_resources", shortName = "resources", doc = "Path to resources folder holding the Sting R scripts.", required = false) - private String PATH_TO_RESOURCES = "R/"; - @Argument(fullName = "min_variants_per_bin", shortName = "minBinSize", doc = "The minimum number of variants in a bin in order to calculate truth metrics.", required = false) - private int MIN_VARIANTS_PER_BIN = 1000; - @Argument(fullName = "max_variants_per_bin", shortName = "maxBinSize", doc = "The maximum number of variants in a bin.", required = false) - private int MAX_VARIANTS_PER_BIN = 20000; - @Argument(fullName = "sampleName", shortName = "sampleName", doc = "If supplied, only process variants found in this sample.", required = false) - private String SAMPLE_NAME = null; - @Argument(fullName = "name", shortName = "name", doc = "Labels for the annotations to make plots look nicer. Each name is a separate -name argument. For example, -name DP,Depth -name AB,AlleleBalance", required = false) - private String[] ANNOTATION_NAMES = null; - @Argument(fullName = "indicate_mean_num_vars", shortName = "meanNumVars", doc = "If supplied, plots will indicate the distribution of number of variants instead of distribution of value of annotation", required = false) - private boolean INDICATE_MEAN_NUM_VARS = false; - - ///////////////////////////// - // Private Member Variables - ///////////////////////////// - private AnnotationDataManager dataManager; - - //--------------------------------------------------------------------------------------------------------------- - // - // initialize - // - //--------------------------------------------------------------------------------------------------------------- - - public void initialize() { - - // Create a HashMap associating the names of the annotations to full Strings that can be used as labels on plots - HashMap nameMap = null; - if( ANNOTATION_NAMES != null ) { - nameMap = new HashMap(); - for( String nameLine : ANNOTATION_NAMES ) { - String[] vals = nameLine.split(","); - nameMap.put(vals[0],vals[1]); - } - } - dataManager = new AnnotationDataManager( nameMap, INDICATE_MEAN_NUM_VARS ); - - if( !PATH_TO_RESOURCES.endsWith("/") ) { PATH_TO_RESOURCES = PATH_TO_RESOURCES + "/"; } - } - - //--------------------------------------------------------------------------------------------------------------- - // - // map - // - //--------------------------------------------------------------------------------------------------------------- - - public Integer map( RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context ) { - - if( tracker != null ) { - Collection VCs = tracker.getAllVariantContexts(ref); - - // First find out if this variant is in the truth sets - boolean isInTruthSet = false; - boolean isTrueVariant = false; - for ( VariantContext vc : VCs ) { - if( vc != null && vc.isSNP() && !vc.isFiltered() ) { - if( vc.getSource().toUpperCase().startsWith("TRUTH") ) { - isInTruthSet = true; - if( vc.isBiallelic() && vc.isVariant() ) { - isTrueVariant = true; - } - } - } - } - - // Add each annotation in this VCF Record to the dataManager - for ( VariantContext vc : VCs ) { - if( vc != null && vc.isSNP() && vc.isBiallelic() && !vc.isFiltered() ) { - if( !vc.getSource().toUpperCase().startsWith("TRUTH") ) { - if( vc.isVariant() ) { - dataManager.addAnnotations( vc, SAMPLE_NAME, isInTruthSet, isTrueVariant ); - } - } - } - } - } - - return 1; // This value isn't actually used for anything - } - - //--------------------------------------------------------------------------------------------------------------- - // - // reduce - // - //--------------------------------------------------------------------------------------------------------------- - - public Integer reduceInit() { - return 0; // Nothing to do here - } - - public Integer reduce( Integer value, Integer sum ) { - return 0; // Nothing to do here - } - - public void onTraversalDone( Integer sum ) { - - // For each annotation, decide how to cut up the data, output intermediate cumulative p(true) tables, and call RScript to plot the tables - dataManager.plotCumulativeTables(PATH_TO_RSCRIPT, PATH_TO_RESOURCES, OUTPUT_PREFIX, MIN_VARIANTS_PER_BIN, MAX_VARIANTS_PER_BIN); - } -} \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDataManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDataManager.java deleted file mode 100755 index 2c06b30d6..000000000 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDataManager.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.broadinstitute.sting.gatk.walkers.analyzeannotations; - -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; -import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.utils.exceptions.UserException; - -import java.io.File; -import java.util.*; -import java.io.IOException; -import java.io.PrintStream; -import java.io.FileNotFoundException; - -/* - * Copyright (c) 2010 The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * Created by IntelliJ IDEA. - * User: rpoplin - * Date: Jan 18, 2010 - */ - -public class AnnotationDataManager { - - private final HashMap> data; - private final HashMap nameMap; - private final boolean INDICATE_MEAN_NUM_VARS; - - public AnnotationDataManager( HashMap _nameMap, boolean _INDICATE_MEAN_NUM_VARS ) { - data = new HashMap>(); - nameMap = _nameMap; - INDICATE_MEAN_NUM_VARS = _INDICATE_MEAN_NUM_VARS; - } - - public void addAnnotations( final VariantContext vc, final String sampleName, final boolean isInTruthSet, final boolean isTrueVariant ) { - - if( sampleName != null ) { // Only process variants that are found in the sample with this sampleName - if( vc.getGenotype(sampleName).isNoCall() ) { // This variant isn't found in this sample so break out - return; - } - } // else, process all samples - - // Loop over each annotation in the vcf record - final Map infoField = new HashMap(vc.getAttributes()); - infoField.put("QUAL", ((Double)vc.getPhredScaledQual()).toString() ); // add QUAL field to annotations - for( Map.Entry annotation : infoField.entrySet() ) { - - float value; - try { - value = Float.parseFloat( annotation.getValue().toString() ); - } catch( NumberFormatException e ) { - continue; // Skip over annotations that aren't floats, like "DB" - } - - TreeSet treeSet = data.get( annotation.getKey() ); - if( treeSet == null ) { // This annotation hasn't been seen before - treeSet = new TreeSet( new AnnotationDatum() ); // AnnotationDatum is a Comparator that orders variants by the value of the Annotation - data.put( annotation.getKey(), treeSet ); - } - AnnotationDatum datum = new AnnotationDatum( value ); - if( treeSet.contains(datum) ) { // contains() uses AnnotationDatum's equals function, so it only checks if the value field is already present - datum = treeSet.tailSet(datum).first(); - } else { - treeSet.add(datum); - } - - final boolean isNovelVariant = !vc.hasID() || !vc.getID().contains("rs"); - - // Decide if the variant is a transition or transversion - if( VariantContextUtils.getSNPSubstitutionType(vc).compareTo(BaseUtils.BaseSubstitutionType.TRANSITION) == 0 ) { - datum.incrementTi( isNovelVariant, isInTruthSet, isTrueVariant ); - } else { - datum.incrementTv( isNovelVariant, isInTruthSet, isTrueVariant ); - } - } - } - - public void plotCumulativeTables( final String PATH_TO_RSCRIPT, final String PATH_TO_RESOURCES, final String OUTPUT_PREFIX, - final int MIN_VARIANTS_PER_BIN, final int MAX_VARIANTS_PER_BIN ) { - - final AnnotationDatum thisAnnotationBin = new AnnotationDatum(); - System.out.println( "\nFinished reading variants into memory. Executing RScript commands:" ); - - // For each annotation we've seen - for( final String annotationKey : data.keySet() ) { - - String filename = OUTPUT_PREFIX + annotationKey + ".dat"; - PrintStream output; - try { - output = new PrintStream(filename); // Create the intermediate data file for this annotation - } catch ( FileNotFoundException e ) { - throw new UserException.CouldNotCreateOutputFile(new File(filename), "Can't create intermediate output annotation data file. Does the output directory exist?", e); - } - - // Output a header line - output.println("value\ttitv\tdbsnp\ttruePositive\tnumVariants\tcategory"); - - // Bin SNPs and calculate truth metrics for each bin - thisAnnotationBin.clearBin(); - for( final AnnotationDatum datum : data.get( annotationKey ) ) { - thisAnnotationBin.combine( datum ); - if( thisAnnotationBin.numVariants( AnnotationDatum.FULL_SET ) >= MAX_VARIANTS_PER_BIN ) { // This annotation bin is full - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.FULL_SET ) + "\t" + thisAnnotationBin.calcDBsnpRate() + "\t" + thisAnnotationBin.calcTPrate() + - "\t" + thisAnnotationBin.numVariants( AnnotationDatum.FULL_SET ) + "\tall"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.NOVEL_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.NOVEL_SET ) + "\tnovel"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.DBSNP_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.DBSNP_SET ) + "\tdbsnp"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.TRUTH_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.TRUTH_SET ) + "\ttruth"); - thisAnnotationBin.clearBin(); - } - // else, continue accumulating variants because this bin isn't full yet - } - - // One final bin that may not have been dumped out - if( thisAnnotationBin.numVariants( AnnotationDatum.FULL_SET ) != 0 ) { - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.FULL_SET ) + "\t" + thisAnnotationBin.calcDBsnpRate() + "\t" + thisAnnotationBin.calcTPrate() + - "\t" + thisAnnotationBin.numVariants( AnnotationDatum.FULL_SET ) + "\tall"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.NOVEL_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.NOVEL_SET ) + "\tnovel"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.DBSNP_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.DBSNP_SET ) + "\tdbsnp"); - output.println( thisAnnotationBin.value + "\t" + thisAnnotationBin.calcTiTv( AnnotationDatum.TRUTH_SET ) + "\t-1\t-1\t" + thisAnnotationBin.numVariants( AnnotationDatum.TRUTH_SET ) + "\ttruth"); - thisAnnotationBin.clearBin(); - } - - // Close the PrintStream - output.close(); - - String annotationName = null; - if( nameMap != null ) { - annotationName = nameMap.get(annotationKey); - } - if( annotationName == null ) { // This annotation is not in the name map so use the key instead - annotationName = annotationKey; - } - - // Print out the command line to make it clear to the user what is being executed and how one might modify it - final String rScriptCommandLine = PATH_TO_RSCRIPT + " " + PATH_TO_RESOURCES + "plot_Annotations_BinnedTruthMetrics.R" + " " + - OUTPUT_PREFIX + annotationKey + ".dat" + " " + annotationName + " " + MIN_VARIANTS_PER_BIN + " " + INDICATE_MEAN_NUM_VARS; - System.out.println( rScriptCommandLine ); - - // Execute the RScript command to plot the table of truth values - try { - Runtime.getRuntime().exec( rScriptCommandLine ); - } catch ( IOException e ) { - throw new UserException.CannotExecuteRScript( rScriptCommandLine, e ); - } - } - } -} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDatum.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDatum.java deleted file mode 100755 index 888eb7e6e..000000000 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/analyzeannotations/AnnotationDatum.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.broadinstitute.sting.gatk.walkers.analyzeannotations; - -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - -import java.util.Comparator; - -/* - * Copyright (c) 2010 The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * Created by IntelliJ IDEA. - * User: rpoplin - * Date: Jan 18, 2010 - */ - -public class AnnotationDatum implements Comparator { - - public float value; - private final int[] ti; - private final int[] tv; - - public static final int FULL_SET = 0; - public static final int NOVEL_SET = 1; - public static final int DBSNP_SET = 2; - public static final int TRUTH_SET = 3; - public static final int TRUE_POSITIVE = 4; - private static final int NUM_SETS = 5; - - public AnnotationDatum() { - - value = 0.0f; - ti = new int[NUM_SETS]; - tv = new int[NUM_SETS]; - for( int iii = 0; iii < NUM_SETS; iii++ ) { - ti[iii] = 0; - tv[iii] = 0; - } - } - - public AnnotationDatum( final float _value ) { - - value = _value; - ti = new int[NUM_SETS]; - tv = new int[NUM_SETS]; - for( int iii = 0; iii < NUM_SETS; iii++ ) { - ti[iii] = 0; - tv[iii] = 0; - } - } - - final public void incrementTi( final boolean isNovelVariant, final boolean isInTruthSet, final boolean isTrueVariant ) { - - ti[FULL_SET]++; - if( isNovelVariant ) { - ti[NOVEL_SET]++; - } else { // Is known, in DBsnp - ti[DBSNP_SET]++; - } - if( isInTruthSet ) { - ti[TRUTH_SET]++; - if( isTrueVariant ) { - ti[TRUE_POSITIVE]++; - } - } - } - - final public void incrementTv( final boolean isNovelVariant, final boolean isInTruthSet, final boolean isTrueVariant ) { - - tv[FULL_SET]++; - if( isNovelVariant ) { - tv[NOVEL_SET]++; - } else { // Is known, in DBsnp - tv[DBSNP_SET]++; - } - if( isInTruthSet ) { - tv[TRUTH_SET]++; - if( isTrueVariant ) { - tv[TRUE_POSITIVE]++; - } - } - } - - final public void combine( final AnnotationDatum that ) { - - for( int iii = 0; iii < NUM_SETS; iii++ ) { - this.ti[iii] += that.ti[iii]; - this.tv[iii] += that.tv[iii]; - } - this.value = that.value; // Overwrite this bin's value - } - - final public float calcTiTv( final int INDEX ) { - - if( ti[INDEX] < 0 || tv[INDEX] < 0 ) { - throw new ReviewedStingException( "Integer overflow detected! There are too many variants piled up in one annotation bin." ); - } - - if( tv[INDEX] == 0 ) { // Don't divide by zero - return 0.0f; - } - - return ((float) ti[INDEX]) / ((float) tv[INDEX]); - } - - final public float calcDBsnpRate() { - - if( ti[FULL_SET] + tv[FULL_SET] == 0 ) { // Don't divide by zero - return 0.0f; - } - - return 100.0f * ((float) ti[DBSNP_SET] + tv[DBSNP_SET]) / - ((float) ti[FULL_SET] + tv[FULL_SET]); - } - - final public float calcTPrate() { - - if( ti[TRUTH_SET] + tv[TRUTH_SET] == 0 ) { // Don't divide by zero - return 0.0f; - } - - return 100.0f * ((float) ti[TRUE_POSITIVE] + tv[TRUE_POSITIVE]) / - ((float) ti[TRUTH_SET] + tv[TRUTH_SET]); - } - - final public int numVariants( final int INDEX ) { - return ti[INDEX] + tv[INDEX]; - } - - final public void clearBin() { - value = 0.0f; - for( int iii = 0; iii < NUM_SETS; iii++ ) { - ti[iii] = 0; - tv[iii] = 0; - } - } - - public int compare( AnnotationDatum a1, AnnotationDatum a2 ) { // Function needed for this to be a Comparator - if( a1.value < a2.value ) { return -1; } - if( a1.value > a2.value ) { return 1; } - return 0; - } - - public int equals( AnnotationDatum that ) { // Function needed for this to be sorted correctly in a TreeSet - if( this.value < that.value ) { return -1; } - if( this.value > that.value ) { return 1; } - return 0; - } -} diff --git a/public/packages/GenomeAnalysisTK.xml b/public/packages/GenomeAnalysisTK.xml index f923ea698..14b837211 100644 --- a/public/packages/GenomeAnalysisTK.xml +++ b/public/packages/GenomeAnalysisTK.xml @@ -19,7 +19,6 @@ - From 09af6bbc6c548082edc09883980e12e5d72fbfa4 Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Sat, 2 Jul 2011 16:58:57 -0400 Subject: [PATCH 022/161] Ugh - backed out experimental code not for public consumption unintendedly committed --- .../IndelGenotypeLikelihoodsCalculationModel.java | 4 ++-- .../gatk/walkers/indels/PairHMMIndelErrorModel.java | 9 ++------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index 62f6ff5a6..1f430548b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -157,10 +157,10 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood GATKSAMRecord read = ReadUtils.hardClipAdaptorSequence(p.getRead()); if (read == null) continue; - /* if(ReadUtils.is454Read(read)) { + if(ReadUtils.is454Read(read)) { continue; } - */ + if (DEBUG && p.isIndel()) { System.out.format("Read: %s, cigar: %s, aln start: %d, aln end: %d, p.len:%d, Type:%s, EventBases:%s\n", read.getReadName(),read.getCigar().toString(),read.getAlignmentStart(),read.getAlignmentEnd(), diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java index 5c1f57bc7..ab7ae4184 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java @@ -105,7 +105,6 @@ public class PairHMMIndelErrorModel { private static final double MIN_GAP_CONT_PENALTY = 10.0; private static final double GAP_PENALTY_HRUN_STEP = 1.0; // each increase in hrun decreases gap penalty by this. - private static final double GOP_454_DELTA = 15.0; // lower gap penalty for 454 reads private boolean doViterbi = false; @@ -772,10 +771,10 @@ public class PairHMMIndelErrorModel { if (read == null) continue; - /* if(ReadUtils.is454Read(read) && !getGapPenaltiesFromFile) { + if(ReadUtils.is454Read(read) && !getGapPenaltiesFromFile) { continue; } - */ + double[] recalQuals = null; /* @@ -991,10 +990,6 @@ public class PairHMMIndelErrorModel { } else { currentContextGOP = Arrays.copyOfRange(gapOpenProbabilityMap.get(a), (int)indStart, (int)indStop); currentContextGCP = Arrays.copyOfRange(gapContProbabilityMap.get(a), (int)indStart, (int)indStop); - if(ReadUtils.is454Read(read)) { - for (int k=0; k Date: Sat, 2 Jul 2011 17:15:13 -0400 Subject: [PATCH 023/161] Adding ability to specify in VQSR a list of bad sites to use when training the negative model. Just add bad=true to the list of rod tags for your bad sites track. --- .../variantrecalibration/TrainingSet.java | 12 ++++- .../VariantDataManager.java | 44 ++++++++++++------- .../variantrecalibration/VariantDatum.java | 2 +- .../VariantRecalibrator.java | 4 +- 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java index f3677421e..9bbcf395a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java @@ -14,6 +14,7 @@ public class TrainingSet { public String name; public boolean isKnown = false; public boolean isTraining = false; + public boolean isAntiTraining = false; public boolean isTruth = false; public boolean isConsensus = false; public double prior = 0.0; @@ -22,17 +23,24 @@ public class TrainingSet { public TrainingSet( final String name, final Tags tags ) { this.name = name; + + // Parse the tags to decide which tracks have which properties if( tags != null ) { isKnown = tags.containsKey("known") && tags.getValue("known").equals("true"); isTraining = tags.containsKey("training") && tags.getValue("training").equals("true"); + isAntiTraining = tags.containsKey("bad") && tags.getValue("bad").equals("true"); isTruth = tags.containsKey("truth") && tags.getValue("truth").equals("true"); isConsensus = tags.containsKey("consensus") && tags.getValue("consensus").equals("true"); prior = ( tags.containsKey("prior") ? Double.parseDouble(tags.getValue("prior")) : prior ); } - if( !isConsensus ) { + + // Report back to the user which tracks were found and the properties that were detected + if( !isConsensus && !isAntiTraining ) { logger.info( String.format( "Found %s track: \tKnown = %s \tTraining = %s \tTruth = %s \tPrior = Q%.1f", this.name, isKnown, isTraining, isTruth, prior) ); - } else { + } else if( isConsensus ) { logger.info( String.format( "Found consensus track: %s", this.name) ); + } else { + logger.info( String.format( "Found bad sites training track: %s", this.name) ); } } } 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 efff5b780..cd739f9fc 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 @@ -84,7 +84,6 @@ public class VariantDataManager { remove = remove || (Math.abs(val) > VRAC.STD_THRESHOLD); } datum.failingSTDThreshold = remove; - datum.usedForTraining = 0; } } @@ -118,38 +117,47 @@ public class VariantDataManager { for( final VariantDatum datum : data ) { if( datum.atTrainingSite && !datum.failingSTDThreshold && datum.originalQual > VRAC.QUAL_THRESHOLD ) { trainingData.add( datum ); - datum.usedForTraining = 1; } } logger.info( "Training with " + trainingData.size() + " variants after standard deviation thresholding." ); if( trainingData.size() < VRAC.MIN_NUM_BAD_VARIANTS ) { - logger.warn("WARNING: Training with very few variant sites! Please check the model reporting PDF to ensure the quality of the model is reliable."); + logger.warn( "WARNING: Training with very few variant sites! Please check the model reporting PDF to ensure the quality of the model is reliable." ); } return trainingData; } public ExpandingArrayList selectWorstVariants( double bottomPercentage, final int minimumNumber ) { - Collections.sort( data ); + // The return value is the list of training variants final ExpandingArrayList trainingData = new ExpandingArrayList(); - final int numToAdd = Math.max( minimumNumber, 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."); + + // First add to the training list all sites overlapping any bad sites training tracks + for( final VariantDatum datum : data ) { + if( datum.atAntiTrainingSite && !datum.failingSTDThreshold && !Double.isInfinite(datum.lod) ) { + trainingData.add( datum ); + } } - if( numToAdd == minimumNumber ) { - logger.warn("WARNING: Training with very few variant sites! Please check the model reporting PDF to ensure the quality of the model is reliable."); + final int numBadSitesAdded = trainingData.size(); + 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 ); + 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." ); + } else if( numToAdd == minimumNumber - trainingData.size() ) { + logger.warn( "WARNING: Training with very few variant sites! Please check the model reporting PDF to ensure the quality of the model is reliable." ); bottomPercentage = ((float) numToAdd) / ((float) data.size()); } - int index = 0; - int numAdded = 0; + int index = 0, numAdded = 0; while( numAdded < numToAdd ) { final VariantDatum datum = data.get(index++); if( !datum.failingSTDThreshold && !Double.isInfinite(datum.lod) ) { + datum.atAntiTrainingSite = true; trainingData.add( datum ); - datum.usedForTraining = -1; numAdded++; } } - logger.info("Training with worst " + (float) bottomPercentage * 100.0f + "% of passing data --> " + trainingData.size() + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "."); + logger.info( "Additionally training with worst " + (float) bottomPercentage * 100.0f + "% of passing data --> " + (trainingData.size() - numBadSitesAdded) + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "." ); return trainingData; } @@ -162,10 +170,11 @@ public class VariantDataManager { returnData.add(datum); } } - // add an extra 5% of points from bad training set, since that set is small but interesting + + // Add an extra 5% of points from bad training set, since that set is small but interesting for( int iii = 0; iii < Math.floor(0.05*numToAdd); iii++) { final VariantDatum datum = data.get(GenomeAnalysisEngine.getRandomGenerator().nextInt(data.size())); - if( datum.usedForTraining == -1 && !datum.failingSTDThreshold ) { returnData.add(datum); } + if( datum.atAntiTrainingSite && !datum.failingSTDThreshold ) { returnData.add(datum); } else { iii--; } } @@ -236,6 +245,7 @@ public class VariantDataManager { datum.atTrainingSite = false; datum.prior = 2.0; datum.consensusCount = 0; + for( final TrainingSet trainingSet : trainingSets ) { for( final VariantContext trainVC : tracker.getVariantContexts( ref, trainingSet.name, null, context.getLocation(), false, false ) ) { if( trainVC != null && trainVC.isNotFiltered() && trainVC.isVariant() && @@ -248,6 +258,10 @@ public class VariantDataManager { datum.prior = Math.max( datum.prior, trainingSet.prior ); datum.consensusCount += ( trainingSet.isConsensus ? 1 : 0 ); } + if( trainVC != null ) { + datum.atAntiTrainingSite = datum.atAntiTrainingSite || trainingSet.isAntiTraining; + } + } } } 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 38e2affb6..04a5a9d3e 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 @@ -14,13 +14,13 @@ public class VariantDatum implements Comparable { public double lod; public boolean atTruthSite; public boolean atTrainingSite; + public boolean atAntiTrainingSite; public boolean isTransition; public boolean isSNP; public boolean failingSTDThreshold; public double originalQual; public double prior; public int consensusCount; - public int usedForTraining; public String contig; public int start; public int stop; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java index b5fda4443..b903d20af 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java @@ -175,7 +175,6 @@ public class VariantRecalibrator extends RodWalker Date: Sat, 2 Jul 2011 17:55:10 -0400 Subject: [PATCH 025/161] Use the worst X% of calls in addition to the bad training sites list. Don't include the already added calls in the calculation of X% --- .../walkers/variantrecalibration/VariantDataManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 cd739f9fc..309d1b8fa 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 @@ -151,13 +151,13 @@ public class VariantDataManager { int index = 0, numAdded = 0; while( numAdded < numToAdd ) { final VariantDatum datum = data.get(index++); - if( !datum.failingSTDThreshold && !Double.isInfinite(datum.lod) ) { + if( !datum.atAntiTrainingSite && !datum.failingSTDThreshold && !Double.isInfinite(datum.lod) ) { datum.atAntiTrainingSite = true; trainingData.add( datum ); numAdded++; } } - logger.info( "Additionally training with worst " + (float) bottomPercentage * 100.0f + "% of passing data --> " + (trainingData.size() - numBadSitesAdded) + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "." ); + logger.info( "Additionally training with worst " + String.format("%0.3f", (float) bottomPercentage * 100.0f) + "% of passing data --> " + (trainingData.size() - numBadSitesAdded) + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "." ); return trainingData; } @@ -243,6 +243,7 @@ public class VariantDataManager { datum.isKnown = false; datum.atTruthSite = false; datum.atTrainingSite = false; + datum.atAntiTrainingSite = false; datum.prior = 2.0; datum.consensusCount = 0; From 41d46059e7cace435f9f1d558435d4fde14c8531 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Sat, 2 Jul 2011 18:09:17 -0400 Subject: [PATCH 026/161] fixing bad format statement --- .../gatk/walkers/variantrecalibration/VariantDataManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 309d1b8fa..f83e9b2f0 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 @@ -157,7 +157,7 @@ public class VariantDataManager { numAdded++; } } - logger.info( "Additionally training with worst " + String.format("%0.3f", (float) bottomPercentage * 100.0f) + "% of passing data --> " + (trainingData.size() - numBadSitesAdded) + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "." ); + logger.info( "Additionally training with worst " + String.format("%.3f", (float) bottomPercentage * 100.0f) + "% of passing data --> " + (trainingData.size() - numBadSitesAdded) + " variants with LOD <= " + String.format("%.4f", data.get(index).lod) + "." ); return trainingData; } From 38740b0ff5e70df6c5d760251d129ed22d0eeccb Mon Sep 17 00:00:00 2001 From: "Mark A. DePristo" Date: Mon, 4 Jul 2011 16:11:42 -0400 Subject: [PATCH 027/161] First working version of the DiffNode readers for VCF and BAM files. Unit tests confirm the readers are approximately working. Skeleton of a working DiffObjects walker that will be able to provide detailed information about how exactly two files of the same type differ, so long as the files are supported by the DiffNode structure. --- public/testdata/diffTestMaster.vcf | 11 +++++++++++ public/testdata/diffTestTest.vcf | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 public/testdata/diffTestMaster.vcf create mode 100644 public/testdata/diffTestTest.vcf diff --git a/public/testdata/diffTestMaster.vcf b/public/testdata/diffTestMaster.vcf new file mode 100644 index 000000000..549f54345 --- /dev/null +++ b/public/testdata/diffTestMaster.vcf @@ -0,0 +1,11 @@ +##fileformat=VCFv4.0 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 +chr1 2646 rs62635284 G A 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:53,75:3:-12.40,-0.90,-0.00:9.03 +chr1 2979 rs62635286 T G 83.67 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:31,32:9:-33.61,-2.71,-0.00:27.09 +chr1 2981 rs62028691 A G 14.69 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:31,33:9:-32.12,-2.71,-0.00:27.08 +chr1 4536 rs11582131 G C 0.18 PASS AC=1;AF=0.50;AN=2 GT:AD:DP:GL:GQ 0/1:42,33:16:-41.67,-4.82,-26.29:99 +chr1 4562 rs11490464 C G 0.14 PASS AC=1;AF=0.50;AN=2 GT:AD:DP:GL:GQ 0/1:26,30:9:-19.64,-2.72,-14.87:99 +chr1 4770 rs6682375 A G 0.32 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:9,111:84:-306.27,-28.58,-3.46:99 +chr1 4793 rs6682385 A G 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:4,115:109:-350.74,-32.88,-0.10:99 +chr1 5074 rs11586607 T G 0.01 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:29,97:39:-130.41,-11.75,-3.82:79.31 +chr1 5137 rs62636497 A T 140.49 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:0,74:39:-148.99,-11.75,-0.01:99 diff --git a/public/testdata/diffTestTest.vcf b/public/testdata/diffTestTest.vcf new file mode 100644 index 000000000..8699ab253 --- /dev/null +++ b/public/testdata/diffTestTest.vcf @@ -0,0 +1,11 @@ +##fileformat=VCFv4.0 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 +chr1 2646 rs62635284 G A 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:53,75:3:-12.40,-0.90,-0.00:9.03 +chr1 2979 rs62635286 T G 83.67 CHANGED_FILTER AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:31,32:9:-33.61,-2.71,-0.00:27.09 +chr1 2981 rs62028691 A G 14.69 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:31,33:9:-32.12,-2.71,-0.00:27.08 +chr1 4536 rs11582131 G C 0.18 PASS AC=2;AF=0.50;AN=2 GT:AD:DP:GL:GQ 0/1:42,33:16:-41.67,-4.82,-26.29:99 +chr1 4562 rs11490464 C G 0.14 PASS AC=1;AF=0.50;AN=2 GT:AD:DP:GL:GQ 1/1:26,30:9:-19.64,-2.72,-14.87:99 +chr1 4770 rs6682375 A G 0.32 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 0/1:9,111:84:-306.27,-28.58,-3.46:99 +chr1 4793 rs6682385 A G 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:4,114:109:-350.74,-32.88,-0.10:99 +chr1 5074 rs11586607 T G 0.01 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:29,97:39:-130.41,-11.74,-3.82:79.31 +chr1 5137 rs62636497 A T 140.49 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:0,74:39:-148.99,-11.75,-0.01:9 From 080875d5daf876ebd29b059c156890d7c349983f Mon Sep 17 00:00:00 2001 From: "Mark A. DePristo" Date: Tue, 5 Jul 2011 16:13:39 -0400 Subject: [PATCH 039/161] Refactored DiffNode/DiffElement/DiffValue class structure. DiffElement is now a pair of Name -> Value, where value is either a DiffValue or its subclass DiffNode. Code cleaned up, more tests added. DiffEngine is now working, with tests. DiffObjectWalker can now take two VCFs and itemize the difference between the two files correctly and concisely. --- build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.xml b/build.xml index fe1723587..21066686f 100644 --- a/build.xml +++ b/build.xml @@ -741,8 +741,8 @@ - - + + From 7d3dfdfdf2e92f502c4394d338ca01c5de6287e5 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Tue, 5 Jul 2011 16:30:10 -0400 Subject: [PATCH 040/161] Updating the MDCP to use the classpath for the GATK jar, removing -gatk parameter. --- .../queue/qscripts/MethodsDevelopmentCallingPipeline.scala | 4 ---- 1 file changed, 4 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala index d71c6ae5d..f5b639185 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala @@ -19,9 +19,6 @@ import org.broadinstitute.sting.gatk.phonehome.GATKRunReport class MethodsDevelopmentCallingPipeline extends QScript { qscript => - @Argument(shortName="gatk", doc="gatk jar file", required=true) - var gatkJarFile: File = _ - @Argument(shortName="outputDir", doc="output directory", required=true) var outputDir: String = "./" @@ -185,7 +182,6 @@ class MethodsDevelopmentCallingPipeline extends QScript { trait UNIVERSAL_GATK_ARGS extends CommandLineGATK { logging_level = "INFO"; - jarFile = gatkJarFile; memoryLimit = 4; phone_home = if ( LOCAL_ET ) GATKRunReport.PhoneHomeOption.STANDARD else GATKRunReport.PhoneHomeOption.AWS_S3 } From 5298e3a942be54c05a8d765c7aaca99e9c061f8a Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Tue, 5 Jul 2011 16:30:41 -0400 Subject: [PATCH 041/161] Making the outputDir optional. Default = ./ --- .../queue/qscripts/MethodsDevelopmentCallingPipeline.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala index f5b639185..a961beca1 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/MethodsDevelopmentCallingPipeline.scala @@ -19,7 +19,7 @@ import org.broadinstitute.sting.gatk.phonehome.GATKRunReport class MethodsDevelopmentCallingPipeline extends QScript { qscript => - @Argument(shortName="outputDir", doc="output directory", required=true) + @Argument(shortName="outputDir", doc="output directory", required=false) var outputDir: String = "./" @Argument(shortName="skipCalling", doc="skip the calling part of the pipeline and only run VQSR on preset, gold standard VCF files", required=false) From 7b699f8b175f02bbf7ba2cb1aea420361dc4af0d Mon Sep 17 00:00:00 2001 From: Khalid Shakir Date: Tue, 5 Jul 2011 21:59:00 -0400 Subject: [PATCH 042/161] Switched GridEngine from looking from environment variable to using embedded jar. --- build.xml | 33 ++++++++---------- ivy.xml | 3 ++ settings/ivysettings.xml | 1 + .../drmaa-6.2u5p2-sources.jar | Bin 0 -> 110692 bytes .../net.sf.gridscheduler/drmaa-6.2u5p2.jar | Bin 0 -> 51479 bytes .../net.sf.gridscheduler/drmaa-6.2u5p2.xml | 3 ++ 6 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2-sources.jar create mode 100644 settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2.jar create mode 100644 settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2.xml diff --git a/build.xml b/build.xml index fe1723587..a78c4d738 100644 --- a/build.xml +++ b/build.xml @@ -69,8 +69,6 @@ - - @@ -146,11 +144,7 @@ - - - - - @@ -178,13 +172,23 @@ - - + + + + + - + + + + + + + + @@ -214,12 +218,6 @@ - - - - - - @@ -357,7 +355,6 @@ - @@ -374,7 +371,6 @@ - @@ -682,7 +678,6 @@ - diff --git a/ivy.xml b/ivy.xml index c2a6c4ccd..10e4ee570 100644 --- a/ivy.xml +++ b/ivy.xml @@ -48,6 +48,9 @@ + + + diff --git a/settings/ivysettings.xml b/settings/ivysettings.xml index 1e47fa847..2c8fc388f 100644 --- a/settings/ivysettings.xml +++ b/settings/ivysettings.xml @@ -25,5 +25,6 @@ + diff --git a/settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2-sources.jar b/settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..dc77c7d333c61a79fa8c7be7d8ad3345678f811c GIT binary patch literal 110692 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 ml>~}UXkIdr+QWy?jjBsZE6)k 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 F{|_H6`St(+ literal 0 HcmV?d00001 diff --git a/settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2.jar b/settings/repository/net.sf.gridscheduler/drmaa-6.2u5p2.jar new file mode 100644 index 0000000000000000000000000000000000000000..f267be4b58a1930909cdf7a37a031893c6bbb71a GIT binary patch literal 51479 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 + + From 81a4d18468b85b8cdc79e6f9d06c735f5ca16d9b Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Wed, 6 Jul 2011 09:56:38 -0400 Subject: [PATCH 044/161] Mark several indel-related arguments as @Hidden --- .../gatk/walkers/genotyper/UnifiedArgumentCollection.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java index 1045ca371..055eb0b97 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java @@ -92,25 +92,31 @@ public class UnifiedArgumentCollection { @Argument(fullName = "indel_heterozygosity", shortName = "indelHeterozygosity", doc = "Heterozygosity for indel calling", required = false) public double INDEL_HETEROZYGOSITY = 1.0/8000; + @Hidden @Argument(fullName = "indelGapContinuationPenalty", shortName = "indelGCP", doc = "Indel gap continuation penalty", required = false) public double INDEL_GAP_CONTINUATION_PENALTY = 10.0; + @Hidden @Argument(fullName = "indelGapOpenPenalty", shortName = "indelGOP", doc = "Indel gap open penalty", required = false) public double INDEL_GAP_OPEN_PENALTY = 45.0; + @Hidden @Argument(fullName = "indelHaplotypeSize", shortName = "indelHSize", doc = "Indel haplotype size", required = false) public int INDEL_HAPLOTYPE_SIZE = 80; + @Hidden @Argument(fullName = "doContextDependentGapPenalties", shortName = "doCDP", doc = "Vary gap penalties by context", required = false) public boolean DO_CONTEXT_DEPENDENT_PENALTIES = true; //gdebug+ - @Hidden // experimental arguments, NOT TO BE USED BY ANYONE WHOSE INITIALS AREN'T GDA!!! + @Hidden @Argument(fullName = "getGapPenaltiesFromData", shortName = "dataGP", doc = "Vary gap penalties by context - EXPERIMENTAL, DO NO USE", required = false) public boolean GET_GAP_PENALTIES_FROM_DATA = false; + @Hidden @Argument(fullName="indel_recal_file", shortName="recalFile", required=false, doc="Filename for the input covariates table recalibration .csv file - EXPERIMENTAL, DO NO USE") public File INDEL_RECAL_FILE = new File("indel.recal_data.csv"); + @Hidden @Argument(fullName = "indelDebug", shortName = "indelDebug", doc = "Output indel debug info", required = false) public boolean OUTPUT_DEBUG_INDEL_INFO = false; @Hidden From e8ed6b7f0f1c3e0e4f75d77349807b36ee37a3c7 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Wed, 6 Jul 2011 10:01:14 -0400 Subject: [PATCH 045/161] Adding more comments to main VQSR walker. Fixing copyright lines. Bug fix for default paths to now point to public/R/ instead of R/ Bug fix in VQSR for the path to the R scripts not ending in a slash. --- .../analyzecovariates/AnalyzeCovariates.java | 2 +- .../ApplyRecalibration.java | 2 +- .../GaussianMixtureModel.java | 25 ++++++++++++++++++ .../MultivariateGaussian.java | 25 ++++++++++++++++++ .../variantrecalibration/TrainingSet.java | 25 ++++++++++++++++++ .../walkers/variantrecalibration/Tranche.java | 2 +- .../variantrecalibration/TrancheManager.java | 25 ++++++++++++++++++ .../VQSRCalibrationCurve.java | 26 ++++++++++++++++++- .../VariantDataManager.java | 25 ++++++++++++++++++ .../variantrecalibration/VariantDatum.java | 25 ++++++++++++++++++ .../VariantRecalibrator.java | 15 ++++++++--- ...VariantRecalibratorArgumentCollection.java | 25 ++++++++++++++++++ .../VariantRecalibratorEngine.java | 25 ++++++++++++++++++ 13 files changed, 239 insertions(+), 8 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java b/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java index 3cf43c15a..f8e298d88 100755 --- a/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java +++ b/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java @@ -61,7 +61,7 @@ public class AnalyzeCovariates extends CommandLineProgram { @Argument(fullName = "path_to_Rscript", shortName = "Rscript", doc = "The path to your implementation of Rscript. For Broad users this is maybe /broad/tools/apps/R-2.6.0/bin/Rscript", required = false) private String PATH_TO_RSCRIPT = "Rscript"; @Argument(fullName = "path_to_resources", shortName = "resources", doc = "Path to resources folder holding the Sting R scripts.", required = false) - private String PATH_TO_RESOURCES = "R/"; + private String PATH_TO_RESOURCES = "public/R/"; @Argument(fullName = "ignoreQ", shortName = "ignoreQ", doc = "Ignore bases with reported quality less than this number.", required = false) private int IGNORE_QSCORES_LESS_THAN = 5; @Argument(fullName = "numRG", shortName = "numRG", doc = "Only process N read groups. Default value: -1 (process all read groups)", required = false) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java index 9877781d1..7957d35cd 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 The Broad Institute + * Copyright (c) 2011 The Broad Institute * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java index 9ffe7be7a..acc1f24cc 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import Jama.Matrix; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/MultivariateGaussian.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/MultivariateGaussian.java index 0b2edfd10..d077af78e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/MultivariateGaussian.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/MultivariateGaussian.java @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import Jama.Matrix; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java index f3677421e..67132b133 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/TrainingSet.java @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.apache.log4j.Logger; 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 fbee64fe2..64fe36637 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 The Broad Institute + * Copyright (c) 2011 The Broad Institute * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation 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 08388db21..19c6d501b 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 @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.apache.log4j.Logger; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java index 2914385a4..5deb5d8c2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java @@ -1,8 +1,32 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.VariantQualityScore; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; 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 2fd1326fe..f0a78280d 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 @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import cern.jet.random.Normal; 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 ac875b645..8295ec205 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 @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2011 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.broadinstitute.sting.gatk.walkers.variantrecalibration; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java index e651b62e0..a77c5962c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java @@ -87,7 +87,7 @@ public class VariantRecalibrator extends RodWalker(Arrays.asList(USE_ANNOTATIONS)), VRAC ); if( IGNORE_INPUT_FILTERS != null ) { @@ -228,18 +229,22 @@ public class VariantRecalibrator extends RodWalker reduceSum ) { dataManager.setData( reduceSum ); dataManager.normalizeData(); // Each data point is now (x - mean) / standard deviation + + // Generate the positive model using the training data and evaluate each variant final GaussianMixtureModel goodModel = engine.generateModel( dataManager.getTrainingData() ); engine.evaluateData( dataManager.getData(), goodModel, false ); + + // Generate the negative model using the worst performing data and evaluate each variant contrastively final GaussianMixtureModel badModel = engine.generateModel( dataManager.selectWorstVariants( VRAC.PERCENT_BAD_VARIANTS, VRAC.MIN_NUM_BAD_VARIANTS ) ); engine.evaluateData( dataManager.getData(), badModel, true ); - final ExpandingArrayList randomData = dataManager.getRandomDataForPlotting( 6000 ); - + // Find the VQSLOD cutoff values which correspond to the various tranches of calls requested by the user final int nCallsAtTruth = TrancheManager.countCallsAtTruth( dataManager.getData(), Double.NEGATIVE_INFINITY ); final TrancheManager.SelectionMetric metric = new TrancheManager.TruthSensitivityMetric( nCallsAtTruth ); final List tranches = TrancheManager.findTranches( dataManager.getData(), TS_TRANCHES, metric ); tranchesStream.print(Tranche.tranchesString( tranches )); + // Find the filtering lodCutoff for display on the model PDFs. Red variants are those which were below the cutoff and filtered out of the final callset. double lodCutoff = 0.0; for( final Tranche tranche : tranches ) { if( MathUtils.compareDoubles(tranche.ts, TS_FILTER_LEVEL, 0.0001)==0 ) { @@ -251,7 +256,7 @@ public class VariantRecalibrator extends RodWalker Date: Wed, 6 Jul 2011 11:32:46 -0400 Subject: [PATCH 046/161] Fixed namespace of the pipeline classes. --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index fe1723587..2a23f74c1 100644 --- a/build.xml +++ b/build.xml @@ -464,7 +464,7 @@ - + From 14fee4ccbd990bd32956017624dfbcdddeee75ae Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Wed, 6 Jul 2011 12:51:44 -0400 Subject: [PATCH 050/161] Patch from Bob to deal with symbolic alleles: these weren't getting padded but they should be. --- .../sting/utils/variantcontext/VariantContext.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java index 3d375aba2..5787b591f 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java @@ -1343,6 +1343,15 @@ public class VariantContext implements Feature { // to enable tribble intergrati return (int)stop; } + private boolean hasSymbolicAlleles() { + for (Allele a: getAlleles()) { + if (a.isSymbolic()) { + return true; + } + } + return false; + } + public static VariantContext createVariantContextWithPaddedAlleles(VariantContext inputVC, byte inputRefBase, boolean refBaseShouldBeAppliedToEndOfAlleles) { Allele refAllele = inputVC.getReference(); @@ -1352,7 +1361,9 @@ public class VariantContext implements Feature { // to enable tribble intergrati // We need to pad a VC with a common base if the length of the reference allele is less than the length of the VariantContext. // This happens because the position of e.g. an indel is always one before the actual event (as per VCF convention). long locLength = (inputVC.getEnd() - inputVC.getStart()) + 1; - if (refAllele.length() == locLength) + if (inputVC.hasSymbolicAlleles()) + padVC = true; + else if (refAllele.length() == locLength) padVC = false; else if (refAllele.length() == locLength-1) padVC = true; From 54121eb082eb84920770d573ff143efbe32f0340 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Wed, 6 Jul 2011 16:05:08 -0400 Subject: [PATCH 053/161] Catch malformed bams that cause the writer to run in infinite loops --- .../gatk/walkers/indels/ConstrainedMateFixingManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java index aebb0e3eb..df1f4f908 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java @@ -5,6 +5,7 @@ import net.sf.samtools.*; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.util.*; @@ -113,9 +114,10 @@ public class ConstrainedMateFixingManager { HashMap forMateMatching = new HashMap(); TreeSet waitingReads = new TreeSet(comparer); - private T remove(TreeSet treeSet) { - final T first = treeSet.first(); - treeSet.remove(first); + private SAMRecord remove(TreeSet treeSet) { + final SAMRecord first = treeSet.first(); + if ( !treeSet.remove(first) ) + throw new UserException("Error caching SAM record " + first.getReadName() + ", which is usually caused by malformed SAM/BAM files in which multiple identical copies of a read are present."); return first; } From ccf34f7e45164cea70beccb4cf1b0791e6acde06 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Wed, 6 Jul 2011 21:57:22 -0400 Subject: [PATCH 054/161] (1) Added very useful helper class TestDataProvider to BaseTest that making creating data providers for TestNG far easier (2) DiffEngine now officially working with with summaries. Extensive UnitTests all around! --- .../org/broadinstitute/sting/BaseTest.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/public/java/test/org/broadinstitute/sting/BaseTest.java b/public/java/test/org/broadinstitute/sting/BaseTest.java index 61bb8b34b..b469c8a41 100755 --- a/public/java/test/org/broadinstitute/sting/BaseTest.java +++ b/public/java/test/org/broadinstitute/sting/BaseTest.java @@ -12,6 +12,10 @@ import java.io.*; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @@ -107,6 +111,57 @@ public abstract class BaseTest { } } + /** + * Simple generic utility class to creating TestNG data providers: + * + * 1: inherit this class, as in + * + * private class SummarizeDifferenceTest extends TestDataProvider { + * public SummarizeDifferenceTest() { + * super(SummarizeDifferenceTest.class); + * } + * ... + * } + * + * Provide a reference to your class to the TestDataProvider constructor. + * + * 2: Create instances of your subclass. Return from it the call to getTests, providing + * the class type of your test + * + * @DataProvider(name = "summaries") + * public Object[][] createSummaries() { + * new SummarizeDifferenceTest().addDiff("A", "A").addSummary("A:2"); + * new SummarizeDifferenceTest().addDiff("A", "B").addSummary("A:1", "B:1"); + * return SummarizeDifferenceTest.getTests(SummarizeDifferenceTest.class); + * } + * + * This class magically tracks created objects of this + */ + public static class TestDataProvider { + private static final Map> tests = new HashMap>(); + + /** + * Create a new TestDataProvider instance bound to the class variable C + * @param c + */ + public TestDataProvider(Class c) { + if ( ! tests.containsKey(c) ) + tests.put(c, new ArrayList()); + tests.get(c).add(this); + } + + /** + * Return all of the data providers in the form expected by TestNG of type class C + * @param c + * @return + */ + public static Object[][] getTests(Class c) { + List params2 = new ArrayList(); + for ( Object x : tests.get(c) ) params2.add(new Object[]{x}); + return params2.toArray(new Object[][]{}); + } + } + /** * test if the file exists * From 50111db2b7920ba5b3cfe659e33f7135ebd277f5 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Thu, 7 Jul 2011 15:02:48 -0400 Subject: [PATCH 057/161] Fixing non-determinism in single-threaded VQSR by moving references to cern.Normal over to the static random generator available in GenomeAnalysisEngine --- .../GaussianMixtureModel.java | 24 ++++++++++--------- .../VariantDataManager.java | 3 +-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java index acc1f24cc..41fea0896 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java @@ -26,7 +26,6 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import Jama.Matrix; -import cern.jet.random.Normal; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.MathUtils; @@ -97,7 +96,7 @@ public class GaussianMixtureModel { int ttt = 0; while( ttt++ < numIterations ) { - // Estep: assign each variant to the nearest cluster + // E step: assign each variant to the nearest cluster for( final VariantDatum datum : data ) { double minDistance = Double.MAX_VALUE; MultivariateGaussian minGaussian = null; @@ -112,7 +111,7 @@ public class GaussianMixtureModel { datum.assignment = minGaussian; } - // Mstep: update gaussian means based on assigned variants + // M step: update gaussian means based on assigned variants for( final MultivariateGaussian gaussian : gaussians ) { gaussian.zeroOutMu(); int numAssigned = 0; @@ -216,26 +215,29 @@ public class GaussianMixtureModel { } public double evaluateDatumMarginalized( final VariantDatum datum ) { - int numVals = 0; + int numSamples = 0; double sumPVarInGaussian = 0.0; - int numIter = 10; + final int numIterPerMissingAnnotation = 10; // Trade off here between speed of computation and accuracy of the marginalization final double[] pVarInGaussianLog10 = new double[gaussians.size()]; + // for each dimension for( int iii = 0; iii < datum.annotations.length; iii++ ) { - // marginalize over the missing dimension by drawing X random values for the missing annotation and averaging the lod + // if it is missing marginalize over the missing dimension by drawing X random values for the missing annotation and averaging the lod if( datum.isNull[iii] ) { - for( int ttt = 0; ttt < numIter; ttt++ ) { - datum.annotations[iii] = Normal.staticNextDouble(0.0, 1.0); + for( int ttt = 0; ttt < numIterPerMissingAnnotation; ttt++ ) { + datum.annotations[iii] = GenomeAnalysisEngine.getRandomGenerator().nextGaussian(); // draw a random sample from the standard normal distribution + // evaluate this random data point int gaussianIndex = 0; for( final MultivariateGaussian gaussian : gaussians ) { pVarInGaussianLog10[gaussianIndex++] = gaussian.pMixtureLog10 + gaussian.evaluateDatumLog10( datum ); } - sumPVarInGaussian += Math.pow(10.0, MathUtils.log10sumLog10(pVarInGaussianLog10)); - numVals++; + // add this sample's probability to the pile in order to take an average in the end + sumPVarInGaussian += Math.pow(10.0, MathUtils.log10sumLog10(pVarInGaussianLog10)); // p = 10 ^ Sum(pi_k * p(v|n,k)) + numSamples++; } } } - return Math.log10( sumPVarInGaussian / ((double) numVals) ); + return Math.log10( sumPVarInGaussian / ((double) numSamples) ); } } \ No newline at end of file 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 f0a78280d..e1a076e76 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 @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; -import cern.jet.random.Normal; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; @@ -91,7 +90,7 @@ public class VariantDataManager { meanVector[iii] = theMean; varianceVector[iii] = theSTD; for( final VariantDatum datum : data ) { - datum.annotations[iii] = ( datum.isNull[iii] ? Normal.staticNextDouble(0.0, 1.0) : ( datum.annotations[iii] - theMean ) / theSTD ); + datum.annotations[iii] = ( datum.isNull[iii] ? GenomeAnalysisEngine.getRandomGenerator().nextGaussian() : ( datum.annotations[iii] - theMean ) / theSTD ); // Each data point is now [ (x - mean) / standard deviation ] if( annotationKeys.get(iii).toLowerCase().contains("ranksum") && datum.isNull[iii] && datum.annotations[iii] > 0.0 ) { datum.annotations[iii] /= 3.0; From 212e9a1a0cf766f54f70d17d0786db570f8111ae Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Thu, 7 Jul 2011 15:18:57 -0400 Subject: [PATCH 058/161] Fixing unstable build after stable commit --- .../gatk/walkers/variantrecalibration/GaussianMixtureModel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java index b4a8c4c32..17461de2f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/GaussianMixtureModel.java @@ -26,6 +26,7 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import Jama.Matrix; +import cern.jet.random.Normal; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.MathUtils; From 3d4f0e9dd76d1ab23a7e7fdecd61067b57b8e7d7 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Thu, 7 Jul 2011 17:21:15 -0400 Subject: [PATCH 063/161] Now supports the case where you have multiple AC values in the info field. --- .../gatk/walkers/varianteval/stratifications/AlleleCount.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java index ff59c9e29..2cbc66e31 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java @@ -43,9 +43,9 @@ public class AlleleCount extends VariantStratifier { if (eval != null) { int AC = -1; - if ( eval.hasAttribute("AC") ) + if ( eval.hasAttribute("AC") && eval.getAttribute("AC") instanceof Integer ) { AC = eval.getAttributeAsInt("AC"); - else if ( eval.isVariant() ) { + } else if ( eval.isVariant() ) { for (Allele allele : eval.getAlternateAlleles()) AC = Math.max(AC, eval.getChromosomeCount(allele)); } else From 4cfe0dd857891f6c70f4d0e58b60d6c4c401a0cd Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 7 Jul 2011 23:01:03 -0400 Subject: [PATCH 066/161] Test for bad alleles so that we don't generate IndexOutOfBoundsExceptions --- .../sting/utils/codecs/vcf/AbstractVCFCodec.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java index cd0f52c68..01344a117 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java @@ -225,7 +225,7 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, loc = pos + alleles.get(0).length() - 1; } else if ( !isSingleNucleotideEvent(alleles) ) { ArrayList newAlleles = new ArrayList(); - loc = clipAlleles(pos, ref, alleles, newAlleles); + loc = clipAlleles(pos, ref, alleles, newAlleles, lineNo); alleles = newAlleles; } @@ -504,7 +504,7 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, * @param clippedAlleles output list of clipped alleles * @return a list of alleles, clipped to the reference */ - protected static long clipAlleles(long position, String ref, List unclippedAlleles, List clippedAlleles) { + protected static long clipAlleles(long position, String ref, List unclippedAlleles, List clippedAlleles, int lineNo) { // Note that the computation of forward clipping here is meant only to see whether there is a common // base to all alleles, and to correctly compute reverse clipping, @@ -522,6 +522,8 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, } if (a.length() - reverseClipped <= forwardClipping || a.length() - forwardClipping == 0) clipping = false; + else if (ref.length() == reverseClipped) + generateException("bad alleles encountered", lineNo); else if (a.getBases()[a.length()-reverseClipped-1] != ref.getBytes()[ref.length()-reverseClipped-1]) clipping = false; } From 2a4b3ae4a20ea3d5bbd3047f2c2f7842cd01e2ef Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Fri, 8 Jul 2011 12:48:33 -0400 Subject: [PATCH 069/161] Cleaning up / removing most of the monkeying around with annotation values that happens in VariantDataManager --- .../VariantDataManager.java | 34 +++++-------------- .../VariantRecalibrator.java | 6 ++-- ...VariantRecalibratorArgumentCollection.java | 2 +- 3 files changed, 13 insertions(+), 29 deletions(-) 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 5f35c182c..ddeda1699 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 @@ -82,19 +82,11 @@ public class VariantDataManager { } foundZeroVarianceAnnotation = foundZeroVarianceAnnotation || (theSTD < 1E-6); - if( annotationKeys.get(iii).toLowerCase().contains("ranksum") ) { // BUGBUG: to clean up - for( final VariantDatum datum : data ) { - if( datum.annotations[iii] > 0.0 ) { datum.annotations[iii] /= 3.0; } - } - } meanVector[iii] = theMean; varianceVector[iii] = theSTD; for( final VariantDatum datum : data ) { + // Transform each data point via: (x - mean) / standard deviation datum.annotations[iii] = ( datum.isNull[iii] ? GenomeAnalysisEngine.getRandomGenerator().nextGaussian() : ( datum.annotations[iii] - theMean ) / theSTD ); - // Each data point is now [ (x - mean) / standard deviation ] - if( annotationKeys.get(iii).toLowerCase().contains("ranksum") && datum.isNull[iii] && datum.annotations[iii] > 0.0 ) { - datum.annotations[iii] /= 3.0; - } } } if( foundZeroVarianceAnnotation ) { @@ -163,7 +155,7 @@ public class VariantDataManager { final int numBadSitesAdded = trainingData.size(); 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 + // 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 ); final int numToAdd = Math.max( minimumNumber - trainingData.size(), Math.round((float)bottomPercentage * data.size()) ); if( numToAdd > data.size() ) { @@ -241,23 +233,15 @@ public class VariantDataManager { double value; try { - if( annotationKey.equalsIgnoreCase("QUAL") ) { - value = vc.getPhredScaledQual(); - } else if( annotationKey.equalsIgnoreCase("DP") ) { - value = Double.parseDouble( (String)vc.getAttribute( "DP" ) ) / Double.parseDouble( (String)vc.getAttribute( "AN" ) ); - } else { - value = Double.parseDouble( (String)vc.getAttribute( annotationKey ) ); - if( Double.isInfinite(value) ) { value = Double.NaN; } - if( annotationKey.equalsIgnoreCase("InbreedingCoeff") && value > 0.05 ) { value = Double.NaN; } - if( jitter && annotationKey.equalsIgnoreCase("HRUN") ) { // Integer valued annotations must be jittered a bit to work in this GMM - value += -0.25 + 0.5 * GenomeAnalysisEngine.getRandomGenerator().nextDouble(); - } - if( annotationKey.equalsIgnoreCase("HaplotypeScore") && MathUtils.compareDoubles(value, 0.0, 0.0001) == 0 ) { value = -0.2 + 0.4*GenomeAnalysisEngine.getRandomGenerator().nextDouble(); } - if( annotationKey.equalsIgnoreCase("FS") && MathUtils.compareDoubles(value, 0.0, 0.01) == 0 ) { value = -0.2 + 0.4*GenomeAnalysisEngine.getRandomGenerator().nextDouble(); } + value = Double.parseDouble( (String)vc.getAttribute( annotationKey ) ); + if( Double.isInfinite(value) ) { value = Double.NaN; } + if( jitter && annotationKey.equalsIgnoreCase("HRUN") ) { // Integer valued annotations must be jittered a bit to work in this GMM + value += -0.25 + 0.5 * GenomeAnalysisEngine.getRandomGenerator().nextDouble(); } - + if( jitter && annotationKey.equalsIgnoreCase("HaplotypeScore") && MathUtils.compareDoubles(value, 0.0, 0.0001) == 0 ) { value = -0.2 + 0.4*GenomeAnalysisEngine.getRandomGenerator().nextDouble(); } + if( jitter && annotationKey.equalsIgnoreCase("FS") && MathUtils.compareDoubles(value, 0.0, 0.001) == 0 ) { value = -0.2 + 0.4*GenomeAnalysisEngine.getRandomGenerator().nextDouble(); } } catch( Exception e ) { - value = Double.NaN; // The VQSR works with missing data now by marginalizing over the missing dimension when evaluating Gaussians + value = Double.NaN; // The VQSR works with missing data by marginalizing over the missing dimension when evaluating the Gaussian mixture model } return value; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java index 2c51f02d6..2d0355d7d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java @@ -284,7 +284,7 @@ public class VariantRecalibrator extends RodWalker Date: Fri, 8 Jul 2011 12:48:49 -0400 Subject: [PATCH 070/161] Bug fix: if we're genotyping a very long indel (>100 bp) fail gracefully instead of with an array out of bounds exception --- .../org/broadinstitute/sting/utils/genotype/Haplotype.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java index cb6557408..31791e805 100755 --- a/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java @@ -133,8 +133,12 @@ public class Haplotype { byte[] basesBeforeVariant = Arrays.copyOfRange(refBases,startIdxInReference,startIdxInReference+numPrefBases); + int startAfter = startIdxInReference+numPrefBases+ refAllele.getBases().length; + // protect against long events that overrun available reference context + if (startAfter > refBases.length) + startAfter = refBases.length; byte[] basesAfterVariant = Arrays.copyOfRange(refBases, - startIdxInReference+numPrefBases+ refAllele.getBases().length, refBases.length); + startAfter, refBases.length); // Create location for all haplotypes From a3c9d9c3ff561a0a910b5313e0ebb037b7883a4b Mon Sep 17 00:00:00 2001 From: David Roazen Date: Fri, 8 Jul 2011 15:34:39 -0400 Subject: [PATCH 075/161] Fixing Contracts for Java, and enabling contracts by default for unit/integration tests. The NullPointerException we were seeing when trying to run with contracts enabled was being caused by an outdated version of the asm library. To run tests without contracts and disable their compilation, pass in "-Duse.contracts=false" to ant. Also did some minor unrelated cleanup in build.xml --- build.xml | 70 +++++++++++------- ivy.xml | 4 + settings/ivysettings.xml | 1 + .../cofoja-1.0-20110609.jar | Bin .../cofoja-1.0-20110609.xml | 3 + 5 files changed, 51 insertions(+), 27 deletions(-) rename settings/repository/{com.google => com.google.code.cofoja}/cofoja-1.0-20110609.jar (100%) create mode 100644 settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.xml diff --git a/build.xml b/build.xml index 2a23f74c1..986d89213 100644 --- a/build.xml +++ b/build.xml @@ -28,6 +28,7 @@ + @@ -44,11 +45,11 @@ - - + + - - + + @@ -69,7 +70,7 @@ - + @@ -103,7 +104,7 @@ - + @@ -128,14 +129,14 @@ - + - + - + @@ -147,7 +148,7 @@ - + + + + + @@ -252,7 +257,7 @@ - + @@ -287,7 +292,7 @@ depends="gatk.compile.public.source,gatk.compile.private.source,gatk.compile.external.source" description="compile the GATK source" /> - + @@ -299,7 +304,16 @@ - + + + + + + + + + + @@ -312,7 +326,7 @@ + description="create GATK contracts" if="include.contracts" /> @@ -452,7 +466,7 @@ - + @@ -663,7 +677,7 @@ - + - - + @@ -820,7 +836,7 @@ - + @@ -828,7 +844,7 @@ - + @@ -921,8 +937,8 @@ - - + + @@ -944,7 +960,7 @@ - + @@ -969,7 +985,7 @@ - + diff --git a/ivy.xml b/ivy.xml index c2a6c4ccd..ce724bc3c 100644 --- a/ivy.xml +++ b/ivy.xml @@ -60,6 +60,10 @@ + + + + diff --git a/settings/ivysettings.xml b/settings/ivysettings.xml index 1e47fa847..b77414df9 100644 --- a/settings/ivysettings.xml +++ b/settings/ivysettings.xml @@ -25,5 +25,6 @@ + diff --git a/settings/repository/com.google/cofoja-1.0-20110609.jar b/settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.jar similarity index 100% rename from settings/repository/com.google/cofoja-1.0-20110609.jar rename to settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.jar diff --git a/settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.xml b/settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.xml new file mode 100644 index 000000000..38d4e88f1 --- /dev/null +++ b/settings/repository/com.google.code.cofoja/cofoja-1.0-20110609.xml @@ -0,0 +1,3 @@ + + + From 8a78414432226daceccccb4b38463c0826fb0f19 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Mon, 11 Jul 2011 12:10:11 -0400 Subject: [PATCH 076/161] Removed TileCovariate as a dependency for AnalyzeCovariates.jar --- public/packages/AnalyzeCovariates.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/public/packages/AnalyzeCovariates.xml b/public/packages/AnalyzeCovariates.xml index 1862d6cbb..7e31934df 100644 --- a/public/packages/AnalyzeCovariates.xml +++ b/public/packages/AnalyzeCovariates.xml @@ -10,7 +10,6 @@ - From 86890c63574eba41bbbce6c52e2614f6c81b6f27 Mon Sep 17 00:00:00 2001 From: Christopher Hartl Date: Mon, 11 Jul 2011 16:16:15 -0400 Subject: [PATCH 078/161] N and K (in binomial probability) got switched in RFA Walker with the last commit. No longer will NaNs be produced. Added: TableToVCF. Kind of a longer-term project, but there are lots of variant calls available in a weird tabular format. I used this to convert Ju Et Al small indels to VCF. I'll check against the 1000G ASN superpopulation calls to see if we see a good amount of recapitulation, and if so, i'll put them in unvalidated comparisons. Minor chances to the TableCodec and TableFeatures to allow for this (the codec can sometimes drop a column, and the feature now allows you to grab on to its header). --- .../sting/gatk/refdata/features/table/TableCodec.java | 0 .../sting/gatk/refdata/features/table/TableFeature.java | 6 +++++- .../broadinstitute/sting/utils/variantcontext/Allele.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) mode change 100644 => 100755 public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java mode change 100644 => 100755 public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java old mode 100644 new mode 100755 diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java old mode 100644 new mode 100755 index 6ff0384a0..4b4ebe450 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java @@ -55,10 +55,14 @@ public class TableFeature implements Feature { } public List getAllValues() { - return getValuesTo(values.size()-1); + return getValuesTo(values.size()); } public List getValuesTo(int columnPosition) { return values.subList(0,columnPosition); } + + public List getHeader() { + return keys; + } } diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java index a9ba46159..901de6fae 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java @@ -108,7 +108,7 @@ public class Allele implements Comparable { this.bases = bases; if ( ! acceptableAlleleBases(bases) ) - throw new IllegalArgumentException("Unexpected base in allele bases " + new String(bases)); + throw new IllegalArgumentException("Unexpected base in allele bases \'" + new String(bases)+"\'"); } private Allele(String bases, boolean isRef) { From e3748675dbd518042ad67cfc653c7f1a5f89b327 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Mon, 11 Jul 2011 17:40:45 -0400 Subject: [PATCH 079/161] Support for VCF 4.1 header counts --- .../annotator/DepthPerAlleleBySample.java | 3 +- .../ReadDepthAndAllelicFractionBySample.java | 5 +- .../gatk/walkers/annotator/SampleList.java | 3 +- .../utils/codecs/vcf/StandardVCFWriter.java | 11 +-- .../codecs/vcf/VCFCompoundHeaderLine.java | 91 +++++++++++++++---- .../sting/utils/codecs/vcf/VCFConstants.java | 2 + .../utils/codecs/vcf/VCFFormatHeaderLine.java | 4 + .../utils/codecs/vcf/VCFHeaderLineCount.java | 8 ++ .../utils/codecs/vcf/VCFInfoHeaderLine.java | 4 + 9 files changed, 101 insertions(+), 30 deletions(-) create mode 100644 public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderLineCount.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java index 754d28dfd..ee66b50ee 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; @@ -142,5 +143,5 @@ public class DepthPerAlleleBySample implements GenotypeAnnotation, StandardAnnot // public String getIndelBases() public List getKeyNames() { return Arrays.asList("AD"); } - public List getDescriptions() { return Arrays.asList(new VCFFormatHeaderLine(getKeyNames().get(0), VCFCompoundHeaderLine.UNBOUNDED, VCFHeaderLineType.Integer, "Allelic depths for the ref and alt alleles in the order listed")); } + public List getDescriptions() { return Arrays.asList(new VCFFormatHeaderLine(getKeyNames().get(0), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "Allelic depths for the ref and alt alleles in the order listed")); } } \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java index f287549bb..a670532af 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java @@ -29,6 +29,7 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; @@ -200,8 +201,8 @@ public class ReadDepthAndAllelicFractionBySample implements GenotypeAnnotation { 1, VCFHeaderLineType.Integer, "Total read depth per sample, including MQ0"), - new VCFFormatHeaderLine(getKeyNames().get(1), - VCFCompoundHeaderLine.UNBOUNDED, + new VCFFormatHeaderLine(getKeyNames().get(1), + VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "Fractions of reads (excluding MQ0 from both ref and alt) supporting each reported alternative allele, per sample")); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java index 82f16be42..e2fd2a3d4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java @@ -25,6 +25,7 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; @@ -65,5 +66,5 @@ public class SampleList implements InfoFieldAnnotation { public List getKeyNames() { return Arrays.asList("Samples"); } - public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("Samples", VCFInfoHeaderLine.UNBOUNDED, VCFHeaderLineType.String, "List of polymorphic samples")); } + public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("Samples", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "List of polymorphic samples")); } } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index 31251c089..230773310 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -360,14 +360,7 @@ public class StandardVCFWriter implements VCFWriter { if ( !entry.getValue().equals("") ) { int numVals = 1; VCFInfoHeaderLine metaData = mHeader.getInfoHeaderLine(key); - if ( metaData != null ) - numVals = metaData.getCount(); - - // take care of unbounded encoding - if ( numVals == VCFInfoHeaderLine.UNBOUNDED ) - numVals = 1; - - if ( numVals > 0 ) { + if ( metaData != null && (metaData.getCountType() != VCFHeaderLineCount.INTEGER || metaData.getCount() > 0) ) { mWriter.write("="); mWriter.write(entry.getValue()); } @@ -423,7 +416,7 @@ public class StandardVCFWriter implements VCFWriter { VCFFormatHeaderLine metaData = mHeader.getFormatHeaderLine(key); if ( metaData != null ) { - int numInFormatField = metaData.getCount(); + int numInFormatField = metaData.getCount(vc.getAlternateAlleles().size()); if ( numInFormatField > 1 && val.equals(VCFConstants.MISSING_VALUE_v4) ) { // If we have a missing field but multiple values are expected, we need to construct a new string with all fields. // For example, if Number=2, the string has to be ".,." diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java index a799161ad..49f9ab184 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java @@ -24,6 +24,8 @@ package org.broadinstitute.sting.utils.codecs.vcf; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; + import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; @@ -43,26 +45,43 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF // the field types private String name; - private int count; + private int count = -1; + private VCFHeaderLineCount countType; private String description; private VCFHeaderLineType type; // access methods public String getName() { return name; } - public int getCount() { return count; } public String getDescription() { return description; } public VCFHeaderLineType getType() { return type; } + public VCFHeaderLineCount getCountType() { return countType; } + public int getCount() { + if ( countType != VCFHeaderLineCount.INTEGER ) + throw new ReviewedStingException("Asking for header line count when type is not an integer"); + return count; + } - // - public void setNumberToUnbounded() { this.count = UNBOUNDED; } + // utility method + public int getCount(int numAltAlleles) { + int myCount; + switch ( countType ) { + case INTEGER: myCount = count; break; + case UNBOUNDED: myCount = -1; break; + case A: myCount = numAltAlleles; break; + case G: myCount = ((numAltAlleles + 1) * (numAltAlleles + 2) / 2); break; + default: throw new ReviewedStingException("Unknown count type: " + countType); + } + return myCount; + } + + public void setNumberToUnbounded() { + countType = VCFHeaderLineCount.UNBOUNDED; + count = -1; + } // our type of line, i.e. format, info, etc private final SupportedHeaderLineType lineType; - // line numerical values are allowed to be unbounded (or unknown), which is - // marked with a dot (.) - public static final int UNBOUNDED = -1; // the value we store internally for unbounded types - /** * create a VCF format header line * @@ -74,6 +93,7 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF protected VCFCompoundHeaderLine(String name, int count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) { super(lineType.toString(), ""); this.name = name; + this.countType = VCFHeaderLineCount.INTEGER; this.count = count; this.type = type; this.description = description; @@ -81,6 +101,24 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF validate(); } + /** + * create a VCF format header line + * + * @param name the name for this header line + * @param count the count type for this header line + * @param type the type for this header line + * @param description the description for this header line + */ + protected VCFCompoundHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) { + super(lineType.toString(), ""); + this.name = name; + this.countType = count; + this.type = type; + this.description = description; + this.lineType = lineType; + validate(); + } + /** * create a VCF format header line * @@ -92,9 +130,22 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF super(lineType.toString(), ""); Map mapping = VCFHeaderLineTranslator.parseLine(version,line, Arrays.asList("ID","Number","Type","Description")); name = mapping.get("ID"); - count = (version == VCFHeaderVersion.VCF4_0 || version == VCFHeaderVersion.VCF4_1) ? - mapping.get("Number").equals(VCFConstants.UNBOUNDED_ENCODING_v4) ? UNBOUNDED : Integer.valueOf(mapping.get("Number")) : - mapping.get("Number").equals(VCFConstants.UNBOUNDED_ENCODING_v3) ? UNBOUNDED : Integer.valueOf(mapping.get("Number")); + count = -1; + final String numberStr = mapping.get("Number"); + if ( numberStr.equals(VCFConstants.PER_ALLELE_COUNT) ) { + countType = VCFHeaderLineCount.A; + } else if ( numberStr.equals(VCFConstants.PER_GENOTYPE_COUNT) ) { + countType = VCFHeaderLineCount.G; + } else if ( ((version == VCFHeaderVersion.VCF4_0 || version == VCFHeaderVersion.VCF4_1) && + numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v4)) || + ((version == VCFHeaderVersion.VCF3_2 || version == VCFHeaderVersion.VCF3_3) && + numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v3)) ) { + countType = VCFHeaderLineCount.UNBOUNDED; + } else { + countType = VCFHeaderLineCount.INTEGER; + count = Integer.valueOf(numberStr); + + } type = VCFHeaderLineType.valueOf(mapping.get("Type")); if (type == VCFHeaderLineType.Flag && !allowFlagValues()) throw new IllegalArgumentException("Flag is an unsupported type for this kind of field"); @@ -121,7 +172,15 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF protected String toStringEncoding() { Map map = new LinkedHashMap(); map.put("ID", name); - map.put("Number", count == UNBOUNDED ? VCFConstants.UNBOUNDED_ENCODING_v4 : count); + Object number; + switch ( countType ) { + case A: number = VCFConstants.PER_ALLELE_COUNT; break; + case G: number = VCFConstants.PER_GENOTYPE_COUNT; break; + case UNBOUNDED: number = VCFConstants.UNBOUNDED_ENCODING_v4; break; + case INTEGER: + default: number = count; + } + map.put("Number", number); map.put("Type", type); map.put("Description", description); return lineType.toString() + "=" + VCFHeaderLine.toStringEncoding(map); @@ -136,15 +195,13 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF if ( !(o instanceof VCFCompoundHeaderLine) ) return false; VCFCompoundHeaderLine other = (VCFCompoundHeaderLine)o; - return name.equals(other.name) && - count == other.count && - description.equals(other.description) && - type == other.type && - lineType == other.lineType; + return equalsExcludingDescription(other) && + description.equals(other.description); } public boolean equalsExcludingDescription(VCFCompoundHeaderLine other) { return count == other.count && + countType == other.countType && type == other.type && lineType == other.lineType && name.equals(other.name); diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFConstants.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFConstants.java index 695c46c27..91cf86c70 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFConstants.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFConstants.java @@ -99,6 +99,8 @@ public final class VCFConstants { public static final String MISSING_DEPTH_v3 = "-1"; public static final String UNBOUNDED_ENCODING_v4 = "."; public static final String UNBOUNDED_ENCODING_v3 = "-1"; + public static final String PER_ALLELE_COUNT = "A"; + public static final String PER_GENOTYPE_COUNT = "G"; public static final String EMPTY_ALLELE = "."; public static final String EMPTY_GENOTYPE = "./."; public static final double MAX_GENOTYPE_QUAL = 99.0; diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java index 352be3e97..f68cb670b 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java @@ -16,6 +16,10 @@ public class VCFFormatHeaderLine extends VCFCompoundHeaderLine { throw new IllegalArgumentException("Flag is an unsupported type for format fields"); } + public VCFFormatHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) { + super(name, count, type, description, SupportedHeaderLineType.INFO); + } + protected VCFFormatHeaderLine(String line, VCFHeaderVersion version) { super(line, version, SupportedHeaderLineType.FORMAT); } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderLineCount.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderLineCount.java new file mode 100644 index 000000000..d615c7c78 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderLineCount.java @@ -0,0 +1,8 @@ +package org.broadinstitute.sting.utils.codecs.vcf; + +/** + * the count encodings we use for fields in VCF header lines + */ +public enum VCFHeaderLineCount { + INTEGER, A, G, UNBOUNDED; +} diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFInfoHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFInfoHeaderLine.java index 135a5c1a1..9b20f38a1 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFInfoHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFInfoHeaderLine.java @@ -13,6 +13,10 @@ public class VCFInfoHeaderLine extends VCFCompoundHeaderLine { super(name, count, type, description, SupportedHeaderLineType.INFO); } + public VCFInfoHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) { + super(name, count, type, description, SupportedHeaderLineType.INFO); + } + protected VCFInfoHeaderLine(String line, VCFHeaderVersion version) { super(line, version, SupportedHeaderLineType.INFO); } From e93052a51e88ddb77c8ce71cf6a14a449ca3b1aa Mon Sep 17 00:00:00 2001 From: Khalid Shakir Date: Mon, 11 Jul 2011 19:17:58 -0400 Subject: [PATCH 080/161] When generating the QGraph, don't regenerate if there aren't scatter/gather jobs. Fixed a display issue with the number of milliseconds that Queue has tried to contact LSF. --- .../sting/queue/engine/QGraph.scala | 44 ++++++++++--------- .../queue/engine/lsf/Lsf706JobRunner.scala | 6 +-- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/public/scala/src/org/broadinstitute/sting/queue/engine/QGraph.scala b/public/scala/src/org/broadinstitute/sting/queue/engine/QGraph.scala index bfcc4d48c..8ed3f84c1 100755 --- a/public/scala/src/org/broadinstitute/sting/queue/engine/QGraph.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/engine/QGraph.scala @@ -138,30 +138,32 @@ class QGraph extends Logging { validate() if (running && numMissingValues == 0) { - logger.info("Generating scatter gather jobs.") val scatterGathers = jobGraph.edgeSet.filter(edge => scatterGatherable(edge)) + if (!scatterGathers.isEmpty) { + logger.info("Generating scatter gather jobs.") - var addedFunctions = List.empty[QFunction] - for (scatterGather <- scatterGathers) { - val functions = scatterGather.asInstanceOf[FunctionEdge] - .function.asInstanceOf[ScatterGatherableFunction] - .generateFunctions() - addedFunctions ++= functions + var addedFunctions = List.empty[QFunction] + for (scatterGather <- scatterGathers) { + val functions = scatterGather.asInstanceOf[FunctionEdge] + .function.asInstanceOf[ScatterGatherableFunction] + .generateFunctions() + addedFunctions ++= functions + } + + logger.info("Removing original jobs.") + this.jobGraph.removeAllEdges(scatterGathers) + prune() + + logger.info("Adding scatter gather jobs.") + addedFunctions.foreach(function => if (running) this.add(function)) + + logger.info("Regenerating graph.") + fill + val scatterGatherDotFile = if (settings.expandedDotFile != null) settings.expandedDotFile else settings.dotFile + if (scatterGatherDotFile != null) + renderToDot(scatterGatherDotFile) + validate() } - - logger.info("Removing original jobs.") - this.jobGraph.removeAllEdges(scatterGathers) - prune() - - logger.info("Adding scatter gather jobs.") - addedFunctions.foreach(function => if (running) this.add(function)) - - logger.info("Regenerating graph.") - fill - val scatterGatherDotFile = if (settings.expandedDotFile != null) settings.expandedDotFile else settings.dotFile - if (scatterGatherDotFile != null) - renderToDot(scatterGatherDotFile) - validate() } } diff --git a/public/scala/src/org/broadinstitute/sting/queue/engine/lsf/Lsf706JobRunner.scala b/public/scala/src/org/broadinstitute/sting/queue/engine/lsf/Lsf706JobRunner.scala index 57d133dfe..ac2f036b4 100644 --- a/public/scala/src/org/broadinstitute/sting/queue/engine/lsf/Lsf706JobRunner.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/engine/lsf/Lsf706JobRunner.scala @@ -286,11 +286,11 @@ object Lsf706JobRunner extends Logging { // LSB_SHAREDIR/cluster_name/logdir/lsb.acct (man bacct) // LSB_SHAREDIR/cluster_name/logdir/lsb.events (man bhist) logger.debug("Job Id %s status / exitStatus / exitInfo: ??? / ??? / ???".format(runner.jobId)) - val unknownStatusSeconds = (System.currentTimeMillis - runner.lastStatusUpdate) - if (unknownStatusSeconds > (unknownStatusMaxSeconds * 1000L)) { + val unknownStatusMillis = (System.currentTimeMillis - runner.lastStatusUpdate) + if (unknownStatusMillis > (unknownStatusMaxSeconds * 1000L)) { // Unknown status has been returned for a while now. runner.updateStatus(RunnerStatus.FAILED) - logger.error("Unable to read LSF status for %d minutes: job id %d: %s".format(unknownStatusSeconds/60, runner.jobId, runner.function.description)) + logger.error("Unable to read LSF status for %0.2f minutes: job id %d: %s".format(unknownStatusMillis/(60 * 1000D), runner.jobId, runner.function.description)) } } From 5e593793af43153e844f69c0f0df367b1d56a658 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Mon, 11 Jul 2011 23:10:27 -0400 Subject: [PATCH 081/161] DiffEngine utility function simpleDiffFiles printSummaryReport now uses GATKReport for nice formating Moved print formatting arguments into inner class provided to printing functions themselves, not the class BAMDiffableReader only reads 1000 entries to avoid performance issue. Work around for BAM files with non-unique names Uncommented all of the incorrectly commented out CombineVariants integrationtests BaseTest now uses DiffEngine to provide inline differences to VCF and BAM files --- .../org/broadinstitute/sting/BaseTest.java | 15 +- .../CombineVariantsIntegrationTest.java | 142 +++++++++--------- 2 files changed, 83 insertions(+), 74 deletions(-) diff --git a/public/java/test/org/broadinstitute/sting/BaseTest.java b/public/java/test/org/broadinstitute/sting/BaseTest.java index b469c8a41..b3e422ba9 100755 --- a/public/java/test/org/broadinstitute/sting/BaseTest.java +++ b/public/java/test/org/broadinstitute/sting/BaseTest.java @@ -4,6 +4,7 @@ import org.apache.commons.io.FileUtils; import org.apache.log4j.*; import org.apache.log4j.spi.LoggingEvent; import org.broadinstitute.sting.commandline.CommandLineUtils; +import org.broadinstitute.sting.gatk.walkers.diffengine.DiffEngine; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.testng.Assert; @@ -334,11 +335,14 @@ public abstract class BaseTest { if (parameterize || expectedMD5.equals("")) { // Don't assert - } else { - Assert.assertEquals(filemd5sum, expectedMD5, name + " Mismatching MD5s"); + } else if ( filemd5sum.equals(expectedMD5) ) { System.out.println(String.format(" => %s PASSED", name)); + } else { + Assert.fail(String.format("%s has mismatching MD5s: expected=%s observed=%s", name, expectedMD5, filemd5sum)); } + + return filemd5sum; } @@ -381,7 +385,12 @@ public abstract class BaseTest { System.out.printf("##### Path to calculated file (MD5=%s): %s%n", filemd5sum, pathToFileMD5File); System.out.printf("##### Diff command: diff %s %s%n", pathToExpectedMD5File, pathToFileMD5File); - // todo -- add support for simple inline display of the first N differences for text file + // inline differences + DiffEngine.SummaryReportParams params = new DiffEngine.SummaryReportParams(System.out, 20, 10, 0); + boolean success = DiffEngine.simpleDiffFiles(new File(pathToExpectedMD5File), new File(pathToFileMD5File), params); + if ( success ) + System.out.printf("Note that the above list is not comprehensive. At most 20 lines of output, and 10 specific differences will be listed. Please use -T DiffObjects -R public/testdata/exampleFASTA.fasta -m %s -t %s to explore the differences more freely%n", + pathToExpectedMD5File, pathToFileMD5File); } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java index 33a20f7b5..600718aa0 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java @@ -34,76 +34,76 @@ import java.util.Arrays; * Tests CombineVariants */ public class CombineVariantsIntegrationTest extends WalkerTest { -// public static String baseTestString(String args) { -// return "-T CombineVariants -NO_HEADER -L 1:1-50,000,000 -o %s -R " + b36KGReference + args; -// } -// -// public void test1InOut(String file, String md5, boolean vcf3) { -// test1InOut(file, md5, "", vcf3); -// } -// -// public void test1InOut(String file, String md5, String args, boolean vcf3) { -// WalkerTestSpec spec = new WalkerTestSpec( -// baseTestString(" -priority v1 -B:v1,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file + args), -// 1, -// Arrays.asList(md5)); -// executeTest("testInOut1--" + file, spec); -// } -// -// public void combine2(String file1, String file2, String args, String md5, boolean vcf3) { -// WalkerTestSpec spec = new WalkerTestSpec( -// baseTestString(" -priority v1,v2 -B:v1,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file1 + " -B:v2,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file2 + args), -// 1, -// Arrays.asList(md5)); -// executeTest("combine2 1:" + new File(file1).getName() + " 2:" + new File(file2).getName(), spec); -// } -// -// public void combineSites(String args, String md5) { -// String file1 = "1000G_omni2.5.b37.sites.vcf"; -// String file2 = "hapmap_3.3.b37.sites.vcf"; -// WalkerTestSpec spec = new WalkerTestSpec( -// "-T CombineVariants -NO_HEADER -o %s -R " + b37KGReference -// + " -L 1:1-10,000,000 -B:omni,VCF " + validationDataLocation + file1 -// + " -B:hm3,VCF " + validationDataLocation + file2 + args, -// 1, -// Arrays.asList(md5)); -// executeTest("combineSites 1:" + new File(file1).getName() + " 2:" + new File(file2).getName() + " args = " + args, spec); -// } -// -// -// @Test public void test1SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2117fff6e0d182cd20be508e9661829c", true); } -// @Test public void test2SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2cfaf7af3dd119df08b8a9c1f72e2f93", " -setKey foo", true); } -// @Test public void test3SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "1474ac0fde2ce42a3c24f1c97eab333e", " -setKey null", true); } -// @Test public void testOfficialCEUPilotCalls() { test1InOut("CEU.trio.2010_03.genotypes.vcf.gz", "7fc66df048a0ab08cf507906e1d4a308", false); } // official project VCF files in tabix format -// -// @Test public void test1Indel1() { test1InOut("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "ec9715f53dbf4531570557c212822f12", false); } -// @Test public void test1Indel2() { test1InOut("CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "f1072be5f5c6ee810276d9ca6537224d", false); } -// -// @Test public void combineTrioCalls() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", "", "b77a1eec725201d9d8e74ee0c45638d3", false); } // official project VCF files in tabix format -// @Test public void combineTrioCallsMin() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", " -minimalVCF", "802977fdfd2f4905b501bb06800f60af", false); } // official project VCF files in tabix format -// @Test public void combine2Indels() { combine2("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "a67157287dd2b24b5cdf7ebf8fcbbe9a", false); } -// -// @Test public void combineSNPsAndIndels() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "e1f4718a179f1196538a33863da04f53", false); } -// -// @Test public void uniqueSNPs() { combine2("pilot2.snps.vcf4.genotypes.vcf", "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf", "", "b3783384b7c8e877b971033e90beba48", true); } -// -// @Test public void omniHM3Union() { combineSites(" -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED", "902e541c87caa72134db6293fc46f0ad"); } -// @Test public void omniHM3Intersect() { combineSites(" -filteredRecordsMergeType KEEP_IF_ALL_UNFILTERED", "f339ad4bb5863b58b9c919ce7d040bb9"); } -// -// @Test public void threeWayWithRefs() { -// WalkerTestSpec spec = new WalkerTestSpec( -// baseTestString(" -B:NA19240_BGI,VCF "+validationDataLocation+"NA19240.BGI.RG.vcf" + -// " -B:NA19240_ILLUMINA,VCF "+validationDataLocation+"NA19240.ILLUMINA.RG.vcf" + -// " -B:NA19240_WUGSC,VCF "+validationDataLocation+"NA19240.WUGSC.RG.vcf" + -// " -B:denovoInfo,VCF "+validationDataLocation+"yri_merged_validation_data_240610.annotated.b36.vcf" + -// " -setKey centerSet" + -// " -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED" + -// " -priority NA19240_BGI,NA19240_ILLUMINA,NA19240_WUGSC,denovoInfo" + -// " -genotypeMergeOptions UNIQUIFY -L 1"), -// 1, -// Arrays.asList("a07995587b855f3214fb71940bf23c0f")); -// executeTest("threeWayWithRefs", spec); -// } + public static String baseTestString(String args) { + return "-T CombineVariants -NO_HEADER -L 1:1-50,000,000 -o %s -R " + b36KGReference + args; + } + + public void test1InOut(String file, String md5, boolean vcf3) { + test1InOut(file, md5, "", vcf3); + } + + public void test1InOut(String file, String md5, String args, boolean vcf3) { + WalkerTestSpec spec = new WalkerTestSpec( + baseTestString(" -priority v1 -B:v1,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file + args), + 1, + Arrays.asList(md5)); + executeTest("testInOut1--" + file, spec); + } + + public void combine2(String file1, String file2, String args, String md5, boolean vcf3) { + WalkerTestSpec spec = new WalkerTestSpec( + baseTestString(" -priority v1,v2 -B:v1,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file1 + " -B:v2,VCF" + (vcf3 ? "3 " : " ") + validationDataLocation + file2 + args), + 1, + Arrays.asList(md5)); + executeTest("combine2 1:" + new File(file1).getName() + " 2:" + new File(file2).getName(), spec); + } + + public void combineSites(String args, String md5) { + String file1 = "1000G_omni2.5.b37.sites.vcf"; + String file2 = "hapmap_3.3.b37.sites.vcf"; + WalkerTestSpec spec = new WalkerTestSpec( + "-T CombineVariants -NO_HEADER -o %s -R " + b37KGReference + + " -L 1:1-10,000,000 -B:omni,VCF " + validationDataLocation + file1 + + " -B:hm3,VCF " + validationDataLocation + file2 + args, + 1, + Arrays.asList(md5)); + executeTest("combineSites 1:" + new File(file1).getName() + " 2:" + new File(file2).getName() + " args = " + args, spec); + } + + + @Test public void test1SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2117fff6e0d182cd20be508e9661829c", true); } + @Test public void test2SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2cfaf7af3dd119df08b8a9c1f72e2f93", " -setKey foo", true); } + @Test public void test3SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "1474ac0fde2ce42a3c24f1c97eab333e", " -setKey null", true); } + @Test public void testOfficialCEUPilotCalls() { test1InOut("CEU.trio.2010_03.genotypes.vcf.gz", "7fc66df048a0ab08cf507906e1d4a308", false); } // official project VCF files in tabix format + + @Test public void test1Indel1() { test1InOut("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "ec9715f53dbf4531570557c212822f12", false); } + @Test public void test1Indel2() { test1InOut("CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "f1072be5f5c6ee810276d9ca6537224d", false); } + + @Test public void combineTrioCalls() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", "", "b77a1eec725201d9d8e74ee0c45638d3", false); } // official project VCF files in tabix format + @Test public void combineTrioCallsMin() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", " -minimalVCF", "802977fdfd2f4905b501bb06800f60af", false); } // official project VCF files in tabix format + @Test public void combine2Indels() { combine2("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "a67157287dd2b24b5cdf7ebf8fcbbe9a", false); } + + @Test public void combineSNPsAndIndels() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "e1f4718a179f1196538a33863da04f53", false); } + + @Test public void uniqueSNPs() { combine2("pilot2.snps.vcf4.genotypes.vcf", "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf", "", "b3783384b7c8e877b971033e90beba48", true); } + + @Test public void omniHM3Union() { combineSites(" -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED", "902e541c87caa72134db6293fc46f0ad"); } + @Test public void omniHM3Intersect() { combineSites(" -filteredRecordsMergeType KEEP_IF_ALL_UNFILTERED", "f339ad4bb5863b58b9c919ce7d040bb9"); } + + @Test public void threeWayWithRefs() { + WalkerTestSpec spec = new WalkerTestSpec( + baseTestString(" -B:NA19240_BGI,VCF "+validationDataLocation+"NA19240.BGI.RG.vcf" + + " -B:NA19240_ILLUMINA,VCF "+validationDataLocation+"NA19240.ILLUMINA.RG.vcf" + + " -B:NA19240_WUGSC,VCF "+validationDataLocation+"NA19240.WUGSC.RG.vcf" + + " -B:denovoInfo,VCF "+validationDataLocation+"yri_merged_validation_data_240610.annotated.b36.vcf" + + " -setKey centerSet" + + " -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED" + + " -priority NA19240_BGI,NA19240_ILLUMINA,NA19240_WUGSC,denovoInfo" + + " -genotypeMergeOptions UNIQUIFY -L 1"), + 1, + Arrays.asList("a07995587b855f3214fb71940bf23c0f")); + executeTest("threeWayWithRefs", spec); + } // complex examples with filtering, indels, and multiple alleles @@ -119,7 +119,7 @@ public class CombineVariantsIntegrationTest extends WalkerTest { executeTest("combineComplexSites 1:" + new File(file1).getName() + " 2:" + new File(file2).getName() + " args = " + args, spec); } - @Test public void complexTestFull() { combineComplexSites("", "64b991fd3850f83614518f7d71f0532f"); } +// @Test public void complexTestFull() { combineComplexSites("", "64b991fd3850f83614518f7d71f0532f"); } @Test public void complexTestMinimal() { combineComplexSites(" -minimalVCF", "0db9ef50fe54b60426474273d7c7fa99"); } @Test public void complexTestSitesOnly() { combineComplexSites(" -sites_only", "d20acb3d53ba0a02ce92d540ebeda2a9"); } @Test public void complexTestSitesOnlyMinimal() { combineComplexSites(" -sites_only -minimalVCF", "8d1b3d120515f8b56b5a0d10bc5da713"); } From 893cc2e103e25daf01018c86382869ddac0e1f4a Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Mon, 11 Jul 2011 23:15:08 -0400 Subject: [PATCH 082/161] Making the package public, so there's no dependances from public -> private --- .../walkers/diffengine/BAMDiffableReader.java | 122 +++++ .../gatk/walkers/diffengine/DiffElement.java | 118 +++++ .../gatk/walkers/diffengine/DiffEngine.java | 423 ++++++++++++++++++ .../gatk/walkers/diffengine/DiffNode.java | 239 ++++++++++ .../walkers/diffengine/DiffObjectsWalker.java | 113 +++++ .../gatk/walkers/diffengine/DiffValue.java | 90 ++++ .../walkers/diffengine/DiffableReader.java | 50 +++ .../gatk/walkers/diffengine/Difference.java | 58 +++ .../walkers/diffengine/VCFDiffableReader.java | 119 +++++ 9 files changed, 1332 insertions(+) create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java new file mode 100644 index 000000000..f7a395d9d --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import net.sf.samtools.*; +import net.sf.samtools.util.BlockCompressedInputStream; +import org.broad.tribble.readers.AsciiLineReader; +import org.broad.tribble.readers.LineReader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.Map; +import java.util.zip.GZIPInputStream; + + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 1:09 PM + * + * Class implementing diffnode reader for VCF + */ +public class BAMDiffableReader implements DiffableReader { + private final static int MAX_RECORDS_TO_READ = 1000; + @Override + public String getName() { return "BAM"; } + + @Override + public DiffElement readFromFile(File file) { + final SAMFileReader reader = new SAMFileReader(file, null); // null because we don't want it to look for the index + reader.setValidationStringency(SAMFileReader.ValidationStringency.SILENT); + + DiffNode root = DiffNode.rooted(file.getName()); + SAMRecordIterator iterator = reader.iterator(); + + int count = 0; + while ( iterator.hasNext() ) { + if ( count++ > MAX_RECORDS_TO_READ ) + break; + final SAMRecord record = iterator.next(); + + // name is the read name + first of pair + String name = record.getReadName().replace('.', '_'); + if ( record.getReadPairedFlag() ) { + name += record.getFirstOfPairFlag() ? "_1" : "_2"; + } + + DiffNode readRoot = DiffNode.empty(name, root); + + // add fields + readRoot.add("NAME", record.getReadName()); + readRoot.add("FLAGS", record.getFlags()); + readRoot.add("RNAME", record.getReferenceName()); + readRoot.add("POS", record.getAlignmentStart()); + readRoot.add("MAPQ", record.getMappingQuality()); + readRoot.add("CIGAR", record.getCigarString()); + readRoot.add("RNEXT", record.getMateReferenceName()); + readRoot.add("PNEXT", record.getMateAlignmentStart()); + readRoot.add("TLEN", record.getInferredInsertSize()); + readRoot.add("SEQ", record.getReadString()); + readRoot.add("QUAL", record.getBaseQualityString()); + + for ( SAMRecord.SAMTagAndValue xt : record.getAttributes() ) { + readRoot.add(xt.tag, xt.value); + } + + // add record to root + if ( ! root.hasElement(name) ) + // protect ourselves from malformed files + root.add(readRoot); + } + + reader.close(); + + return root.getBinding(); + } + + @Override + public boolean canRead(File file) { + final byte[] BAM_MAGIC = "BAM\1".getBytes(); + final byte[] buffer = new byte[BAM_MAGIC.length]; + try { + FileInputStream fstream = new FileInputStream(file); + new BlockCompressedInputStream(fstream).read(buffer,0,BAM_MAGIC.length); + return Arrays.equals(buffer, BAM_MAGIC); + } catch ( IOException e ) { + return false; + } catch ( net.sf.samtools.FileTruncatedException e ) { + return false; + } + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java new file mode 100644 index 000000000..eff24bb88 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import com.google.java.contract.*; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:55 PM + * + * An interface that must be implemented to allow us to calculate differences + * between structured objects + */ +@Invariant({ + "name != null", + "value != null", + "parent != null || name.equals(\"ROOT\")", + "value == null || value.getBinding() == this"}) +public class DiffElement { + public final static DiffElement ROOT = new DiffElement(); + + final private String name; + final private DiffElement parent; + final private DiffValue value; + + /** + * For ROOT only + */ + private DiffElement() { + this.name = "ROOT"; + this.parent = null; + this.value = new DiffValue(this, "ROOT"); + } + + @Requires({"name != null", "parent != null", "value != null"}) + public DiffElement(String name, DiffElement parent, DiffValue value) { + if ( name.equals("ROOT") ) throw new IllegalArgumentException("Cannot use reserved name ROOT"); + this.name = name; + this.parent = parent; + this.value = value; + this.value.setBinding(this); + } + + @Ensures({"result != null"}) + public String getName() { + return name; + } + + public DiffElement getParent() { + return parent; + } + + @Ensures({"result != null"}) + public DiffValue getValue() { + return value; + } + + public boolean isRoot() { return this == ROOT; } + + @Ensures({"result != null"}) + @Override + public String toString() { + return getName() + "=" + getValue().toString(); + } + + public String toString(int offset) { + return (offset > 0 ? Utils.dupString(' ', offset) : 0) + getName() + "=" + getValue().toString(offset); + } + + @Ensures({"result != null"}) + public final String fullyQualifiedName() { + if ( isRoot() ) + return ""; + else if ( parent.isRoot() ) + return name; + else + return parent.fullyQualifiedName() + "." + name; + } + + @Ensures({"result != null"}) + public String toOneLineString() { + return getName() + "=" + getValue().toOneLineString(); + } + + @Ensures({"result != null"}) + public DiffNode getValueAsNode() { + if ( getValue().isCompound() ) + return (DiffNode)getValue(); + else + throw new ReviewedStingException("Illegal request conversion of a DiffValue into a DiffNode: " + this); + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java new file mode 100644 index 000000000..ba2713bff --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java @@ -0,0 +1,423 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import com.google.java.contract.Requires; +import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.report.GATKReport; +import org.broadinstitute.sting.gatk.report.GATKReportTable; +import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.classloader.PluginManager; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; + +import java.io.File; +import java.io.PrintStream; +import java.util.*; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:51 PM + * A generic engine for comparing tree-structured objects + */ +public class DiffEngine { + final protected static Logger logger = Logger.getLogger(DiffEngine.class); + + private final Map readers = new HashMap(); + + public DiffEngine() { + loadDiffableReaders(); + } + + // -------------------------------------------------------------------------------- + // + // difference calculation + // + // -------------------------------------------------------------------------------- + + public List diff(DiffElement master, DiffElement test) { + DiffValue masterValue = master.getValue(); + DiffValue testValue = test.getValue(); + + if ( masterValue.isCompound() && masterValue.isCompound() ) { + return diff(master.getValueAsNode(), test.getValueAsNode()); + } else if ( masterValue.isAtomic() && testValue.isAtomic() ) { + return diff(masterValue, testValue); + } else { + // structural difference in types. one is node, other is leaf + return Arrays.asList(new Difference(master, test)); + } + } + + public List diff(DiffNode master, DiffNode test) { + Set allNames = new HashSet(master.getElementNames()); + allNames.addAll(test.getElementNames()); + List diffs = new ArrayList(); + + for ( String name : allNames ) { + DiffElement masterElt = master.getElement(name); + DiffElement testElt = test.getElement(name); + if ( masterElt == null && testElt == null ) { + throw new ReviewedStingException("BUG: unexceptedly got two null elements for field: " + name); + } else if ( masterElt == null || testElt == null ) { // if either is null, we are missing a value + // todo -- should one of these be a special MISSING item? + diffs.add(new Difference(masterElt, testElt)); + } else { + diffs.addAll(diff(masterElt, testElt)); + } + } + + return diffs; + } + + public List diff(DiffValue master, DiffValue test) { + if ( master.getValue().equals(test.getValue()) ) { + return Collections.emptyList(); + } else { + return Arrays.asList(new Difference(master.getBinding(), test.getBinding())); + } + } + + // -------------------------------------------------------------------------------- + // + // Summarizing differences + // + // -------------------------------------------------------------------------------- + + /** + * Emits a summary of the diffs to out. Suppose you have the following three differences: + * + * A.X.Z:1!=2 + * A.Y.Z:3!=4 + * B.X.Z:5!=6 + * + * The above is the itemized list of the differences. The summary looks for common differences + * in the name hierarchy, counts those shared elements, and emits the differences that occur + * in order of decreasing counts. + * + * So, in the above example, what are the shared elements? + * + * A.X.Z and B.X.Z share X.Z, so there's a *.X.Z with count 2 + * A.X.Z, A.Y.Z, and B.X.Z all share *.*.Z, with count 3 + * Each of A.X.Z, A.Y.Z, and B.X.Z are individually unique, with count 1 + * + * So we would emit the following summary: + * + * *.*.Z: 3 + * *.X.Z: 2 + * A.X.Z: 1 [specific difference: 1!=2] + * A.Y.Z: 1 [specific difference: 3!=4] + * B.X.Z: 1 [specific difference: 5!=6] + * + * The algorithm to accomplish this calculation is relatively simple. Start with all of the + * concrete differences. For each pair of differences A1.A2....AN and B1.B2....BN: + * + * find the longest common subsequence Si.Si+1...SN where Ai = Bi = Si + * If i == 0, then there's no shared substructure + * If i > 0, then generate the summarized value X = *.*...Si.Si+1...SN + * if X is a known summary, increment it's count, otherwise set its count to 1 + * + * Not that only pairs of the same length are considered as potentially equivalent + * + * @param params determines how we display the items + * @param diffs + */ + public void reportSummarizedDifferences(List diffs, SummaryReportParams params ) { + printSummaryReport(summarizeDifferences(diffs), params ); + } + + public List summarizeDifferences(List diffs) { + List diffPaths = new ArrayList(diffs.size()); + + for ( Difference diff1 : diffs ) { + diffPaths.add(diffNameToPath(diff1.getFullyQualifiedName())); + } + + return summarizedDifferencesOfPaths(diffPaths); + } + + final protected static String[] diffNameToPath(String diffName) { + return diffName.split("\\."); + } + + protected List summarizedDifferencesOfPaths(List diffPaths) { + Map summaries = new HashMap(); + + // create the initial set of differences + for ( int i = 0; i < diffPaths.size(); i++ ) { + for ( int j = 0; j <= i; j++ ) { + String[] diffPath1 = diffPaths.get(i); + String[] diffPath2 = diffPaths.get(j); + if ( diffPath1.length == diffPath2.length ) { + int lcp = longestCommonPostfix(diffPath1, diffPath2); + String path = lcp > 0 ? summarizedPath(diffPath2, lcp) : Utils.join(".", diffPath2); + addSummary(summaries, path, true); + } + } + } + + // count differences + for ( String[] diffPath : diffPaths ) { + for ( SummarizedDifference sumDiff : summaries.values() ) { + if ( sumDiff.matches(diffPath) ) + addSummary(summaries, sumDiff.getPath(), false); + } + } + + List sortedSummaries = new ArrayList(summaries.values()); + Collections.sort(sortedSummaries); + return sortedSummaries; + } + + private static void addSummary(Map summaries, String path, boolean onlyCatalog) { + if ( summaries.containsKey(path) ) { + if ( ! onlyCatalog ) + summaries.get(path).incCount(); + } else { + SummarizedDifference sumDiff = new SummarizedDifference(path); + summaries.put(sumDiff.getPath(), sumDiff); + } + } + + protected void printSummaryReport(List sortedSummaries, SummaryReportParams params ) { + GATKReport report = new GATKReport(); + final String tableName = "diffences"; + report.addTable(tableName, "Summarized differences between the master and test files.\nSee http://www.broadinstitute.org/gsa/wiki/index.php/DiffObjectsWalker_and_SummarizedDifferences for more information"); + GATKReportTable table = report.getTable(tableName); + table.addPrimaryKey("Difference", true); + table.addColumn("NumberOfOccurrences", 0); + + int count = 0, count1 = 0; + for ( SummarizedDifference diff : sortedSummaries ) { + if ( diff.getCount() < params.minSumDiffToShow ) + // in order, so break as soon as the count is too low + break; + + if ( params.maxItemsToDisplay != 0 && count++ > params.maxItemsToDisplay ) + break; + + if ( diff.getCount() == 1 ) { + count1++; + if ( params.maxCountOneItems != 0 && count1 > params.maxCountOneItems ) + break; + } + + table.set(diff.getPath(), "NumberOfOccurrences", diff.getCount()); + } + + table.write(params.out); + } + + protected static int longestCommonPostfix(String[] diffPath1, String[] diffPath2) { + int i = 0; + for ( ; i < diffPath1.length; i++ ) { + int j = diffPath1.length - i - 1; + if ( ! diffPath1[j].equals(diffPath2[j]) ) + break; + } + return i; + } + + /** + * parts is [A B C D] + * commonPostfixLength: how many parts are shared at the end, suppose its 2 + * We want to create a string *.*.C.D + * + * @param parts + * @param commonPostfixLength + * @return + */ + protected static String summarizedPath(String[] parts, int commonPostfixLength) { + int stop = parts.length - commonPostfixLength; + if ( stop > 0 ) parts = parts.clone(); + for ( int i = 0; i < stop; i++ ) { + parts[i] = "*"; + } + return Utils.join(".", parts); + } + + /** + * TODO -- all of the algorithms above should use SummarizedDifference instead + * TODO -- of some SummarizedDifferences and some low-level String[] + */ + public static class SummarizedDifference implements Comparable { + final String path; // X.Y.Z + final String[] parts; + int count = 0; + + public SummarizedDifference(String path) { + this.path = path; + this.parts = diffNameToPath(path); + } + + public void incCount() { count++; } + + public int getCount() { + return count; + } + + /** + * The fully qualified path object A.B.C etc + * @return + */ + public String getPath() { + return path; + } + + /** + * @return the length of the parts of this summary + */ + public int length() { + return this.parts.length; + } + + /** + * Returns true if the string parts matches this summary. Matches are + * must be equal() everywhere where this summary isn't *. + * @param otherParts + * @return + */ + public boolean matches(String[] otherParts) { + if ( otherParts.length != length() ) + return false; + + // TODO optimization: can start at right most non-star element + for ( int i = 0; i < length(); i++ ) { + String part = parts[i]; + if ( ! part.equals("*") && ! part.equals(otherParts[i]) ) + return false; + } + + return true; + } + + @Override + public String toString() { + return String.format("%s:%d", getPath(), getCount()); + } + + @Override + public int compareTo(SummarizedDifference other) { + // sort first highest to lowest count, then by lowest to highest path + int countCmp = Integer.valueOf(count).compareTo(other.count); + return countCmp != 0 ? -1 * countCmp : path.compareTo(other.path); + } + + + } + + // -------------------------------------------------------------------------------- + // + // plugin manager + // + // -------------------------------------------------------------------------------- + + public void loadDiffableReaders() { + List> drClasses = new PluginManager( DiffableReader.class ).getPlugins(); + + logger.info("Loading diffable modules:"); + for (Class drClass : drClasses ) { + logger.info("\t" + drClass.getSimpleName()); + + try { + DiffableReader dr = drClass.newInstance(); + readers.put(dr.getName(), dr); + } catch (InstantiationException e) { + throw new ReviewedStingException("Unable to instantiate module '" + drClass.getSimpleName() + "'"); + } catch (IllegalAccessException e) { + throw new ReviewedStingException("Illegal access error when trying to instantiate '" + drClass.getSimpleName() + "'"); + } + } + } + + protected Map getReaders() { + return readers; + } + + protected DiffableReader getReader(String name) { + return readers.get(name); + } + + /** + * Returns a reader appropriate for this file, or null if no such reader exists + * @param file + * @return + */ + public DiffableReader findReaderForFile(File file) { + for ( DiffableReader reader : readers.values() ) + if (reader.canRead(file) ) + return reader; + + return null; + } + + /** + * Returns true if reader appropriate for this file, or false if no such reader exists + * @param file + * @return + */ + public boolean canRead(File file) { + return findReaderForFile(file) != null; + } + + public DiffElement createDiffableFromFile(File file) { + DiffableReader reader = findReaderForFile(file); + if ( reader == null ) + throw new UserException("Unsupported file type: " + file); + else + return reader.readFromFile(file); + } + + public static boolean simpleDiffFiles(File masterFile, File testFile, DiffEngine.SummaryReportParams params) { + DiffEngine diffEngine = new DiffEngine(); + + if ( diffEngine.canRead(masterFile) && diffEngine.canRead(testFile) ) { + DiffElement master = diffEngine.createDiffableFromFile(masterFile); + DiffElement test = diffEngine.createDiffableFromFile(testFile); + List diffs = diffEngine.diff(master, test); + diffEngine.reportSummarizedDifferences(diffs, params); + return true; + } else { + return false; + } + } + + public static class SummaryReportParams { + PrintStream out = System.out; + int maxItemsToDisplay = 0; + int maxCountOneItems = 0; + int minSumDiffToShow = 0; + + public SummaryReportParams(PrintStream out, int maxItemsToDisplay, int maxCountOneItems, int minSumDiffToShow) { + this.out = out; + this.maxItemsToDisplay = maxItemsToDisplay; + this.maxCountOneItems = maxCountOneItems; + this.minSumDiffToShow = minSumDiffToShow; + } + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java new file mode 100644 index 000000000..0720e18c0 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import com.google.java.contract.Requires; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; + +import java.util.*; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:55 PM + * + * An interface that must be implemented to allow us to calculate differences + * between structured objects + */ +public class DiffNode extends DiffValue { + private Map getElementMap() { + return (Map)super.getValue(); + } + private static Map emptyElements() { return new HashMap(); } + + private DiffNode(Map elements) { + super(elements); + } + + private DiffNode(DiffElement binding, Map elements) { + super(binding, elements); + } + + // --------------------------------------------------------------------------- + // + // constructors + // + // --------------------------------------------------------------------------- + + public static DiffNode rooted(String name) { + return empty(name, DiffElement.ROOT); + } + + public static DiffNode empty(String name, DiffElement parent) { + DiffNode df = new DiffNode(emptyElements()); + DiffElement elt = new DiffElement(name, parent, df); + df.setBinding(elt); + return df; + } + + public static DiffNode empty(String name, DiffValue parent) { + return empty(name, parent.getBinding()); + } + + // --------------------------------------------------------------------------- + // + // accessors + // + // --------------------------------------------------------------------------- + + @Override + public boolean isAtomic() { return false; } + + public Collection getElementNames() { + return getElementMap().keySet(); + } + + public Collection getElements() { + return getElementMap().values(); + } + + private Collection getElements(boolean atomicOnly) { + List elts = new ArrayList(); + for ( DiffElement elt : getElements() ) + if ( (atomicOnly && elt.getValue().isAtomic()) || (! atomicOnly && elt.getValue().isCompound())) + elts.add(elt); + return elts; + } + + public Collection getAtomicElements() { + return getElements(true); + } + + public Collection getCompoundElements() { + return getElements(false); + } + + public DiffElement getElement(String name) { + for ( DiffElement elt : getElements() ) + if ( elt.getName().equals(name) ) + return elt; + return null; + } + + /** + * Returns true if name is bound in this node + * @param name + * @return + */ + public boolean hasElement(String name) { + return getElement(name) != null; + } + + // --------------------------------------------------------------------------- + // + // add + // + // --------------------------------------------------------------------------- + + @Requires("elt != null") + public void add(DiffElement elt) { + if ( getElementMap().containsKey(elt.getName()) ) + throw new IllegalArgumentException("Attempting to rebind already existing binding: " + elt + " node=" + this); + getElementMap().put(elt.getName(), elt); + } + + @Requires("elt != null") + public void add(DiffValue elt) { + add(elt.getBinding()); + } + + @Requires("elts != null") + public void add(Collection elts) { + for ( DiffElement e : elts ) + add(e); + } + + public void add(String name, Object value) { + add(new DiffElement(name, this.getBinding(), new DiffValue(value))); + } + + // --------------------------------------------------------------------------- + // + // toString + // + // --------------------------------------------------------------------------- + + @Override + public String toString() { + return toString(0); + } + + @Override + public String toString(int offset) { + String off = offset > 0 ? Utils.dupString(' ', offset) : ""; + StringBuilder b = new StringBuilder(); + + b.append("(").append("\n"); + Collection atomicElts = getAtomicElements(); + for ( DiffElement elt : atomicElts ) { + b.append(elt.toString(offset + 2)).append('\n'); + } + + for ( DiffElement elt : getCompoundElements() ) { + b.append(elt.toString(offset + 4)).append('\n'); + } + b.append(off).append(")").append("\n"); + + return b.toString(); + } + + @Override + public String toOneLineString() { + StringBuilder b = new StringBuilder(); + + b.append('('); + List parts = new ArrayList(); + for ( DiffElement elt : getElements() ) + parts.add(elt.toOneLineString()); + b.append(Utils.join(" ", parts)); + b.append(')'); + + return b.toString(); + } + + // -------------------------------------------------------------------------------- + // + // fromString and toOneLineString + // + // -------------------------------------------------------------------------------- + + public static DiffElement fromString(String tree) { + return fromString(tree, DiffElement.ROOT); + } + + /** + * Doesn't support full tree structure parsing + * @param tree + * @param parent + * @return + */ + private static DiffElement fromString(String tree, DiffElement parent) { + // X=(A=A B=B C=(D=D)) + String[] parts = tree.split("=", 2); + if ( parts.length != 2 ) + throw new ReviewedStingException("Unexpected tree structure: " + tree + " parts=" + parts); + String name = parts[0]; + String value = parts[1]; + + if ( value.length() == 0 ) + throw new ReviewedStingException("Illegal tree structure: " + value + " at " + tree); + + if ( value.charAt(0) == '(' ) { + if ( ! value.endsWith(")") ) + throw new ReviewedStingException("Illegal tree structure. Missing ): " + value + " at " + tree); + String subtree = value.substring(1, value.length()-1); + DiffNode rec = DiffNode.empty(name, parent); + String[] subParts = subtree.split(" "); + for ( String subPart : subParts ) { + rec.add(fromString(subPart, rec.getBinding())); + } + return rec.getBinding(); + } else { + return new DiffValue(name, parent, value).getBinding(); + } + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java new file mode 100644 index 000000000..a08108db2 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import org.apache.xmlbeans.impl.tool.Diff; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.gatk.walkers.RodWalker; + +import java.io.File; +import java.io.PrintStream; +import java.util.List; + +/** + * Compares two record-oriented files, itemizing specific difference between equivalent + * records in the two files. Reports both itemized and summarized differences. + * @author Mark DePristo + * @version 0.1 + */ +@Requires(value={}) +public class DiffObjectsWalker extends RodWalker { + @Output(doc="File to which results should be written",required=true) + protected PrintStream out; + + @Argument(fullName="maxRecords", shortName="M", doc="Max. number of records to process", required=false) + int MAX_RECORDS = 0; + + @Argument(fullName="maxCount1Records", shortName="M1", doc="Max. number of records occuring exactly once in the file to process", required=false) + int MAX_COUNT1_RECORDS = 0; + + @Argument(fullName="minCountForDiff", shortName="MCFD", doc="Min number of observations for a records to display", required=false) + int minCountForDiff = 1; + + @Argument(fullName="showItemizedDifferences", shortName="SID", doc="Should we enumerate all differences between the files?", required=false) + boolean showItemizedDifferences = false; + + @Argument(fullName="master", shortName="m", doc="Master file: expected results", required=true) + File masterFile; + + @Argument(fullName="test", shortName="t", doc="Test file: new results to compare to the master file", required=true) + File testFile; + + final DiffEngine diffEngine = new DiffEngine(); + + @Override + public void initialize() { + + } + + @Override + public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { + return 0; + } + + @Override + public Integer reduceInit() { + return 0; + } + + @Override + public Integer reduce(Integer counter, Integer sum) { + return counter + sum; + } + + @Override + public void onTraversalDone(Integer sum) { + out.printf("Reading master file %s%n", masterFile); + DiffElement master = diffEngine.createDiffableFromFile(masterFile); + out.printf("Reading test file %s%n", testFile); + DiffElement test = diffEngine.createDiffableFromFile(testFile); + +// out.printf("Master diff objects%n"); +// out.println(master.toString()); +// out.printf("Test diff objects%n"); +// out.println(test.toString()); + + List diffs = diffEngine.diff(master, test); + if ( showItemizedDifferences ) { + out.printf("Itemized results%n"); + for ( Difference diff : diffs ) + out.printf("DIFF: %s%n", diff.toString()); + } + + DiffEngine.SummaryReportParams params = new DiffEngine.SummaryReportParams(out, MAX_RECORDS, MAX_COUNT1_RECORDS, minCountForDiff); + diffEngine.reportSummarizedDifferences(diffs, params); + } +} \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java new file mode 100644 index 000000000..7245e9e8d --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import org.broadinstitute.sting.utils.Utils; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:55 PM + * + * An interface that must be implemented to allow us to calculate differences + * between structured objects + */ +public class DiffValue { + private DiffElement binding = null; + final private Object value; + + public DiffValue(Object value) { + this.value = value; + } + + public DiffValue(DiffElement binding, Object value) { + this.binding = binding; + this.value = value; + } + + public DiffValue(DiffValue parent, Object value) { + this(parent.getBinding(), value); + } + + public DiffValue(String name, DiffElement parent, Object value) { + this.binding = new DiffElement(name, parent, this); + this.value = value; + } + + public DiffValue(String name, DiffValue parent, Object value) { + this(name, parent.getBinding(), value); + } + + public DiffElement getBinding() { + return binding; + } + + protected void setBinding(DiffElement binding) { + this.binding = binding; + } + + public Object getValue() { + return value; + } + + public String toString() { + return getValue().toString(); + } + + public String toString(int offset) { + return toString(); + } + + public String toOneLineString() { + return getValue().toString(); + } + + public boolean isAtomic() { return true; } + public boolean isCompound() { return ! isAtomic(); } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java new file mode 100644 index 000000000..84c2eed10 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import com.google.java.contract.Ensures; +import com.google.java.contract.Requires; + +import java.io.File; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 1:09 PM + * + * Interface for readers creating diffable objects from a file + */ +public interface DiffableReader { + @Ensures("result != null") + public String getName(); + + @Ensures("result != null") + @Requires("file != null") + public DiffElement readFromFile(File file); + + @Requires("file != null") + public boolean canRead(File file); +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java new file mode 100644 index 000000000..6627a4cc5 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:53 PM + * + * Represents a specific difference between two specific DiffElements + */ +public class Difference { + DiffElement master, test; + + public Difference(DiffElement master, DiffElement test) { + if ( master == null && test == null ) throw new IllegalArgumentException("Master and test both cannot be null"); + this.master = master; + this.test = test; + } + + public String toString() { + return String.format("%s:%s!=%s", + getFullyQualifiedName(), + getOneLineString(master), + getOneLineString(test)); + } + + public String getFullyQualifiedName() { + return (master == null ? test : master).fullyQualifiedName(); + } + + private static String getOneLineString(DiffElement elt) { + return elt == null ? "MISSING" : elt.getValue().toOneLineString(); + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java new file mode 100644 index 000000000..743178538 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +import org.broad.tribble.readers.AsciiLineReader; +import org.broad.tribble.readers.LineReader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.io.*; +import java.util.Arrays; +import java.util.Map; +import java.util.zip.GZIPInputStream; + + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 1:09 PM + * + * Class implementing diffnode reader for VCF + */ +public class VCFDiffableReader implements DiffableReader { + @Override + public String getName() { return "VCF"; } + + @Override + public DiffElement readFromFile(File file) { + DiffNode root = DiffNode.rooted(file.getName()); + try { + LineReader lineReader = new AsciiLineReader(new FileInputStream(file)); + VCFCodec vcfCodec = new VCFCodec(); + VCFHeader header = (VCFHeader)vcfCodec.readHeader(lineReader); + + String line = lineReader.readLine(); + while ( line != null ) { + VariantContext vc = (VariantContext)vcfCodec.decode(line); + String name = vc.getChr() + ":" + vc.getStart(); + DiffNode vcRoot = DiffNode.empty(name, root); + + // add fields + vcRoot.add("CHROM", vc.getChr()); + vcRoot.add("POS", vc.getStart()); + vcRoot.add("ID", vc.hasID() ? vc.getID() : VCFConstants.MISSING_VALUE_v4); + vcRoot.add("REF", vc.getReference()); + vcRoot.add("ALT", vc.getAlternateAlleles()); + vcRoot.add("QUAL", vc.hasNegLog10PError() ? vc.getNegLog10PError() * 10 : VCFConstants.MISSING_VALUE_v4); + vcRoot.add("FILTER", vc.getFilters()); + + // add info fields + for (Map.Entry attribute : vc.getAttributes().entrySet()) { + if ( ! attribute.getKey().startsWith("_") && ! attribute.getKey().equals(VariantContext.ID_KEY)) + vcRoot.add(attribute.getKey(), attribute.getValue()); + } + + for (Genotype g : vc.getGenotypes().values() ) { + DiffNode gRoot = DiffNode.empty(g.getSampleName(), vcRoot); + gRoot.add("GT", g.getGenotypeString()); + gRoot.add("GQ", g.hasNegLog10PError() ? g.getNegLog10PError() * 10 : VCFConstants.MISSING_VALUE_v4 ); + + for (Map.Entry attribute : g.getAttributes().entrySet()) { + if ( ! attribute.getKey().startsWith("_") ) + gRoot.add(attribute.getKey(), attribute.getValue()); + } + + vcRoot.add(gRoot); + } + + root.add(vcRoot); + line = lineReader.readLine(); + } + + lineReader.close(); + } catch ( IOException e ) { + return null; + } + + return root.getBinding(); + } + + @Override + public boolean canRead(File file) { + try { + final String VCF4_HEADER = "##fileformat=VCFv4"; + char[] buff = new char[VCF4_HEADER.length()]; + new FileReader(file).read(buff, 0, VCF4_HEADER.length()); + String firstLine = new String(buff); + return firstLine.startsWith(VCF4_HEADER); + } catch ( IOException e ) { + return false; + } + } +} From d7d15019dd543decffa2169f074b123633fe5984 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Tue, 12 Jul 2011 01:16:21 -0400 Subject: [PATCH 083/161] Adding support for other simple header line types (e.g. ALT) and cleaning up the interface a bit. --- .../walkers/annotator/ChromosomeCounts.java | 5 +- .../walkers/genotyper/UnifiedGenotyper.java | 17 +++- .../utils/codecs/vcf/StandardVCFWriter.java | 3 +- .../utils/codecs/vcf/VCFAltHeaderLine.java | 28 +++++++ .../codecs/vcf/VCFCompoundHeaderLine.java | 3 + .../utils/codecs/vcf/VCFFilterHeaderLine.java | 48 +---------- .../utils/codecs/vcf/VCFFormatHeaderLine.java | 2 +- .../utils/codecs/vcf/VCFSimpleHeaderLine.java | 81 +++++++++++++++++++ .../sting/utils/codecs/vcf/VCFUtils.java | 15 ---- 9 files changed, 135 insertions(+), 67 deletions(-) create mode 100644 public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFAltHeaderLine.java create mode 100644 public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFSimpleHeaderLine.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java index 143722d7c..ed10d2072 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java @@ -25,6 +25,7 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; @@ -41,8 +42,8 @@ import java.util.*; public class ChromosomeCounts implements InfoFieldAnnotation, StandardAnnotation { private String[] keyNames = { VCFConstants.ALLELE_NUMBER_KEY, VCFConstants.ALLELE_COUNT_KEY, VCFConstants.ALLELE_FREQUENCY_KEY }; - private VCFInfoHeaderLine[] descriptions = { new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY, -1, VCFHeaderLineType.Float, "Allele Frequency, for each ALT allele, in the same order as listed"), - new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY, -1, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"), + private VCFInfoHeaderLine[] descriptions = { new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "Allele Frequency, for each ALT allele, in the same order as listed"), + new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"), new VCFInfoHeaderLine(VCFConstants.ALLELE_NUMBER_KEY, 1, VCFHeaderLineType.Integer, "Total number of alleles in called genotypes") }; public Map annotate(RefMetaDataTracker tracker, ReferenceContext ref, Map stratifiedContexts, VariantContext vc) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java index 7a765c602..fe0084a19 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java @@ -37,7 +37,6 @@ import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.commandline.*; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; import java.util.*; import java.io.PrintStream; @@ -158,7 +157,7 @@ public class UnifiedGenotyper extends LocusWalker getSupportedHeaderStrings() { + Set result = new HashSet(); + result.add(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_KEY, 1, VCFHeaderLineType.String, "Genotype")); + result.add(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_QUALITY_KEY, 1, VCFHeaderLineType.Float, "Genotype Quality")); + result.add(new VCFFormatHeaderLine(VCFConstants.DEPTH_KEY, 1, VCFHeaderLineType.Integer, "Read Depth (only filtered reads used for calling)")); + result.add(new VCFFormatHeaderLine(VCFConstants.PHRED_GENOTYPE_LIKELIHOODS_KEY, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "Normalized, Phred-scaled likelihoods for AA,AB,BB genotypes where A=ref and B=alt; if site is not biallelic, number of likelihoods if n*(n+1)/2")); + + return result; + } + /** * Compute at a given locus. * diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index 230773310..f4996b487 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -358,9 +358,8 @@ public class StandardVCFWriter implements VCFWriter { mWriter.write(key); if ( !entry.getValue().equals("") ) { - int numVals = 1; VCFInfoHeaderLine metaData = mHeader.getInfoHeaderLine(key); - if ( metaData != null && (metaData.getCountType() != VCFHeaderLineCount.INTEGER || metaData.getCount() > 0) ) { + if ( metaData == null || metaData.getCountType() != VCFHeaderLineCount.INTEGER || metaData.getCount() != 0 ) { mWriter.write("="); mWriter.write(entry.getValue()); } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFAltHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFAltHeaderLine.java new file mode 100644 index 000000000..a9de949d8 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFAltHeaderLine.java @@ -0,0 +1,28 @@ +package org.broadinstitute.sting.utils.codecs.vcf; + +/** + * @author ebanks + * A class representing a key=value entry for ALT fields in the VCF header + */ +public class VCFAltHeaderLine extends VCFSimpleHeaderLine { + + /** + * create a VCF filter header line + * + * @param name the name for this header line + * @param description the description for this header line + */ + public VCFAltHeaderLine(String name, String description) { + super(name, description, SupportedHeaderLineType.ALT); + } + + /** + * create a VCF info header line + * + * @param line the header line + * @param version the vcf header version + */ + protected VCFAltHeaderLine(String line, VCFHeaderVersion version) { + super(line, version, SupportedHeaderLineType.ALT); + } +} \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java index 49f9ab184..bb822f2ed 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCompoundHeaderLine.java @@ -89,6 +89,7 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF * @param count the count for this header line * @param type the type for this header line * @param description the description for this header line + * @param lineType the header line type */ protected VCFCompoundHeaderLine(String name, int count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) { super(lineType.toString(), ""); @@ -108,6 +109,7 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF * @param count the count type for this header line * @param type the type for this header line * @param description the description for this header line + * @param lineType the header line type */ protected VCFCompoundHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) { super(lineType.toString(), ""); @@ -124,6 +126,7 @@ public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCF * * @param line the header line * @param version the VCF header version + * @param lineType the header line type * */ protected VCFCompoundHeaderLine(String line, VCFHeaderVersion version, SupportedHeaderLineType lineType) { diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFilterHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFilterHeaderLine.java index 9176fc16e..418b80074 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFilterHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFilterHeaderLine.java @@ -1,19 +1,10 @@ package org.broadinstitute.sting.utils.codecs.vcf; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.Map; - - /** * @author ebanks * A class representing a key=value entry for FILTER fields in the VCF header */ -public class VCFFilterHeaderLine extends VCFHeaderLine implements VCFNamedHeaderLine { - - private String name; - private String description; - +public class VCFFilterHeaderLine extends VCFSimpleHeaderLine { /** * create a VCF filter header line @@ -22,12 +13,7 @@ public class VCFFilterHeaderLine extends VCFHeaderLine implements VCFNamedHeader * @param description the description for this header line */ public VCFFilterHeaderLine(String name, String description) { - super("FILTER", ""); - this.name = name; - this.description = description; - - if ( name == null || description == null ) - throw new IllegalArgumentException(String.format("Invalid VCFCompoundHeaderLine: key=%s name=%s desc=%s", super.getKey(), name, description )); + super(name, description, SupportedHeaderLineType.FILTER); } /** @@ -37,34 +23,6 @@ public class VCFFilterHeaderLine extends VCFHeaderLine implements VCFNamedHeader * @param version the vcf header version */ protected VCFFilterHeaderLine(String line, VCFHeaderVersion version) { - super("FILTER", ""); - Map mapping = VCFHeaderLineTranslator.parseLine(version,line, Arrays.asList("ID","Description")); - name = mapping.get("ID"); - description = mapping.get("Description"); - if ( description == null && ALLOW_UNBOUND_DESCRIPTIONS ) // handle the case where there's no description provided - description = UNBOUND_DESCRIPTION; - } - - protected String toStringEncoding() { - Map map = new LinkedHashMap(); - map.put("ID", name); - map.put("Description", description); - return "FILTER=" + VCFHeaderLine.toStringEncoding(map); - } - - public boolean equals(Object o) { - if ( !(o instanceof VCFFilterHeaderLine) ) - return false; - VCFFilterHeaderLine other = (VCFFilterHeaderLine)o; - return name.equals(other.name) && - description.equals(other.description); - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; + super(line, version, SupportedHeaderLineType.FILTER); } } \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java index f68cb670b..474c8dd14 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFFormatHeaderLine.java @@ -17,7 +17,7 @@ public class VCFFormatHeaderLine extends VCFCompoundHeaderLine { } public VCFFormatHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) { - super(name, count, type, description, SupportedHeaderLineType.INFO); + super(name, count, type, description, SupportedHeaderLineType.FORMAT); } protected VCFFormatHeaderLine(String line, VCFHeaderVersion version) { diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFSimpleHeaderLine.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFSimpleHeaderLine.java new file mode 100644 index 000000000..152043f28 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFSimpleHeaderLine.java @@ -0,0 +1,81 @@ +package org.broadinstitute.sting.utils.codecs.vcf; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; + + +/** + * @author ebanks + * A class representing a key=value entry for simple VCF header types + */ +public abstract class VCFSimpleHeaderLine extends VCFHeaderLine implements VCFNamedHeaderLine { + + public enum SupportedHeaderLineType { + FILTER, ALT; + } + + private String name; + private String description; + + // our type of line, i.e. filter, alt, etc + private final SupportedHeaderLineType lineType; + + + /** + * create a VCF filter header line + * + * @param name the name for this header line + * @param description the description for this header line + * @param lineType the header line type + */ + public VCFSimpleHeaderLine(String name, String description, SupportedHeaderLineType lineType) { + super(lineType.toString(), ""); + this.lineType = lineType; + this.name = name; + this.description = description; + + if ( name == null || description == null ) + throw new IllegalArgumentException(String.format("Invalid VCFSimpleHeaderLine: key=%s name=%s desc=%s", super.getKey(), name, description )); + } + + /** + * create a VCF info header line + * + * @param line the header line + * @param version the vcf header version + * @param lineType the header line type + */ + protected VCFSimpleHeaderLine(String line, VCFHeaderVersion version, SupportedHeaderLineType lineType) { + super(lineType.toString(), ""); + this.lineType = lineType; + Map mapping = VCFHeaderLineTranslator.parseLine(version,line, Arrays.asList("ID","Description")); + name = mapping.get("ID"); + description = mapping.get("Description"); + if ( description == null && ALLOW_UNBOUND_DESCRIPTIONS ) // handle the case where there's no description provided + description = UNBOUND_DESCRIPTION; + } + + protected String toStringEncoding() { + Map map = new LinkedHashMap(); + map.put("ID", name); + map.put("Description", description); + return lineType.toString() + "=" + VCFHeaderLine.toStringEncoding(map); + } + + public boolean equals(Object o) { + if ( !(o instanceof VCFSimpleHeaderLine) ) + return false; + VCFSimpleHeaderLine other = (VCFSimpleHeaderLine)o; + return name.equals(other.name) && + description.equals(other.description); + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } +} \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java index ecede068e..4037f75b9 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java @@ -180,19 +180,4 @@ public class VCFUtils { return new HashSet(map.values()); } - - /** - * return a set of supported format lines; what we currently support for output in the genotype fields of a VCF - * @return a set of VCF format lines - */ - public static Set getSupportedHeaderStrings() { - Set result = new HashSet(); - result.add(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_KEY, 1, VCFHeaderLineType.String, "Genotype")); - result.add(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_QUALITY_KEY, 1, VCFHeaderLineType.Float, "Genotype Quality")); - result.add(new VCFFormatHeaderLine(VCFConstants.DEPTH_KEY, 1, VCFHeaderLineType.Integer, "Read Depth (only filtered reads used for calling)")); - result.add(new VCFFormatHeaderLine(VCFConstants.PHRED_GENOTYPE_LIKELIHOODS_KEY, -1, VCFHeaderLineType.Float, "Normalized, Phred-scaled likelihoods for AA,AB,BB genotypes where A=ref and B=alt; if site is not biallelic, number of likelihoods if n*(n+1)/2")); - - return result; - } - } \ No newline at end of file From f313e14e4ef2c3f933505bb16527313ce09e618c Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Tue, 12 Jul 2011 08:50:58 -0400 Subject: [PATCH 084/161] Now deletes the dump directory on ant clean Moving diffengine tests from private to public --- build.xml | 1 + .../diffengine/DiffEngineUnitTest.java | 229 ++++++++++++++++ .../walkers/diffengine/DiffNodeUnitTest.java | 249 ++++++++++++++++++ .../diffengine/DiffableReaderUnitTest.java | 143 ++++++++++ .../diffengine/DifferenceUnitTest.java | 95 +++++++ 5 files changed, 717 insertions(+) create mode 100644 public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java create mode 100644 public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNodeUnitTest.java create mode 100644 public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java create mode 100644 public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java diff --git a/build.xml b/build.xml index 80627fae0..068c69316 100644 --- a/build.xml +++ b/build.xml @@ -981,6 +981,7 @@ + diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java new file mode 100644 index 000000000..cd6c3598a --- /dev/null +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +// our package +package org.broadinstitute.sting.gatk.walkers.diffengine; + + +// the imports for unit testing. + +import org.broadinstitute.sting.BaseTest; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.util.*; + +/** + * Basic unit test for DifferableReaders in reduced reads + */ +public class DiffEngineUnitTest extends BaseTest { + DiffEngine engine; + + @BeforeClass(enabled = true) + public void createDiffEngine() { + engine = new DiffEngine(); + } + + // -------------------------------------------------------------------------------- + // + // Difference testing routines + // + // -------------------------------------------------------------------------------- + + private class DifferenceTest extends TestDataProvider { + public DiffElement tree1, tree2; + public List differences; + + private DifferenceTest(String tree1, String tree2) { + this(tree1, tree2, Collections.emptyList()); + } + + private DifferenceTest(String tree1, String tree2, String difference) { + this(tree1, tree2, Arrays.asList(difference)); + } + + private DifferenceTest(String tree1, String tree2, List differences) { + super(DifferenceTest.class); + this.tree1 = DiffNode.fromString(tree1); + this.tree2 = DiffNode.fromString(tree2); + this.differences = differences; + } + + public String toString() { + return String.format("tree1=%s tree2=%s diff=%s", + tree1.toOneLineString(), tree2.toOneLineString(), differences); + } + } + + @DataProvider(name = "trees") + public Object[][] createTrees() { + new DifferenceTest("A=X", "A=X"); + new DifferenceTest("A=X", "A=Y", "A:X!=Y"); + new DifferenceTest("A=X", "B=X", Arrays.asList("A:X!=MISSING", "B:MISSING!=X")); + new DifferenceTest("A=(X=1)", "B=(X=1)", Arrays.asList("A:(X=1)!=MISSING", "B:MISSING!=(X=1)")); + new DifferenceTest("A=(X=1)", "A=(X=1)"); + new DifferenceTest("A=(X=1 Y=2)", "A=(X=1 Y=2)"); + new DifferenceTest("A=(X=1 Y=2 B=(Z=3))", "A=(X=1 Y=2 B=(Z=3))"); + new DifferenceTest("A=(X=1)", "A=(X=2)", "A.X:1!=2"); + new DifferenceTest("A=(X=1 Y=2 B=(Z=3))", "A=(X=1 Y=2 B=(Z=4))", "A.B.Z:3!=4"); + new DifferenceTest("A=(X=1)", "A=(X=1 Y=2)", "A.Y:MISSING!=2"); + new DifferenceTest("A=(X=1 Y=2 B=(Z=3))", "A=(X=1 Y=2)", "A.B:(Z=3)!=MISSING"); + return DifferenceTest.getTests(DifferenceTest.class); + } + + @Test(enabled = true, dataProvider = "trees") + public void testDiffs(DifferenceTest test) { + logger.warn("Test tree1: " + test.tree1.toOneLineString()); + logger.warn("Test tree2: " + test.tree2.toOneLineString()); + + List diffs = engine.diff(test.tree1, test.tree2); + logger.warn("Test expected diff : " + test.differences); + logger.warn("Observed diffs : " + diffs); + } + + // -------------------------------------------------------------------------------- + // + // Low-level routines for summarizing differences + // + // -------------------------------------------------------------------------------- + + @Test(enabled = true) + public void testLongestCommonPostfix() { + testLongestCommonPostfixHelper("A", "A", 1); + testLongestCommonPostfixHelper("A", "B", 0); + testLongestCommonPostfixHelper("A.B", "A.B", 2); + testLongestCommonPostfixHelper("A.B.C", "A.B.C", 3); + testLongestCommonPostfixHelper("A.B.C", "X.B.C", 2); + testLongestCommonPostfixHelper("A.B.C", "X.Y.C", 1); + testLongestCommonPostfixHelper("A.B.C", "X.Y.Z", 0); + testLongestCommonPostfixHelper("A.B.C", "A.X.C", 1); + testLongestCommonPostfixHelper("A.B.C", "A.X.Z", 0); + testLongestCommonPostfixHelper("A.B.C", "A.B.Z", 0); + } + + public void testLongestCommonPostfixHelper(String p1, String p2, int expected) { + String[] parts1 = p1.split("\\."); + String[] parts2 = p2.split("\\."); + int obs = DiffEngine.longestCommonPostfix(parts1, parts2); + Assert.assertEquals(obs, expected, "p1=" + p1 + " p2=" + p2 + " failed"); + } + + @Test(enabled = true, dependsOnMethods = "testLongestCommonPostfix") + public void testSummarizePath() { + testSummarizePathHelper("A", "A", "A"); + testSummarizePathHelper("A", "B", "*"); + testSummarizePathHelper("A.B", "A.B", "A.B"); + testSummarizePathHelper("A.B", "X.B", "*.B"); + testSummarizePathHelper("A.B", "X.Y", "*.*"); + testSummarizePathHelper("A.B.C", "A.B.C", "A.B.C"); + testSummarizePathHelper("A.B.C", "X.B.C", "*.B.C"); + testSummarizePathHelper("A.B.C", "X.Y.C", "*.*.C"); + testSummarizePathHelper("A.B.C", "X.Y.Z", "*.*.*"); + testSummarizePathHelper("A.B.C", "A.X.C", "*.*.C"); + testSummarizePathHelper("A.B.C", "A.X.Z", "*.*.*"); + testSummarizePathHelper("A.B.C", "A.B.Z", "*.*.*"); + } + + public void testSummarizePathHelper(String p1, String p2, String expected) { + String[] parts1 = DiffEngine.diffNameToPath(p1); + String[] parts2 = DiffEngine.diffNameToPath(p2); + int obs = DiffEngine.longestCommonPostfix(parts1, parts2); + String path = DiffEngine.summarizedPath(parts2, obs); + Assert.assertEquals(path, expected, "p1=" + p1 + " p2=" + p2 + " failed"); + } + + // -------------------------------------------------------------------------------- + // + // High-level difference summary + // + // -------------------------------------------------------------------------------- + + private class SummarizeDifferenceTest extends TestDataProvider { + List diffs = new ArrayList(); + List expecteds = new ArrayList(); + + public SummarizeDifferenceTest() { super(SummarizeDifferenceTest.class); } + + public SummarizeDifferenceTest addDiff(String... diffsToAdd) { + diffs.addAll(Arrays.asList(diffsToAdd)); + return this; + } + + public SummarizeDifferenceTest addSummary(String... expectedSummary) { + expecteds.addAll(Arrays.asList(expectedSummary)); + return this; + } + + public String toString() { + return String.format("diffs=%s => expected=%s", diffs, expecteds); + } + + public void test() { + List diffPaths = new ArrayList(diffs.size()); + for ( String diff : diffs ) { diffPaths.add(DiffEngine.diffNameToPath(diff)); } + + List sumDiffs = engine.summarizedDifferencesOfPaths(diffPaths); + + Assert.assertEquals(sumDiffs.size(), expecteds.size(), "Unexpected number of summarized differences: " + sumDiffs); + + for ( int i = 0; i < sumDiffs.size(); i++ ) { + DiffEngine.SummarizedDifference sumDiff = sumDiffs.get(i); + String expected = expecteds.get(i); + String[] pathCount = expected.split(":"); + String path = pathCount[0]; + int count = Integer.valueOf(pathCount[1]); + Assert.assertEquals(sumDiff.getPath(), path, "Unexpected path at: " + expected + " obs=" + sumDiff + " all=" + sumDiffs); + Assert.assertEquals(sumDiff.getCount(), count, "Unexpected counts at: " + expected + " obs=" + sumDiff + " all=" + sumDiffs); + } + } + } + + @DataProvider(name = "summaries") + public Object[][] createSummaries() { + new SummarizeDifferenceTest().addDiff("A", "A").addSummary("A:2"); + new SummarizeDifferenceTest().addDiff("A", "B").addSummary("A:1", "B:1"); + new SummarizeDifferenceTest().addDiff("A", "A", "A").addSummary("A:3"); + new SummarizeDifferenceTest().addDiff("A", "A", "A", "B").addSummary("A:3", "B:1"); + new SummarizeDifferenceTest().addDiff("A", "A", "A", "B", "B").addSummary("A:3", "B:2"); + new SummarizeDifferenceTest().addDiff("A", "A", "A", "B", "B", "C").addSummary("A:3", "B:2", "C:1"); + new SummarizeDifferenceTest().addDiff("A.X", "A.X").addSummary("A.X:2"); + new SummarizeDifferenceTest().addDiff("A.X", "A.X", "B.X").addSummary("*.X:3", "A.X:2", "B.X:1"); + new SummarizeDifferenceTest().addDiff("A.X", "A.X", "B.X", "B.X").addSummary("*.X:4", "A.X:2", "B.X:2"); + new SummarizeDifferenceTest().addDiff("A.B.C", "X.B.C").addSummary("*.B.C:2", "A.B.C:1", "X.B.C:1"); + new SummarizeDifferenceTest().addDiff("A.B.C", "X.Y.C", "X.Y.C").addSummary("*.*.C:3", "X.Y.C:2", "A.B.C:1"); + new SummarizeDifferenceTest().addDiff("A.B.C", "A.X.C", "X.Y.C").addSummary("*.*.C:3", "A.B.C:1", "A.X.C:1", "X.Y.C:1"); + new SummarizeDifferenceTest().addDiff("A.B.C", "A.X.C", "B.X.C").addSummary("*.*.C:3", "*.X.C:2", "A.B.C:1", "A.X.C:1", "B.X.C:1"); + new SummarizeDifferenceTest().addDiff("A.B.C", "A.X.C", "B.X.C", "B.X.C").addSummary("*.*.C:4", "*.X.C:3", "B.X.C:2", "A.B.C:1", "A.X.C:1"); + + return SummarizeDifferenceTest.getTests(SummarizeDifferenceTest.class); + } + + + @Test(enabled = true, dependsOnMethods = "testSummarizePath", dataProvider = "summaries") + public void testSummarizeDifferences(SummarizeDifferenceTest test) { + test.test(); + } +} \ No newline at end of file diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNodeUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNodeUnitTest.java new file mode 100644 index 000000000..534416d29 --- /dev/null +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNodeUnitTest.java @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +// our package +package org.broadinstitute.sting.gatk.walkers.diffengine; + + +// the imports for unit testing. + + +import org.broadinstitute.sting.BaseTest; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.util.*; + +/** + * Basic unit test for DifferableReaders in reduced reads + */ +public class DiffNodeUnitTest extends BaseTest { + // Data is: + // MY_ROOT + // fields: A=A, B=B + // nodes: C, D + // C: fields: E=E, nodes: none + // D: fields: F=F, G=G, nodes: none + static DiffNode MY_ROOT = DiffNode.rooted("MY_ROOT"); + static DiffValue Value_A = new DiffValue("A", MY_ROOT, "A"); + static DiffValue Value_B = new DiffValue("B", MY_ROOT, "B"); + static DiffNode NODE_C = DiffNode.empty("C", MY_ROOT); + static DiffNode NODE_D = DiffNode.empty("D", MY_ROOT); + static DiffValue Value_E = new DiffValue("E", NODE_C, "E"); + static DiffValue Value_F = new DiffValue("F", NODE_D, "F"); + static DiffValue Value_G = new DiffValue("G", NODE_D, "G"); + + static { + MY_ROOT.add(Value_A); + MY_ROOT.add(Value_B); + MY_ROOT.add(NODE_C); + MY_ROOT.add(NODE_D); + NODE_C.add(Value_E); + NODE_D.add(Value_F); + NODE_D.add(Value_G); + } + + + // -------------------------------------------------------------------------------- + // + // Element testing routines + // + // -------------------------------------------------------------------------------- + + private class ElementTest extends TestDataProvider { + public DiffElement elt; + public String name; + public String fullName; + public DiffElement parent; + + private ElementTest(DiffValue elt, DiffValue parent, String name, String fullName) { + this(elt.getBinding(), parent.getBinding(), name, fullName); + } + + private ElementTest(DiffElement elt, DiffElement parent, String name, String fullName) { + super(ElementTest.class); + this.elt = elt; + this.name = name; + this.fullName = fullName; + this.parent = parent; + } + + public String toString() { + return String.format("ElementTest elt=%s name=%s fullName=%s parent=%s", + elt.toOneLineString(), name, fullName, parent.getName()); + } + } + + @DataProvider(name = "elementdata") + public Object[][] createElementData() { + new ElementTest(MY_ROOT.getBinding(), DiffElement.ROOT, "MY_ROOT", "MY_ROOT"); + new ElementTest(NODE_C, MY_ROOT, "C", "MY_ROOT.C"); + new ElementTest(NODE_D, MY_ROOT, "D", "MY_ROOT.D"); + new ElementTest(Value_A, MY_ROOT, "A", "MY_ROOT.A"); + new ElementTest(Value_B, MY_ROOT, "B", "MY_ROOT.B"); + new ElementTest(Value_E, NODE_C, "E", "MY_ROOT.C.E"); + new ElementTest(Value_F, NODE_D, "F", "MY_ROOT.D.F"); + new ElementTest(Value_G, NODE_D, "G", "MY_ROOT.D.G"); + return TestDataProvider.getTests(ElementTest.class); + } + + @Test(enabled = true, dataProvider = "elementdata") + public void testElementMethods(ElementTest test) { + Assert.assertNotNull(test.elt.getName()); + Assert.assertNotNull(test.elt.getParent()); + Assert.assertEquals(test.elt.getName(), test.name); + Assert.assertEquals(test.elt.getParent(), test.parent); + Assert.assertEquals(test.elt.fullyQualifiedName(), test.fullName); + } + + // -------------------------------------------------------------------------------- + // + // DiffValue testing routines + // + // -------------------------------------------------------------------------------- + + private class LeafTest extends TestDataProvider { + public DiffValue diffvalue; + public Object value; + + private LeafTest(DiffValue diffvalue, Object value) { + super(LeafTest.class); + this.diffvalue = diffvalue; + this.value = value; + } + + public String toString() { + return String.format("LeafTest diffvalue=%s value=%s", diffvalue.toOneLineString(), value); + } + } + + @DataProvider(name = "leafdata") + public Object[][] createLeafData() { + new LeafTest(Value_A, "A"); + new LeafTest(Value_B, "B"); + new LeafTest(Value_E, "E"); + new LeafTest(Value_F, "F"); + new LeafTest(Value_G, "G"); + return TestDataProvider.getTests(LeafTest.class); + } + + @Test(enabled = true, dataProvider = "leafdata") + public void testLeafMethods(LeafTest test) { + Assert.assertNotNull(test.diffvalue.getValue()); + Assert.assertEquals(test.diffvalue.getValue(), test.value); + } + + // -------------------------------------------------------------------------------- + // + // Node testing routines + // + // -------------------------------------------------------------------------------- + + private class NodeTest extends TestDataProvider { + public DiffNode node; + public Set fields; + public Set subnodes; + public Set allNames; + + private NodeTest(DiffNode node, List fields, List subnodes) { + super(NodeTest.class); + this.node = node; + this.fields = new HashSet(fields); + this.subnodes = new HashSet(subnodes); + this.allNames = new HashSet(fields); + allNames.addAll(subnodes); + } + + public String toString() { + return String.format("NodeTest node=%s fields=%s subnodes=%s", + node.toOneLineString(), fields, subnodes); + } + } + + @DataProvider(name = "nodedata") + public Object[][] createData1() { + new NodeTest(MY_ROOT, Arrays.asList("A", "B"), Arrays.asList("C", "D")); + new NodeTest(NODE_C, Arrays.asList("E"), Collections.emptyList()); + new NodeTest(NODE_D, Arrays.asList("F", "G"), Collections.emptyList()); + return TestDataProvider.getTests(NodeTest.class); + } + + @Test(enabled = true, dataProvider = "nodedata") + public void testNodeAccessors(NodeTest test) { + Assert.assertNotNull(test.node.getElements()); + + for ( String name : test.allNames ) { + DiffElement elt = test.node.getElement(name); + Assert.assertNotNull(elt, "Failed to find field " + elt + " in " + test.node); + Assert.assertEquals(elt.getName(), name); + Assert.assertEquals(elt.getValue().isAtomic(), test.fields.contains(name), "Failed atomic/compound expectation: " + test.node); + } + } + + // NOTE: add routines are being implicitly tested by the creation of the data structures + + @Test(enabled = true, dataProvider = "nodedata") + public void testCounts(NodeTest test) { + Assert.assertEquals(test.node.getElements().size(), test.allNames.size()); + Assert.assertEquals(test.node.getElementNames(), test.allNames); + } + + // -------------------------------------------------------------------------------- + // + // fromString testing routines + // + // -------------------------------------------------------------------------------- + + private class FromStringTest extends TestDataProvider { + public String string; + public DiffElement expected; + + private FromStringTest(String string, DiffElement expected) { + super(FromStringTest.class); + this.string = string; + this.expected = expected; + } + + public String toString() { + return String.format("FromStringTest string=%s expected=%s", string, expected.toOneLineString()); + } + } + + @DataProvider(name = "fromstringdata") + public Object[][] createFromData() { + new FromStringTest("A=A", Value_A.getBinding()); + new FromStringTest("B=B", Value_B.getBinding()); + new FromStringTest("C=(E=E)", NODE_C.getBinding()); + new FromStringTest("D=(F=F G=G)", NODE_D.getBinding()); + return TestDataProvider.getTests(FromStringTest.class); + } + + @Test(enabled = true, dataProvider = "fromstringdata") + public void parseFromString(FromStringTest test) { + logger.warn("Testing from string: " + test.string); + DiffElement elt = DiffNode.fromString(test.string); + Assert.assertEquals(elt.toOneLineString(), test.expected.toOneLineString()); + } +} \ No newline at end of file diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java new file mode 100644 index 000000000..5738b643f --- /dev/null +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +// our package +package org.broadinstitute.sting.gatk.walkers.diffengine; + + +// the imports for unit testing. + + +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.BaseTest; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.*; + +/** + * Basic unit test for DifferableReaders in reduced reads + */ +public class DiffableReaderUnitTest extends BaseTest { + DiffEngine engine; + + File vcfFile = new File(testDir + "diffTestMaster.vcf"); + File bamFile = new File(testDir + "exampleBAM.bam"); + + @BeforeClass(enabled = true) + public void createDiffEngine() { + engine = new DiffEngine(); + } + + @Test(enabled = true) + public void testPluggableDiffableReaders() { + logger.warn("testPluggableDiffableReaders"); + Map readers = engine.getReaders(); + Assert.assertNotNull(readers); + Assert.assertTrue(readers.size() > 0); + Assert.assertNotNull(readers.get("VCF")); + for ( Map.Entry e : engine.getReaders().entrySet() ) { + logger.warn("Found diffable reader: " + e.getKey()); + Assert.assertEquals(e.getValue().getName(), e.getKey()); + Assert.assertEquals(e.getValue(), engine.getReader(e.getKey())); + } + } + + private static void testLeaf(DiffNode rec, String field, Object expected) { + DiffElement value = rec.getElement(field); + Assert.assertNotNull(value, "Expected to see leaf named " + field + " in rec " + rec); + Assert.assertEquals(value.getValue().getValue(), expected, "Expected to leaf named " + field + " to have value " + expected + " in rec " + rec); + } + + @Test(enabled = true, dependsOnMethods = "testPluggableDiffableReaders") + public void testVCF1() { + logger.warn("testVCF1"); + DiffableReader vcfReader = engine.getReader("VCF"); + Assert.assertTrue(vcfReader.canRead(vcfFile)); + Assert.assertFalse(vcfReader.canRead(bamFile)); + + DiffElement diff = vcfReader.readFromFile(vcfFile); + Assert.assertNotNull(diff); + + Assert.assertEquals(diff.getName(), vcfFile.getName()); + Assert.assertSame(diff.getParent(), DiffElement.ROOT); + + DiffNode node = diff.getValueAsNode(); + Assert.assertEquals(node.getElements().size(), 9); + + // chr1 2646 rs62635284 G A 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:53,75:3:-12.40,-0.90,-0.00:9.03 + DiffNode rec1 = node.getElement("chr1:2646").getValueAsNode(); + testLeaf(rec1, "CHROM", "chr1"); + testLeaf(rec1, "POS", 2646); + testLeaf(rec1, "ID", "rs62635284"); + testLeaf(rec1, "REF", Allele.create("G", true)); + testLeaf(rec1, "ALT", new HashSet(Arrays.asList(Allele.create("A")))); + testLeaf(rec1, "QUAL", 0.15); + testLeaf(rec1, "FILTER", Collections.emptySet()); + testLeaf(rec1, "AC", "2"); + testLeaf(rec1, "AF", "1.00"); + testLeaf(rec1, "AN", "2"); + } + + @Test(enabled = true, dependsOnMethods = "testPluggableDiffableReaders") + public void testBAM() { + logger.warn("testBAM"); + DiffableReader bamReader = engine.getReader("BAM"); + Assert.assertTrue(bamReader.canRead(bamFile)); + Assert.assertFalse(bamReader.canRead(vcfFile)); + + DiffElement diff = bamReader.readFromFile(bamFile); + Assert.assertNotNull(diff); + + Assert.assertEquals(diff.getName(), bamFile.getName()); + Assert.assertSame(diff.getParent(), DiffElement.ROOT); + + DiffNode node = diff.getValueAsNode(); + Assert.assertEquals(node.getElements().size(), 33); + + // 30PPJAAXX090125:1:42:512:1817#0 99 chr1 200 0 76M = + // 255 -130 ACCCTAACCCTAACCCTAACCCTAACCATAACCCTAAGACTAACCCTAAACCTAACCCTCATAATCGAAATACAAC + // BBBBC@C?AABCBB<63>=B@>+B9-9+)2B8,+@327B5A>90((>-+''3?(/'''A)(''19('7.,**%)3: + // PG:Z:0 RG:Z:exampleBAM.bam SM:Z:exampleBAM.bam + + DiffNode rec1 = node.getElement("30PPJAAXX090125:1:42:512:1817#0_1").getValueAsNode(); + testLeaf(rec1, "NAME", "30PPJAAXX090125:1:42:512:1817#0"); + testLeaf(rec1, "FLAGS", 99); + testLeaf(rec1, "RNAME", "chr1"); + testLeaf(rec1, "POS", 200); + testLeaf(rec1, "MAPQ", 0); + testLeaf(rec1, "CIGAR", "76M"); + testLeaf(rec1, "RNEXT", "chr1"); + testLeaf(rec1, "PNEXT", 255); + testLeaf(rec1, "TLEN", -130); + testLeaf(rec1, "SEQ", "ACCCTAACCCTAACCCTAACCCTAACCATAACCCTAAGACTAACCCTAAACCTAACCCTCATAATCGAAATACAAC"); + testLeaf(rec1, "QUAL", "BBBBC@C?AABCBB<63>=B@>+B9-9+)2B8,+@327B5A>90((>-+''3?(/'''A)(''19('7.,**%)3:"); + testLeaf(rec1, "PG", "0"); + testLeaf(rec1, "RG", "exampleBAM.bam"); + testLeaf(rec1, "SM", "exampleBAM.bam"); + } +} \ No newline at end of file diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java new file mode 100644 index 000000000..da272ec30 --- /dev/null +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +// our package +package org.broadinstitute.sting.gatk.walkers.diffengine; + + +// the imports for unit testing. + + +import org.broadinstitute.sting.BaseTest; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Basic unit test for DifferableReaders in reduced reads + */ +public class DifferenceUnitTest extends BaseTest { + // -------------------------------------------------------------------------------- + // + // testing routines + // + // -------------------------------------------------------------------------------- + + private class DifferenceTest extends TestDataProvider { + public DiffElement tree1, tree2; + public String difference; + + private DifferenceTest(String tree1, String tree2, String difference) { + this(DiffNode.fromString(tree1), DiffNode.fromString(tree2), difference); + } + + private DifferenceTest(DiffElement tree1, DiffElement tree2, String difference) { + super(DifferenceTest.class); + this.tree1 = tree1; + this.tree2 = tree2; + this.difference = difference; + } + + public String toString() { + return String.format("tree1=%s tree2=%s diff=%s", + tree1 == null ? "null" : tree1.toOneLineString(), + tree2 == null ? "null" : tree2.toOneLineString(), + difference); + } + } + + @DataProvider(name = "data") + public Object[][] createTrees() { + new DifferenceTest("A=X", "A=Y", "A:X!=Y"); + new DifferenceTest("A=Y", "A=X", "A:Y!=X"); + new DifferenceTest(DiffNode.fromString("A=X"), null, "A:X!=MISSING"); + new DifferenceTest(null, DiffNode.fromString("A=X"), "A:MISSING!=X"); + return DifferenceTest.getTests(DifferenceTest.class); + } + + @Test(enabled = true, dataProvider = "data") + public void testDiffToString(DifferenceTest test) { + logger.warn("Test tree1: " + (test.tree1 == null ? "null" : test.tree1.toOneLineString())); + logger.warn("Test tree2: " + (test.tree2 == null ? "null" : test.tree2.toOneLineString())); + logger.warn("Test expected diff : " + test.difference); + Difference diff = new Difference(test.tree1, test.tree2); + logger.warn("Observed diffs : " + diff); + Assert.assertEquals(diff.toString(), test.difference, "Observed diff string " + diff + " not equal to expected difference string " + test.difference ); + + } +} \ No newline at end of file From 8056a3fe89046d942c4b656ff8138283e0235769 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Tue, 12 Jul 2011 08:52:31 -0400 Subject: [PATCH 085/161] getElement() now uses O(1) get from hash instead of linear O(n) search. Enables us to read large files easily. --- .../sting/gatk/walkers/diffengine/DiffNode.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java index 0720e18c0..3e1be8609 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java @@ -107,11 +107,13 @@ public class DiffNode extends DiffValue { return getElements(false); } + /** + * Returns the element bound to name, or null if no such binding exists + * @param name + * @return + */ public DiffElement getElement(String name) { - for ( DiffElement elt : getElements() ) - if ( elt.getName().equals(name) ) - return elt; - return null; + return getElementMap().get(name); } /** From 05212aea62b2f78f7a739257bac86fd0b16d2c5b Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Tue, 12 Jul 2011 08:53:19 -0400 Subject: [PATCH 086/161] reader now takes an argument for the maximum number of elements to read from the file. --- .../walkers/diffengine/BAMDiffableReader.java | 5 ++--- .../gatk/walkers/diffengine/DiffEngine.java | 7 ++++++- .../walkers/diffengine/DiffObjectsWalker.java | 17 ++++++++++------- .../gatk/walkers/diffengine/DiffableReader.java | 2 +- .../walkers/diffengine/VCFDiffableReader.java | 10 ++++++++-- .../diffengine/DiffableReaderUnitTest.java | 4 ++-- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java index f7a395d9d..a5ebf27bb 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java @@ -51,12 +51,11 @@ import java.util.zip.GZIPInputStream; * Class implementing diffnode reader for VCF */ public class BAMDiffableReader implements DiffableReader { - private final static int MAX_RECORDS_TO_READ = 1000; @Override public String getName() { return "BAM"; } @Override - public DiffElement readFromFile(File file) { + public DiffElement readFromFile(File file, int maxElementsToRead) { final SAMFileReader reader = new SAMFileReader(file, null); // null because we don't want it to look for the index reader.setValidationStringency(SAMFileReader.ValidationStringency.SILENT); @@ -65,7 +64,7 @@ public class BAMDiffableReader implements DiffableReader { int count = 0; while ( iterator.hasNext() ) { - if ( count++ > MAX_RECORDS_TO_READ ) + if ( count++ > maxElementsToRead && maxElementsToRead != -1) break; final SAMRecord record = iterator.next(); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java index ba2713bff..54a7a464d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java @@ -385,12 +385,17 @@ public class DiffEngine { return findReaderForFile(file) != null; } + public DiffElement createDiffableFromFile(File file) { + return createDiffableFromFile(file, -1); + } + + public DiffElement createDiffableFromFile(File file, int maxElementsToRead) { DiffableReader reader = findReaderForFile(file); if ( reader == null ) throw new UserException("Unsupported file type: " + file); else - return reader.readFromFile(file); + return reader.readFromFile(file, maxElementsToRead); } public static boolean simpleDiffFiles(File masterFile, File testFile, DiffEngine.SummaryReportParams params) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java index a08108db2..fe411b195 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java @@ -48,11 +48,14 @@ public class DiffObjectsWalker extends RodWalker { @Output(doc="File to which results should be written",required=true) protected PrintStream out; - @Argument(fullName="maxRecords", shortName="M", doc="Max. number of records to process", required=false) - int MAX_RECORDS = 0; + @Argument(fullName="maxObjectsToRead", shortName="motr", doc="Max. number of objects to read from the files. -1 [default] means unlimited", required=false) + int MAX_OBJECTS_TO_READ = -1; - @Argument(fullName="maxCount1Records", shortName="M1", doc="Max. number of records occuring exactly once in the file to process", required=false) - int MAX_COUNT1_RECORDS = 0; + @Argument(fullName="maxDiffs", shortName="M", doc="Max. number of diffs to process", required=false) + int MAX_DIFFS = 0; + + @Argument(fullName="maxCount1Diffs", shortName="M1", doc="Max. number of diffs occuring exactly once in the file to process", required=false) + int MAX_COUNT1_DIFFS = 0; @Argument(fullName="minCountForDiff", shortName="MCFD", doc="Min number of observations for a records to display", required=false) int minCountForDiff = 1; @@ -91,9 +94,9 @@ public class DiffObjectsWalker extends RodWalker { @Override public void onTraversalDone(Integer sum) { out.printf("Reading master file %s%n", masterFile); - DiffElement master = diffEngine.createDiffableFromFile(masterFile); + DiffElement master = diffEngine.createDiffableFromFile(masterFile, MAX_OBJECTS_TO_READ); out.printf("Reading test file %s%n", testFile); - DiffElement test = diffEngine.createDiffableFromFile(testFile); + DiffElement test = diffEngine.createDiffableFromFile(testFile, MAX_OBJECTS_TO_READ); // out.printf("Master diff objects%n"); // out.println(master.toString()); @@ -107,7 +110,7 @@ public class DiffObjectsWalker extends RodWalker { out.printf("DIFF: %s%n", diff.toString()); } - DiffEngine.SummaryReportParams params = new DiffEngine.SummaryReportParams(out, MAX_RECORDS, MAX_COUNT1_RECORDS, minCountForDiff); + DiffEngine.SummaryReportParams params = new DiffEngine.SummaryReportParams(out, MAX_DIFFS, MAX_COUNT1_DIFFS, minCountForDiff); diffEngine.reportSummarizedDifferences(diffs, params); } } \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java index 84c2eed10..af5771c55 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java @@ -43,7 +43,7 @@ public interface DiffableReader { @Ensures("result != null") @Requires("file != null") - public DiffElement readFromFile(File file); + public DiffElement readFromFile(File file, int maxElementsToRead); @Requires("file != null") public boolean canRead(File file); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java index 743178538..06d14366f 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -51,15 +51,21 @@ public class VCFDiffableReader implements DiffableReader { public String getName() { return "VCF"; } @Override - public DiffElement readFromFile(File file) { + public DiffElement readFromFile(File file, int maxElementsToRead) { DiffNode root = DiffNode.rooted(file.getName()); try { LineReader lineReader = new AsciiLineReader(new FileInputStream(file)); VCFCodec vcfCodec = new VCFCodec(); - VCFHeader header = (VCFHeader)vcfCodec.readHeader(lineReader); + + // must be read as state is stored in reader itself + vcfCodec.readHeader(lineReader); String line = lineReader.readLine(); + int count = 0; while ( line != null ) { + if ( count++ > maxElementsToRead && maxElementsToRead != -1) + break; + VariantContext vc = (VariantContext)vcfCodec.decode(line); String name = vc.getChr() + ":" + vc.getStart(); DiffNode vcRoot = DiffNode.empty(name, root); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java index 5738b643f..baa2f0383 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java @@ -80,7 +80,7 @@ public class DiffableReaderUnitTest extends BaseTest { Assert.assertTrue(vcfReader.canRead(vcfFile)); Assert.assertFalse(vcfReader.canRead(bamFile)); - DiffElement diff = vcfReader.readFromFile(vcfFile); + DiffElement diff = vcfReader.readFromFile(vcfFile, -1); Assert.assertNotNull(diff); Assert.assertEquals(diff.getName(), vcfFile.getName()); @@ -110,7 +110,7 @@ public class DiffableReaderUnitTest extends BaseTest { Assert.assertTrue(bamReader.canRead(bamFile)); Assert.assertFalse(bamReader.canRead(vcfFile)); - DiffElement diff = bamReader.readFromFile(bamFile); + DiffElement diff = bamReader.readFromFile(bamFile, -1); Assert.assertNotNull(diff); Assert.assertEquals(diff.getName(), bamFile.getName()); From cfe43e3971327ff26ef9087e31b4294d4a98d99c Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Tue, 12 Jul 2011 13:43:46 -0400 Subject: [PATCH 088/161] Bug fix for Genotype given alleles: if we are in INDEL mode ignore SNPs and MNPs instead of emitting an empty site with alleles but no annotations --- .../genotyper/UnifiedGenotyperEngine.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 4c9080884..6fc972b5d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -634,17 +634,27 @@ public class UnifiedGenotyperEngine { if (vcInput == null) return null; - if (vcInput.isSNP() && ( UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.BOTH || UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.SNP)) - return GenotypeLikelihoodsCalculationModel.Model.SNP; + // todo - no support to genotype MNP's yet + if (vcInput.isMNP()) + return null; + + if (vcInput.isSNP()) { + if (( UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.BOTH || UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.SNP)) + return GenotypeLikelihoodsCalculationModel.Model.SNP; + else + // ignore SNP's if user chose INDEL mode + return null; + } else if ((vcInput.isIndel() || vcInput.isMixed()) && (UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.BOTH || UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.INDEL)) return GenotypeLikelihoodsCalculationModel.Model.INDEL; - } else { + } + else { // todo - this assumes SNP's take priority when BOTH is selected, should do a smarter way once extended events are removed if( UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.BOTH || UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.SNP) return GenotypeLikelihoodsCalculationModel.Model.SNP; else if (UAC.GLmodel == GenotypeLikelihoodsCalculationModel.Model.INDEL) return GenotypeLikelihoodsCalculationModel.Model.INDEL; - } + } } return null; } From 73735863b0fbff0e7dc5ee789f2e075ead13f7fa Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Tue, 12 Jul 2011 13:55:21 -0400 Subject: [PATCH 089/161] Fix for the case of requesting genotype for a sample that doesn't exist in a VariantContext --- .../sting/utils/variantcontext/VariantContext.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java index 5787b591f..da80a3431 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java @@ -867,7 +867,10 @@ public class VariantContext implements Feature { // to enable tribble intergrati for ( String name : sampleNames ) { if ( map.containsKey(name) ) throw new IllegalArgumentException("Duplicate names detected in requested samples " + sampleNames); - map.put(name, getGenotype(name)); + final Genotype g = getGenotype(name); + if ( g != null ) { + map.put(name, g); + } } return map; From a2597e7f00824b37174a648da7c648938f5c4886 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Tue, 12 Jul 2011 14:11:53 -0400 Subject: [PATCH 090/161] This commit incorporates several different changes that each pretty much break all the VCF-based integration tests, so I bunched them all together. We now officially emit VCF4.1 files (woo hoo), which means that the VCF headers are now all different (header version is 4.1 plus counts for some of the annotations are 'A' or 'G'). Also, I've added a Read Filter for reads with MQ=255 ('unavailable' in the SAM spec) and have applied this to the UG and the RMS MQ annotation. --- .../MappingQualityUnavailableReadFilter.java | 43 +++++++++++++++++ ...java => MappingQualityZeroReadFilter.java} | 5 +- .../annotator/AlleleBalanceBySample.java | 2 +- .../walkers/annotator/ChromosomeCounts.java | 4 +- .../annotator/MappingQualityRankSumTest.java | 7 ++- .../gatk/walkers/annotator/NBaseCount.java | 2 +- .../walkers/annotator/RMSMappingQuality.java | 7 ++- .../gatk/walkers/annotator/RankSumTest.java | 5 +- .../walkers/genotyper/UnifiedGenotyper.java | 5 +- .../indels/RealignerTargetCreator.java | 4 +- .../indels/SomaticIndelDetectorWalker.java | 2 +- .../phasing/ReadBackedPhasingWalker.java | 4 +- .../recalibration/CountCovariatesWalker.java | 4 +- .../sting/utils/QualityUtils.java | 4 ++ .../utils/codecs/vcf/StandardVCFWriter.java | 6 +-- .../VariantAnnotatorIntegrationTest.java | 28 +++++------ .../GenomicAnnotatorIntegrationTest.java | 6 +-- .../walkers/beagle/BeagleIntegrationTest.java | 6 +-- .../VariantFiltrationIntegrationTest.java | 22 ++++----- .../UnifiedGenotyperIntegrationTest.java | 48 +++++++++---------- .../ReadBackedPhasingIntegrationTest.java | 12 ++--- ...ntRecalibrationWalkersIntegrationTest.java | 2 +- .../CombineVariantsIntegrationTest.java | 34 ++++++------- .../LiftoverVariantsIntegrationTest.java | 6 +-- .../SelectVariantsIntegrationTest.java | 8 ++-- .../VCFStreamingIntegrationTest.java | 2 +- .../VariantsToVCFIntegrationTest.java | 8 ++-- .../VariantContextIntegrationTest.java | 2 +- 28 files changed, 169 insertions(+), 119 deletions(-) create mode 100644 public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java rename public/java/src/org/broadinstitute/sting/gatk/filters/{ZeroMappingQualityReadFilter.java => MappingQualityZeroReadFilter.java} (90%) diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java new file mode 100644 index 000000000..cecbedda8 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2009 The Broad Institute + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.filters; + +import net.sf.picard.util.QualityUtil; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.utils.QualityUtils; + +/** + * Filter out mapping quality zero reads. + * + * @author ebanks + * @version 0.1 + */ + +public class MappingQualityUnavailableReadFilter extends ReadFilter { + public boolean filterOut(SAMRecord rec) { + return (rec.getMappingQuality() == QualityUtils.MAPPING_QUALITY_UNAVAILABLE); + } +} + diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityZeroReadFilter.java similarity index 90% rename from public/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java rename to public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityZeroReadFilter.java index 7e6fc5e82..e49d4117c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityZeroReadFilter.java @@ -24,17 +24,16 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** - * Filter out zero mapping quality reads. + * Filter out mapping quality zero reads. * * @author hanna * @version 0.1 */ -public class ZeroMappingQualityReadFilter extends ReadFilter { +public class MappingQualityZeroReadFilter extends ReadFilter { public boolean filterOut(SAMRecord rec) { return (rec.getMappingQuality() == 0); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java index 0be737897..51d290763 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java @@ -62,5 +62,5 @@ public class AlleleBalanceBySample implements GenotypeAnnotation, ExperimentalAn public List getKeyNames() { return Arrays.asList("AB"); } - public List getDescriptions() { return Arrays.asList(new VCFFormatHeaderLine(getKeyNames().get(0), -1, VCFHeaderLineType.Float, "Allele balance for each het genotype")); } + public List getDescriptions() { return Arrays.asList(new VCFFormatHeaderLine(getKeyNames().get(0), 1, VCFHeaderLineType.Float, "Allele balance for each het genotype")); } } \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java index ed10d2072..f3ec2b1df 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java @@ -42,8 +42,8 @@ import java.util.*; public class ChromosomeCounts implements InfoFieldAnnotation, StandardAnnotation { private String[] keyNames = { VCFConstants.ALLELE_NUMBER_KEY, VCFConstants.ALLELE_COUNT_KEY, VCFConstants.ALLELE_FREQUENCY_KEY }; - private VCFInfoHeaderLine[] descriptions = { new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "Allele Frequency, for each ALT allele, in the same order as listed"), - new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"), + private VCFInfoHeaderLine[] descriptions = { new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Float, "Allele Frequency, for each ALT allele, in the same order as listed"), + new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"), new VCFInfoHeaderLine(VCFConstants.ALLELE_NUMBER_KEY, 1, VCFHeaderLineType.Integer, "Total number of alleles in called genotypes") }; public Map annotate(RefMetaDataTracker tracker, ReferenceContext ref, Map stratifiedContexts, VariantContext vc) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java index 11f86b972..8260a5a81 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; @@ -21,7 +22,7 @@ public class MappingQualityRankSumTest extends RankSumTest { protected void fillQualsFromPileup(byte ref, byte alt, ReadBackedPileup pileup, List refQuals, List altQuals) { for ( final PileupElement p : pileup ) { - if( isUsableBase(p) && p.getMappingQual() < 254 ) { // 254 and 255 are special mapping qualities used as a code by aligners + if ( isUsableBase(p) ) { if ( p.getBase() == ref ) { refQuals.add((double)p.getMappingQual()); } else if ( p.getBase() == alt ) { @@ -34,7 +35,7 @@ public class MappingQualityRankSumTest extends RankSumTest { // equivalent is whether indel likelihoods for reads corresponding to ref allele are more likely than reads corresponding to alt allele ? HashMap> indelLikelihoodMap = IndelGenotypeLikelihoodsCalculationModel.getIndelLikelihoodMap(); for (final PileupElement p: pileup) { - if (indelLikelihoodMap.containsKey(p) && p.getMappingQual() < 254) { + if (indelLikelihoodMap.containsKey(p) && p.getMappingQual() != 0 && p.getMappingQual() != QualityUtils.MAPPING_QUALITY_UNAVAILABLE) { // retrieve likelihood information corresponding to this read LinkedHashMap el = indelLikelihoodMap.get(p); // by design, first element in LinkedHashMap was ref allele @@ -54,8 +55,6 @@ public class MappingQualityRankSumTest extends RankSumTest { refQuals.add((double)p.getMappingQual()); else if (altLikelihood > refLikelihood + INDEL_LIKELIHOOD_THRESH) altQuals.add((double)p.getMappingQual()); - - } } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java index ba3e2cc8b..3b64abfff 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java @@ -47,5 +47,5 @@ public class NBaseCount implements InfoFieldAnnotation { public List getKeyNames() { return Arrays.asList("PercentNBaseSolid"); } - public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("PercentNBaseSolid", 4, VCFHeaderLineType.Float, "Percentage of N bases in the pileup (counting only SOLiD reads)")); } + public List getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("PercentNBaseSolid", 1, VCFHeaderLineType.Float, "Percentage of N bases in the pileup (counting only SOLiD reads)")); } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java index 6e80c7555..1ef7ccd0b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; @@ -38,8 +39,10 @@ public class RMSMappingQuality implements InfoFieldAnnotation, StandardAnnotatio pileup = context.getBasePileup(); if (pileup != null) { - for (PileupElement p : pileup ) - qualities[index++] = p.getRead().getMappingQuality(); + for (PileupElement p : pileup ) { + if ( p.getMappingQual() != QualityUtils.MAPPING_QUALITY_UNAVAILABLE ) + qualities[index++] = p.getMappingQual(); + } } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java index 1a967293f..f00abd6a1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java @@ -106,6 +106,9 @@ public abstract class RankSumTest implements InfoFieldAnnotation, StandardAnnota protected abstract void fillIndelQualsFromPileup(ReadBackedPileup pileup, List refQuals, List altQuals); protected static boolean isUsableBase( final PileupElement p ) { - return !( p.isDeletion() || p.getMappingQual() == 0 || ((int)p.getQual()) < 6 ); // need the unBAQed quality score here + return !( p.isDeletion() || + p.getMappingQual() == 0 || + p.getMappingQual() == QualityUtils.MAPPING_QUALITY_UNAVAILABLE || + ((int)p.getQual()) < QualityUtils.MIN_USABLE_Q_SCORE ); // need the unBAQed quality score here } } \ No newline at end of file diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java index fe0084a19..fc8a5819a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java @@ -25,6 +25,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; +import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.gatk.contexts.*; import org.broadinstitute.sting.gatk.filters.BadMateFilter; @@ -47,7 +48,7 @@ import java.io.PrintStream; * multi-sample data. The user can choose from several different incorporated calculation models. */ @BAQMode(QualityMode = BAQ.QualityMode.ADD_TAG, ApplicationTime = BAQ.ApplicationTime.ON_INPUT) -@ReadFilters( {BadMateFilter.class} ) +@ReadFilters( {BadMateFilter.class, MappingQualityUnavailableReadFilter.class} ) @Reference(window=@Window(start=-200,stop=200)) @By(DataSource.REFERENCE) @Downsample(by=DownsampleType.BY_SAMPLE, toCoverage=250) @@ -175,7 +176,7 @@ public class UnifiedGenotyper extends LocusWalker { // @Output // PrintStream out; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java index e59b29502..4833a6cad 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java @@ -32,7 +32,7 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.gatk.filters.ZeroMappingQualityReadFilter; +import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.walkers.*; @@ -58,7 +58,7 @@ import static org.broadinstitute.sting.utils.codecs.vcf.VCFUtils.getVCFHeadersFr @Requires(value = {DataSource.READS, DataSource.REFERENCE}, referenceMetaData = @RMD(name = "variant", type = ReferenceOrderedDatum.class)) @By(DataSource.READS) -@ReadFilters({ZeroMappingQualityReadFilter.class}) +@ReadFilters({MappingQualityZeroReadFilter.class}) // Filter out all reads with zero mapping quality public class ReadBackedPhasingWalker extends RodWalker { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java index ee504b6e7..6673bec92 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java @@ -34,7 +34,7 @@ import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.gatk.filters.ZeroMappingQualityReadFilter; +import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.walkers.*; @@ -75,7 +75,7 @@ import java.util.Map; @BAQMode(ApplicationTime = BAQ.ApplicationTime.FORBIDDEN) @By( DataSource.READS ) // Only look at covered loci, not every loci of the reference file -@ReadFilters( {ZeroMappingQualityReadFilter.class} ) // Filter out all reads with zero mapping quality +@ReadFilters( {MappingQualityZeroReadFilter.class} ) // Filter out all reads with zero mapping quality @Requires( {DataSource.READS, DataSource.REFERENCE, DataSource.REFERENCE_BASES} ) // This walker requires both -I input.bam and -R reference.fasta @PartitionBy(PartitionType.LOCUS) public class CountCovariatesWalker extends LocusWalker implements TreeReducible { diff --git a/public/java/src/org/broadinstitute/sting/utils/QualityUtils.java b/public/java/src/org/broadinstitute/sting/utils/QualityUtils.java index 23054e95f..fad2320fc 100755 --- a/public/java/src/org/broadinstitute/sting/utils/QualityUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/QualityUtils.java @@ -9,9 +9,13 @@ import net.sf.samtools.SAMUtils; * @author Kiran Garimella */ public class QualityUtils { + public final static byte MAX_QUAL_SCORE = SAMUtils.MAX_PHRED_SCORE; public final static double MIN_REASONABLE_ERROR = 0.0001; public final static byte MAX_REASONABLE_Q_SCORE = 40; + public final static byte MIN_USABLE_Q_SCORE = 6; + + public final static int MAPPING_QUALITY_UNAVAILABLE = 255; /** * Private constructor. No instantiating this class! diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index f4996b487..a8bf74707 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -123,12 +123,10 @@ public class StandardVCFWriter implements VCFWriter { try { // the file format field needs to be written first - mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_0.getFormatString() + "=" + VCFHeaderVersion.VCF4_0.getVersionString() + "\n"); + mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_1.getFormatString() + "=" + VCFHeaderVersion.VCF4_1.getVersionString() + "\n"); for ( VCFHeaderLine line : mHeader.getMetaData() ) { - if ( line.getKey().equals(VCFHeaderVersion.VCF4_0.getFormatString()) || - line.getKey().equals(VCFHeaderVersion.VCF3_3.getFormatString()) || - line.getKey().equals(VCFHeaderVersion.VCF3_2.getFormatString()) ) + if ( VCFHeaderVersion.isFormatString(line.getKey()) ) continue; // are the records filtered (so we know what to put in the FILTER column of passing records) ? diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java index 6ba6926c6..e6300e6c9 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java @@ -15,7 +15,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testHasAnnotsNotAsking1() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -L 1:10,020,000-10,021,000", 1, - Arrays.asList("4cc077eb3d343e6b7ba12bff86ebe347")); + Arrays.asList("8a105fa5eebdfffe7326bc5b3d8ffd1c")); executeTest("test file has annotations, not asking for annotations, #1", spec); } @@ -23,7 +23,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testHasAnnotsNotAsking2() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:variant,VCF3 " + validationDataLocation + "vcfexample3.vcf -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,050,000", 1, - Arrays.asList("1de8e943fbf55246ebd19efa32f22a58")); + Arrays.asList("964f1016ec9a3c55333f62dd834c14d6")); executeTest("test file has annotations, not asking for annotations, #2", spec); } @@ -31,7 +31,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testHasAnnotsAsking1() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -L 1:10,020,000-10,021,000", 1, - Arrays.asList("93c110e45fd4aedb044a8a5501e23336")); + Arrays.asList("8e7de435105499cd71ffc099e268a83e")); executeTest("test file has annotations, asking for annotations, #1", spec); } @@ -39,7 +39,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testHasAnnotsAsking2() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3.vcf -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,050,000", 1, - Arrays.asList("f5cb45910ed719f46159f9f71acaecf4")); + Arrays.asList("64b6804cb1e27826e3a47089349be581")); executeTest("test file has annotations, asking for annotations, #2", spec); } @@ -47,7 +47,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testNoAnnotsNotAsking1() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:variant,VCF3 " + validationDataLocation + "vcfexample2empty.vcf -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -L 1:10,020,000-10,021,000", 1, - Arrays.asList("4b48e7d095ef73e3151542ea976ecd89")); + Arrays.asList("42ccee09fa9f8c58f4a0d4f1139c094f")); executeTest("test file doesn't have annotations, not asking for annotations, #1", spec); } @@ -55,7 +55,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testNoAnnotsNotAsking2() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,050,000", 1, - Arrays.asList("28dfbfd178aca071b948cd3dc2365357")); + Arrays.asList("f2ddfa8105c290b1f34b7a261a02a1ac")); executeTest("test file doesn't have annotations, not asking for annotations, #2", spec); } @@ -63,7 +63,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testNoAnnotsAsking1() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample2empty.vcf -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -L 1:10,020,000-10,021,000", 1, - Arrays.asList("a330a5bc3ee72a51dbeb7e6c97a0db99")); + Arrays.asList("fd1ffb669800c2e07df1e2719aa38e49")); executeTest("test file doesn't have annotations, asking for annotations, #1", spec); } @@ -71,7 +71,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testNoAnnotsAsking2() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,050,000", 1, - Arrays.asList("3a31d1ef471acfb881a2dec7963fe3f4")); + Arrays.asList("09f8e840770a9411ff77508e0ed0837f")); executeTest("test file doesn't have annotations, asking for annotations, #2", spec); } @@ -79,7 +79,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testOverwritingHeader() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF " + validationDataLocation + "vcfexample4.vcf -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,001,292", 1, - Arrays.asList("a63fd8ff7bafbd46b7f009144a7c2ad1")); + Arrays.asList("78d2c19f8107d865970dbaf3e12edd92")); executeTest("test overwriting header", spec); } @@ -87,7 +87,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testNoReads() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -BTI variant", 1, - Arrays.asList("36378f1245bb99d902fbfe147605bc42")); + Arrays.asList("16e3a1403fc376320d7c69492cad9345")); executeTest("not passing it any reads", spec); } @@ -95,7 +95,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testDBTagWithDbsnp() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -D " + GATKDataLocation + "dbsnp_129_b36.rod -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -BTI variant", 1, - Arrays.asList("0257a1cc3c703535b2d3c5046bf88ab7")); + Arrays.asList("3da8ca2b6bdaf6e92d94a8c77a71313d")); executeTest("getting DB tag with dbSNP", spec); } @@ -103,7 +103,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testDBTagWithHapMap() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:compH3,VCF " + validationDataLocation + "fakeHM3.vcf -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -BTI variant", 1, - Arrays.asList("2d7c73489dcf0db433bebdf79a068764")); + Arrays.asList("1bc01c5b3bd0b7aef75230310c3ce688")); executeTest("getting DB tag with HM3", spec); } @@ -111,13 +111,13 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testUsingExpression() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:foo,VCF " + validationDataLocation + "targetAnnotations.vcf -G \"Standard\" -B:variant,VCF3 " + validationDataLocation + "vcfexample3empty.vcf -E foo.AF -BTI variant", 1, - Arrays.asList("2f6efd08d818faa1eb0631844437c64a")); + Arrays.asList("e9c0d832dc6b4ed06c955060f830c140")); executeTest("using expression", spec); } @Test public void testTabixAnnotations() { - final String MD5 = "6c7a6a1c0027bf82656542a9b2671a35"; + final String MD5 = "13269d5a2e16f06fd755cc0fb9271acf"; for ( String file : Arrays.asList("CEU.exon.2010_03.sites.vcf", "CEU.exon.2010_03.sites.vcf.gz")) { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -A HomopolymerRun -B:variant,VCF " + validationDataLocation + "/" + file + " -BTI variant -NO_HEADER", 1, diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotatorIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotatorIntegrationTest.java index c4f6d5ebc..c75a5b2dc 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotatorIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotatorIntegrationTest.java @@ -29,7 +29,7 @@ public class GenomicAnnotatorIntegrationTest extends WalkerTest { */ - String[] md5WithDashSArg = {"3d3b61a83c1189108eabb2df04218099"}; + String[] md5WithDashSArg = {"efba4ce1641cfa2ef88a64395f2ebce8"}; WalkerTestSpec specWithSArg = new WalkerTestSpec( "-T GenomicAnnotator -R " + b36KGReference + " -B:variant,vcf3 /humgen/gsa-hpprojects/GATK/data/Annotations/examples/CEU_hapmap_nogt_23_subset.vcf" + @@ -58,7 +58,7 @@ public class GenomicAnnotatorIntegrationTest extends WalkerTest { "-o %s" ), 1, - Arrays.asList("caa562160733aa638e1ba413ede209ae") + Arrays.asList("772fc3f43b70770ec6c6acbb8bbbd4c0") ); executeTest("testGenomicAnnotatorOnIndels", testOnIndels); } @@ -76,7 +76,7 @@ public class GenomicAnnotatorIntegrationTest extends WalkerTest { "-o %s" ), 1, - Arrays.asList("a4cf76f08fa90284b6988a464b6e0c17") + Arrays.asList("081ade7f3d2d3c5f19cb1e8651a626f3") ); executeTest("testGenomicAnnotatorOnSNPsAndIndels", testOnSNPsAndIndels); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/beagle/BeagleIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/beagle/BeagleIntegrationTest.java index 70c34e729..fef1b6e64 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/beagle/BeagleIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/beagle/BeagleIntegrationTest.java @@ -41,7 +41,7 @@ public class BeagleIntegrationTest extends WalkerTest { "-B:beagleR2,BEAGLE " + beagleValidationDataLocation + "inttestbgl.r2 " + "-B:beagleProbs,BEAGLE " + beagleValidationDataLocation + "inttestbgl.gprobs " + "-B:beaglePhased,BEAGLE " + beagleValidationDataLocation + "inttestbgl.phased " + - "-o %s -NO_HEADER", 1, Arrays.asList("6bccee48ad2f06ba5a8c774fed444478")); + "-o %s -NO_HEADER", 1, Arrays.asList("3531451e84208264104040993889aaf4")); executeTest("test BeagleOutputToVCF", spec); } @@ -60,7 +60,7 @@ public class BeagleIntegrationTest extends WalkerTest { "-T ProduceBeagleInput -B:variant,VCF /humgen/gsa-hpprojects/GATK/data/Validation_Data/NA12878_HSQ_chr22_14-16m.vcf "+ "-B:validation,VCF /humgen/gsa-hpprojects/GATK/data/Validation_Data/NA12878_OMNI_chr22_14-16m.vcf "+ "-L 22:14000000-16000000 -o %s -bvcf %s -bs 0.8 -valp 0.98 -R /humgen/1kg/reference/human_g1k_v37.fasta -NO_HEADER ",2, - Arrays.asList("660986891b30cdc937e0f2a3a5743faa","223fb977e8db567dcaf632c6ee51f294")); + Arrays.asList("660986891b30cdc937e0f2a3a5743faa","e96ddd51da9f4a797b2aa8c20e404166")); executeTest("test BeagleInputWithBootstrap",spec); } @@ -72,7 +72,7 @@ public class BeagleIntegrationTest extends WalkerTest { "-B:beagleR2,beagle /humgen/gsa-hpprojects/GATK/data/Validation_Data/EUR_beagle_in_test.r2 "+ "-B:beagleProbs,beagle /humgen/gsa-hpprojects/GATK/data/Validation_Data/EUR_beagle_in_test.gprobs.bgl "+ "-B:beaglePhased,beagle /humgen/gsa-hpprojects/GATK/data/Validation_Data/EUR_beagle_in_test.phased.bgl "+ - "-L 20:1-70000 -o %s -NO_HEADER ",1,Arrays.asList("24b88ef8cdf6e347daab491f0256be5a")); + "-L 20:1-70000 -o %s -NO_HEADER ",1,Arrays.asList("8dd6ec53994fb46c5c22af8535d22965")); executeTest("testBeagleChangesSitesToRef",spec); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationIntegrationTest.java index 3d75fdc44..7bec67d2e 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationIntegrationTest.java @@ -16,7 +16,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testNoAction() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("4cc077eb3d343e6b7ba12bff86ebe347")); + Arrays.asList("8a105fa5eebdfffe7326bc5b3d8ffd1c")); executeTest("test no action", spec); } @@ -24,7 +24,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testClusteredSnps() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -window 10 -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("ada5540bb3d9b6eb8f1337ba01e90a94")); + Arrays.asList("27b13f179bb4920615dff3a32730d845")); executeTest("test clustered SNPs", spec); } @@ -32,17 +32,17 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testMasks() { WalkerTestSpec spec1 = new WalkerTestSpec( baseTestString() + " -mask foo -B:mask,VCF3 " + validationDataLocation + "vcfexample2.vcf -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("b0fcac4af3526e3b2a37602ab4c0e6ae")); + Arrays.asList("578f9e774784c25871678e6464fd212b")); executeTest("test mask all", spec1); WalkerTestSpec spec2 = new WalkerTestSpec( baseTestString() + " -mask foo -B:mask,VCF " + validationDataLocation + "vcfMask.vcf -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("b64baabe905a5d197cc1ab594147d3d5")); + Arrays.asList("bfa86a674aefca1b13d341cb14ab3c4f")); executeTest("test mask some", spec2); WalkerTestSpec spec3 = new WalkerTestSpec( baseTestString() + " -mask foo -maskExtend 10 -B:mask,VCF " + validationDataLocation + "vcfMask.vcf -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("0eff92fe72024d535c44b98e1e9e1993")); + Arrays.asList("5939f80d14b32d88587373532d7b90e5")); executeTest("test mask extend", spec3); } @@ -50,7 +50,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testFilter1() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -filter 'DoC < 20 || FisherStrand > 20.0' -filterName foo -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("7a40795147cbfa92941489d7239aad92")); + Arrays.asList("45219dbcfb6f81bba2ea0c35f5bfd368")); executeTest("test filter #1", spec); } @@ -58,7 +58,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testFilter2() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -filter 'AlleleBalance < 70.0 && FisherStrand == 1.4' -filterName bar -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("e9dd4991b1e325847c77d053dfe8ee54")); + Arrays.asList("c95845e817da7352b9b72bc9794f18fb")); executeTest("test filter #2", spec); } @@ -66,7 +66,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testFilterWithSeparateNames() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " --filterName ABF -filter 'AlleleBalance < 0.7' --filterName FSF -filter 'FisherStrand == 1.4' -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("9ded2cce63b8d97550079047051d80a3")); + Arrays.asList("b8cdd7f44ff1a395e0a9b06a87e1e530")); executeTest("test filter with separate names #2", spec); } @@ -74,12 +74,12 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testGenotypeFilters() { WalkerTestSpec spec1 = new WalkerTestSpec( baseTestString() + " -G_filter 'GQ == 0.60' -G_filterName foo -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("6696e3f65a62ce912230d47cdb0c129b")); + Arrays.asList("96b61e4543a73fe725e433f007260039")); executeTest("test genotype filter #1", spec1); WalkerTestSpec spec2 = new WalkerTestSpec( baseTestString() + " -G_filter 'AF == 0.04 && isHomVar == 1' -G_filterName foo -B:variant,VCF3 " + validationDataLocation + "vcfexample2.vcf -L 1:10,020,000-10,021,000", 1, - Arrays.asList("26e5b4ee954c9e0b5eb044afd4b88ee9")); + Arrays.asList("6c8112ab17ce39c8022c891ae73bf38e")); executeTest("test genotype filter #2", spec2); } @@ -87,7 +87,7 @@ public class VariantFiltrationIntegrationTest extends WalkerTest { public void testDeletions() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " --filterExpression 'QUAL < 100' --filterName foo -B:variant,VCF " + validationDataLocation + "twoDeletions.vcf", 1, - Arrays.asList("e63b58be33c9126ad6cc55489aac539b")); + Arrays.asList("569546fd798afa0e65c5b61b440d07ac")); executeTest("test deletions", spec); } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java index 20fa7719f..1f23d262e 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java @@ -28,7 +28,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testMultiSamplePilot1() { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -o %s -L 1:10,022,000-10,025,000", 1, - Arrays.asList("258e1954e6ae55c89abc6a716e19cbe0")); + Arrays.asList("c97829259463d04b0159591bb6fb44af")); executeTest("test MultiSample Pilot1", spec); } @@ -54,12 +54,12 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testWithAllelesPassedIn() { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommand + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, - Arrays.asList("edeb1db288a24baff59575ceedd94243")); + Arrays.asList("2b69667f4770e8c0c894066b7f27e440")); executeTest("test MultiSample Pilot2 with alleles passed in", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( baseCommand + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, - Arrays.asList("581990130d90071b084024f4cd7caf91")); + Arrays.asList("b77fe007c2a97fcd59dfd5eef94d8b95")); executeTest("test MultiSample Pilot2 with alleles passed in and emitting all sites", spec2); } @@ -67,7 +67,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testSingleSamplePilot2() { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,100,000", 1, - Arrays.asList("d120db27d694a6da32367cc4fb5770fa")); + Arrays.asList("ee8a5e63ddd470726a749e69c0c20f60")); executeTest("test SingleSample Pilot2", spec); } @@ -77,7 +77,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { // // -------------------------------------------------------------------------------------------------------------- - private final static String COMPRESSED_OUTPUT_MD5 = "75e5c430ed39f79f24e375037a388dc4"; + private final static String COMPRESSED_OUTPUT_MD5 = "ef31654a2b85b9b2d3bba4f4a75a17b6"; @Test public void testCompressedOutput() { @@ -107,7 +107,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { // Note that we need to turn off any randomization for this to work, so no downsampling and no annotations - String md5 = "a29615dd37222a11b8dadd341b53e43c"; + String md5 = "46868a9c4134651c54535fb46b408aee"; WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommand + " -dt NONE -G none -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,075,000", 1, @@ -138,9 +138,9 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testCallingParameters() { HashMap e = new HashMap(); - e.put( "--min_base_quality_score 26", "93e6269e38db9bc1732555e9969e3648" ); - e.put( "--min_mapping_quality_score 26", "64be99183c100caed4aa5f8bad64c7e9" ); - e.put( "--p_nonref_model GRID_SEARCH", "0592fe33f705ad8e2f13619fcf157805" ); + e.put( "--min_base_quality_score 26", "5043c9a101e691602eb7a3f9704bdf20" ); + e.put( "--min_mapping_quality_score 26", "71a833eb8fd93ee62ae0d5a430f27940" ); + e.put( "--p_nonref_model GRID_SEARCH", "ddf443e9dcadef367476b26b4d52c134" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -153,9 +153,9 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testOutputParameter() { HashMap e = new HashMap(); - e.put( "-sites_only", "1483e637dc0279935a7f90d136d147bb" ); - e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "adcd91bc7dae8020df8caf1a30060e98" ); - e.put( "--output_mode EMIT_ALL_SITES", "b708acc2fa40f336bcd2d0c70091e07e" ); + e.put( "-sites_only", "eaad6ceb71ab94290650a70bea5ab951" ); + e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "05bf7db8a3d19ef4a3d14772c90b732f" ); + e.put( "--output_mode EMIT_ALL_SITES", "e4b86740468d7369f0156550855586c7" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -169,12 +169,12 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testConfidence() { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_call_conf 10 ", 1, - Arrays.asList("64be99183c100caed4aa5f8bad64c7e9")); + Arrays.asList("71a833eb8fd93ee62ae0d5a430f27940")); executeTest("test confidence 1", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_emit_conf 10 ", 1, - Arrays.asList("e76ca54232d02f0d92730e1affeb804e")); + Arrays.asList("79968844dc3ddecb97748c1acf2984c7")); executeTest("test confidence 2", spec2); } @@ -186,8 +186,8 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testHeterozyosity() { HashMap e = new HashMap(); - e.put( 0.01, "18d37f7f107853b5e32c757b4e143205" ); - e.put( 1.0 / 1850, "2bcb90ce2f7542bf590f7612018fae8e" ); + e.put( 0.01, "4e878664f61d2d800146d3762303fde1" ); + e.put( 1.0 / 1850, "9204caec095ff5e63ca21a10b6fab453" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -211,7 +211,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,100,000", 1, - Arrays.asList("825f05b31b5bb7e82231a15c7e4e2b0d")); + Arrays.asList("1a58ec52df545f946f80cc16c5736a91")); executeTest(String.format("test multiple technologies"), spec); } @@ -230,7 +230,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -L 1:10,000,000-10,100,000" + " -baq CALCULATE_AS_NECESSARY", 1, - Arrays.asList("0919ab7e513c377610e23a67d33608fa")); + Arrays.asList("62d0f6d9de344ce68ce121c13b1e78b1")); executeTest(String.format("test calling with BAQ"), spec); } @@ -244,7 +244,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -L 1:10,000,000-10,100,000" + " -baq OFF", 1, - Arrays.asList("825f05b31b5bb7e82231a15c7e4e2b0d")); + Arrays.asList("1a58ec52df545f946f80cc16c5736a91")); executeTest(String.format("test calling with BAQ OFF"), spec); } @@ -263,7 +263,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,500,000", 1, - Arrays.asList("cb37348c41b8181be829912730f747e1")); + Arrays.asList("631ae1f1eb6bc4c1a4136b8495250536")); executeTest(String.format("test indel caller in SLX"), spec); } @@ -278,7 +278,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -minIndelCnt 1" + " -L 1:10,000,000-10,100,000", 1, - Arrays.asList("ca5b6a5fb53ae401b146cc3044f454f2")); + Arrays.asList("fd556585c79e2b892a5976668f45aa43")); executeTest(String.format("test indel caller in SLX witn low min allele count"), spec); } @@ -291,7 +291,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,500,000", 1, - Arrays.asList("ca4343a4ab6d3cce94ce61d7d1910f81")); + Arrays.asList("9cd56feedd2787919e571383889fde70")); executeTest(String.format("test indel calling, multiple technologies"), spec); } @@ -301,14 +301,14 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommandIndels + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("3f555b53e9dd14cf7cdf96c24e322364")); + Arrays.asList("315e1b78d7a403d7fcbcf0caa8c496b8")); executeTest("test MultiSample Pilot2 indels with alleles passed in", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( baseCommandIndels + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("1b9764b783acf7822edc58e6822eef5b")); + Arrays.asList("cf89e0c54f14482a23c105b73a333d8a")); executeTest("test MultiSample Pilot2 indels with alleles passed in and emitting all sites", spec2); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingIntegrationTest.java index 0ed16967a..1bf3e579f 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingIntegrationTest.java @@ -26,7 +26,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 20000, 10, 10) + " -L chr20:332341-382503", 1, - Arrays.asList("6020a68bbec97fcd87819c10cd4e2470")); + Arrays.asList("9568ba0b6624b97ac55a59bdee2d9150")); executeTest("MAX 10 het sites [TEST ONE]; require PQ >= 10", spec); } @@ -36,7 +36,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 20000, 10, 10) + " -L chr20:1232503-1332503", 1, - Arrays.asList("712c2145df4756c9a15758865d8007b5")); + Arrays.asList("ce65194c24fe83b0ec90faa6c8e6109a")); executeTest("MAX 10 het sites [TEST TWO]; require PQ >= 10", spec); } @@ -46,7 +46,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 20000, 2, 30) + " -L chr20:332341-382503", 1, - Arrays.asList("297e0896e4761529d979f40f5ad694db")); + Arrays.asList("02d134fd544613b1e5dd7f7197fc3753")); executeTest("MAX 2 het sites [TEST THREE]; require PQ >= 30", spec); } @@ -56,7 +56,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 20000, 5, 100) + " -L chr20:332341-382503", 1, - Arrays.asList("52a17f14692d726d3b726cf0ae7f2a09")); + Arrays.asList("2f7ec9904fc054c2ba1a7db05eb29334")); executeTest("MAX 5 het sites [TEST FOUR]; require PQ >= 100", spec); } @@ -66,7 +66,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 1000, 7, 10) + " -L chr20:332341-482503", 1, - Arrays.asList("af768f7958b8f4599c2374f1cc2fc613")); + Arrays.asList("da7a31725f229d1782dd3049848730aa")); executeTest("MAX 7 het sites [TEST FIVE]; require PQ >= 10; cacheWindow = 1000", spec); } @@ -76,7 +76,7 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "phasing_test_chr20_332341_1332503.vcf", 20000, 10, 10) + " -L chr20:652810-681757", 1, - Arrays.asList("3dd886672f59a47908b94136d0427bb0")); + Arrays.asList("e9d35cb88089fb0e8ae6678bfaeeac8c")); executeTest("MAX 10 het sites [TEST SIX]; require PQ >= 10; cacheWindow = 20000; has inconsistent sites", spec); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java index 9600046da..2fec2e70f 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java @@ -27,7 +27,7 @@ public class VariantRecalibrationWalkersIntegrationTest extends WalkerTest { VRTest lowPass = new VRTest("phase1.projectConsensus.chr20.raw.snps.vcf", "d33212a84368e821cbedecd4f59756d6", // tranches "4652dca41222bebdf9d9fda343b2a835", // recal file - "5350b1a4c1250cf3b77ca45327c04711"); // cut VCF + "243a397a33a935fcaccd5deb6d16f0c0"); // cut VCF @DataProvider(name = "VRTest") public Object[][] createData1() { diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java index 600718aa0..daaab9425 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java @@ -71,24 +71,24 @@ public class CombineVariantsIntegrationTest extends WalkerTest { } - @Test public void test1SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2117fff6e0d182cd20be508e9661829c", true); } - @Test public void test2SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "2cfaf7af3dd119df08b8a9c1f72e2f93", " -setKey foo", true); } - @Test public void test3SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "1474ac0fde2ce42a3c24f1c97eab333e", " -setKey null", true); } - @Test public void testOfficialCEUPilotCalls() { test1InOut("CEU.trio.2010_03.genotypes.vcf.gz", "7fc66df048a0ab08cf507906e1d4a308", false); } // official project VCF files in tabix format + @Test public void test1SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "c608b9fc1e36dba6cebb4f259883f9f0", true); } + @Test public void test2SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "20caad94411d6ab48153b214de916df8", " -setKey foo", true); } + @Test public void test3SNP() { test1InOut("pilot2.snps.vcf4.genotypes.vcf", "004f3065cb1bc2ce2f9afd695caf0b48", " -setKey null", true); } + @Test public void testOfficialCEUPilotCalls() { test1InOut("CEU.trio.2010_03.genotypes.vcf.gz", "c9c901ff9ef2a982624b203a8086dff0", false); } // official project VCF files in tabix format - @Test public void test1Indel1() { test1InOut("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "ec9715f53dbf4531570557c212822f12", false); } - @Test public void test1Indel2() { test1InOut("CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "f1072be5f5c6ee810276d9ca6537224d", false); } + @Test public void test1Indel1() { test1InOut("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "7593be578d4274d672fc22fced38012b", false); } + @Test public void test1Indel2() { test1InOut("CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "1cd467863c4e948fadd970681552d57e", false); } - @Test public void combineTrioCalls() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", "", "b77a1eec725201d9d8e74ee0c45638d3", false); } // official project VCF files in tabix format - @Test public void combineTrioCallsMin() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", " -minimalVCF", "802977fdfd2f4905b501bb06800f60af", false); } // official project VCF files in tabix format - @Test public void combine2Indels() { combine2("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "a67157287dd2b24b5cdf7ebf8fcbbe9a", false); } + @Test public void combineTrioCalls() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", "", "1d5a021387a8a86554db45a29f66140f", false); } // official project VCF files in tabix format + @Test public void combineTrioCallsMin() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "YRI.trio.2010_03.genotypes.vcf.gz", " -minimalVCF", "20163d60f18a46496f6da744ab5cc0f9", false); } // official project VCF files in tabix format + @Test public void combine2Indels() { combine2("CEU.dindel.vcf4.trio.2010_06.indel.genotypes.vcf", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "5b82f37df1f5ba40f0474d71c94142ec", false); } - @Test public void combineSNPsAndIndels() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "e1f4718a179f1196538a33863da04f53", false); } + @Test public void combineSNPsAndIndels() { combine2("CEU.trio.2010_03.genotypes.vcf.gz", "CEU.dindel.vcf4.low_coverage.2010_06.indel.genotypes.vcf", "", "c58dca482bf97069eac6d9f1a07a2cba", false); } - @Test public void uniqueSNPs() { combine2("pilot2.snps.vcf4.genotypes.vcf", "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf", "", "b3783384b7c8e877b971033e90beba48", true); } + @Test public void uniqueSNPs() { combine2("pilot2.snps.vcf4.genotypes.vcf", "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf", "", "89f55abea8f59e39d1effb908440548c", true); } - @Test public void omniHM3Union() { combineSites(" -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED", "902e541c87caa72134db6293fc46f0ad"); } - @Test public void omniHM3Intersect() { combineSites(" -filteredRecordsMergeType KEEP_IF_ALL_UNFILTERED", "f339ad4bb5863b58b9c919ce7d040bb9"); } + @Test public void omniHM3Union() { combineSites(" -filteredRecordsMergeType KEEP_IF_ANY_UNFILTERED", "4836086891f6cbdd40eebef3076d215a"); } + @Test public void omniHM3Intersect() { combineSites(" -filteredRecordsMergeType KEEP_IF_ALL_UNFILTERED", "6a34b5d743efda8b2f3b639f3a2f5de8"); } @Test public void threeWayWithRefs() { WalkerTestSpec spec = new WalkerTestSpec( @@ -101,7 +101,7 @@ public class CombineVariantsIntegrationTest extends WalkerTest { " -priority NA19240_BGI,NA19240_ILLUMINA,NA19240_WUGSC,denovoInfo" + " -genotypeMergeOptions UNIQUIFY -L 1"), 1, - Arrays.asList("a07995587b855f3214fb71940bf23c0f")); + Arrays.asList("8b78339ccf7a5a5a837f79e88a3a38e5")); executeTest("threeWayWithRefs", spec); } @@ -120,7 +120,7 @@ public class CombineVariantsIntegrationTest extends WalkerTest { } // @Test public void complexTestFull() { combineComplexSites("", "64b991fd3850f83614518f7d71f0532f"); } - @Test public void complexTestMinimal() { combineComplexSites(" -minimalVCF", "0db9ef50fe54b60426474273d7c7fa99"); } - @Test public void complexTestSitesOnly() { combineComplexSites(" -sites_only", "d20acb3d53ba0a02ce92d540ebeda2a9"); } - @Test public void complexTestSitesOnlyMinimal() { combineComplexSites(" -sites_only -minimalVCF", "8d1b3d120515f8b56b5a0d10bc5da713"); } + @Test public void complexTestMinimal() { combineComplexSites(" -minimalVCF", "df96cb3beb2dbb5e02f80abec7d3571e"); } + @Test public void complexTestSitesOnly() { combineComplexSites(" -sites_only", "f72a178137e25dbe0b931934cdc0079d"); } + @Test public void complexTestSitesOnlyMinimal() { combineComplexSites(" -sites_only -minimalVCF", "f704caeaaaed6711943014b847fe381a"); } } \ No newline at end of file diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariantsIntegrationTest.java index d32ab6282..82c894c6f 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariantsIntegrationTest.java @@ -40,7 +40,7 @@ public class LiftoverVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( "-T LiftoverVariants -o %s -R " + b36KGReference + " -B:variant,vcf3 " + validationDataLocation + "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.500.noheader.vcf -chain " + validationDataLocation + "b36ToHg19.broad.over.chain -dict /seq/references/Homo_sapiens_assembly19/v0/Homo_sapiens_assembly19.dict", 1, - Arrays.asList("37e23efd7d6471fc0f807b31ccafe0eb")); + Arrays.asList("70aeaca5b74cc7ba8e2da7b71ff0fbfd")); executeTest("test b36 to hg19", spec); } @@ -49,7 +49,7 @@ public class LiftoverVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( "-T LiftoverVariants -o %s -R " + b36KGReference + " -B:variant,vcf3 " + validationDataLocation + "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.500.noheader.unsortedSamples.vcf -chain " + validationDataLocation + "b36ToHg19.broad.over.chain -dict /seq/references/Homo_sapiens_assembly19/v0/Homo_sapiens_assembly19.dict", 1, - Arrays.asList("b6ef4a2f026fd3843aeb9ed764a66921")); + Arrays.asList("3fd7ec2dc4064ef410786276b0dc9d08")); executeTest("test b36 to hg19, unsorted samples", spec); } @@ -58,7 +58,7 @@ public class LiftoverVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( "-T LiftoverVariants -o %s -R " + hg18Reference + " -B:variant,vcf " + validationDataLocation + "liftover_test.vcf -chain " + validationDataLocation + "hg18ToHg19.broad.over.chain -dict /seq/references/Homo_sapiens_assembly19/v0/Homo_sapiens_assembly19.dict", 1, - Arrays.asList("3275373b3c44ad14a270b50664b3f8a3")); + Arrays.asList("ab2c6254225d7e2ecf52eee604d5673b")); executeTest("test hg18 to hg19, unsorted", spec); } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java index e18287a21..b5f41542e 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java @@ -18,7 +18,7 @@ public class SelectVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( baseTestString(" -sn A -se '[CDH]' -sf " + samplesFile + " -env -ef -select 'DP < 250' -B:variant,VCF3 " + testfile + " -NO_HEADER"), 1, - Arrays.asList("1b9d551298dc048c7d36b60440ff4d50") + Arrays.asList("d18516c1963802e92cb9e425c0b75fd6") ); executeTest("testComplexSelection--" + testfile, spec); @@ -31,7 +31,7 @@ public class SelectVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( baseTestString(" -sn A -sn B -sn C -B:variant,VCF3 " + testfile + " -NO_HEADER"), 1, - Arrays.asList("5ba7536a0819421b330350a160e4261a") + Arrays.asList("b74038779fe6485dbb8734ae48178356") ); executeTest("testRepeatedLineSelection--" + testfile, spec); @@ -44,7 +44,7 @@ public class SelectVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( "-T SelectVariants -R " + hg19Reference + " -sn NA12878 -disc myvar -L 20:1012700-1020000 -B:variant,VCF " + b37hapmapGenotypes + " -B:myvar,VCF " + testFile + " -o %s -NO_HEADER", 1, - Arrays.asList("97621ae8f29955eedfc4e0be3515fcb9") + Arrays.asList("78e6842325f1f1bc9ab30d5e7737ee6e") ); executeTest("testDiscordance--" + testFile, spec); @@ -57,7 +57,7 @@ public class SelectVariantsIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( "-T SelectVariants -R " + hg19Reference + " -sn NA12878 -conc hapmap -L 20:1012700-1020000 -B:hapmap,VCF " + b37hapmapGenotypes + " -B:variant,VCF " + testFile + " -o %s -NO_HEADER", 1, - Arrays.asList("a0ae016fdffcbe7bfb99fd3dbc311407") + Arrays.asList("d2ba3ea30a810f6f0fbfb1b643292b6a") ); executeTest("testConcordance--" + testFile, spec); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java index cf0673ee6..d7efe4212 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java @@ -60,7 +60,7 @@ public class VCFStreamingIntegrationTest extends WalkerTest { " --NO_HEADER" + " -o %s", 1, - Arrays.asList("debbbf3e661b6857cc8d99ff7635bb1d") + Arrays.asList("658f580f7a294fd334bd897102616fed") ); executeTest("testSimpleVCFStreaming", spec); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java index 64d0db14b..8421076c9 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java @@ -20,7 +20,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testVariantsToVCFUsingGeliInput() { List md5 = new ArrayList(); - md5.add("bd15d98adc76b5798e3bbeff3f936feb"); + md5.add("815b82fff92aab41c209eedce2d7e7d9"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -38,7 +38,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingGeliInput() { List md5 = new ArrayList(); - md5.add("acd15d3f85bff5b545bc353e0e23cc6e"); + md5.add("22336ee9c12aa222ce29c3c5babca7d0"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -56,7 +56,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingHapMapInput() { List md5 = new ArrayList(); - md5.add("6f34528569f8cf5941cb365fa77288c1"); + md5.add("9bedaa7670b86a07be5191898c3727cf"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -73,7 +73,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingVCFInput() { List md5 = new ArrayList(); - md5.add("d8316fc1b9d8e954a58940354119a32e"); + md5.add("cc215edec9ca28e5c79ab1b67506f9f7"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + diff --git a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextIntegrationTest.java b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextIntegrationTest.java index 5d42f8d0c..a344817a0 100755 --- a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextIntegrationTest.java @@ -49,7 +49,7 @@ public class VariantContextIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( cmdRoot + " -NO_HEADER -B:vcf,VCF3 " + validationDataLocation + "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.500.vcf -L 1:1-1000000 -o %s --outputVCF %s", 2, // just one output file - Arrays.asList("e3c35d0c4b5d4935c84a270f9df0951f", "e6673737acbb6bfabfcd92c4b2268241")); + Arrays.asList("e3c35d0c4b5d4935c84a270f9df0951f", "ff91731213fd0bbdc200ab6fd1c93e63")); executeTest("testToVCF", spec); } From ccedd6ff4c942c20c1a57f6a6bf65c5cb63b6e16 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Tue, 12 Jul 2011 15:20:28 -0400 Subject: [PATCH 091/161] Difference is now the general form -- used to be SummarizedDifference. The old Difference class is now a subclass of Difference that includes pointers to specific the master and test DiffElements. Added a size() function that calculates the number of elements tree from a DiffElement. --- .../gatk/walkers/diffengine/DiffElement.java | 4 + .../gatk/walkers/diffengine/DiffEngine.java | 142 +++++------------- .../gatk/walkers/diffengine/DiffNode.java | 7 + .../walkers/diffengine/DiffObjectsWalker.java | 7 +- .../gatk/walkers/diffengine/DiffValue.java | 1 + .../gatk/walkers/diffengine/Difference.java | 83 +++++++--- .../diffengine/SpecificDifference.java | 59 ++++++++ .../diffengine/DiffEngineUnitTest.java | 6 +- .../diffengine/DifferenceUnitTest.java | 2 +- 9 files changed, 176 insertions(+), 135 deletions(-) create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/SpecificDifference.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java index eff24bb88..4c3f7bd95 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java @@ -115,4 +115,8 @@ public class DiffElement { else throw new ReviewedStingException("Illegal request conversion of a DiffValue into a DiffNode: " + this); } + + public int size() { + return 1 + getValue().size(); + } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java index 54a7a464d..6d85df71d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java @@ -24,11 +24,9 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -import com.google.java.contract.Requires; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.report.GATKReport; import org.broadinstitute.sting.gatk.report.GATKReportTable; -import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; @@ -60,7 +58,7 @@ public class DiffEngine { // // -------------------------------------------------------------------------------- - public List diff(DiffElement master, DiffElement test) { + public List diff(DiffElement master, DiffElement test) { DiffValue masterValue = master.getValue(); DiffValue testValue = test.getValue(); @@ -70,14 +68,14 @@ public class DiffEngine { return diff(masterValue, testValue); } else { // structural difference in types. one is node, other is leaf - return Arrays.asList(new Difference(master, test)); + return Arrays.asList(new SpecificDifference(master, test)); } } - public List diff(DiffNode master, DiffNode test) { + public List diff(DiffNode master, DiffNode test) { Set allNames = new HashSet(master.getElementNames()); allNames.addAll(test.getElementNames()); - List diffs = new ArrayList(); + List diffs = new ArrayList(); for ( String name : allNames ) { DiffElement masterElt = master.getElement(name); @@ -86,7 +84,7 @@ public class DiffEngine { throw new ReviewedStingException("BUG: unexceptedly got two null elements for field: " + name); } else if ( masterElt == null || testElt == null ) { // if either is null, we are missing a value // todo -- should one of these be a special MISSING item? - diffs.add(new Difference(masterElt, testElt)); + diffs.add(new SpecificDifference(masterElt, testElt)); } else { diffs.addAll(diff(masterElt, testElt)); } @@ -95,11 +93,11 @@ public class DiffEngine { return diffs; } - public List diff(DiffValue master, DiffValue test) { + public List diff(DiffValue master, DiffValue test) { if ( master.getValue().equals(test.getValue()) ) { return Collections.emptyList(); } else { - return Arrays.asList(new Difference(master.getBinding(), test.getBinding())); + return Arrays.asList(new SpecificDifference(master.getBinding(), test.getBinding())); } } @@ -147,64 +145,68 @@ public class DiffEngine { * @param params determines how we display the items * @param diffs */ - public void reportSummarizedDifferences(List diffs, SummaryReportParams params ) { + public void reportSummarizedDifferences(List diffs, SummaryReportParams params ) { printSummaryReport(summarizeDifferences(diffs), params ); } - public List summarizeDifferences(List diffs) { - List diffPaths = new ArrayList(diffs.size()); - - for ( Difference diff1 : diffs ) { - diffPaths.add(diffNameToPath(diff1.getFullyQualifiedName())); - } - - return summarizedDifferencesOfPaths(diffPaths); + public List summarizeDifferences(List diffs) { + return summarizedDifferencesOfPaths(diffs); } final protected static String[] diffNameToPath(String diffName) { return diffName.split("\\."); } - protected List summarizedDifferencesOfPaths(List diffPaths) { - Map summaries = new HashMap(); + protected List summarizedDifferencesOfPathsFromString(List singletonDiffs) { + List diffs = new ArrayList(); + + for ( String diff : singletonDiffs ) { + diffs.add(new Difference(diff)); + } + + return summarizedDifferencesOfPaths(diffs); + } + + protected List summarizedDifferencesOfPaths(List singletonDiffs) { + Map summaries = new HashMap(); // create the initial set of differences - for ( int i = 0; i < diffPaths.size(); i++ ) { + for ( int i = 0; i < singletonDiffs.size(); i++ ) { for ( int j = 0; j <= i; j++ ) { - String[] diffPath1 = diffPaths.get(i); - String[] diffPath2 = diffPaths.get(j); - if ( diffPath1.length == diffPath2.length ) { - int lcp = longestCommonPostfix(diffPath1, diffPath2); - String path = lcp > 0 ? summarizedPath(diffPath2, lcp) : Utils.join(".", diffPath2); + Difference diffPath1 = singletonDiffs.get(i); + Difference diffPath2 = singletonDiffs.get(j); + if ( diffPath1.length() == diffPath2.length() ) { + int lcp = longestCommonPostfix(diffPath1.getParts(), diffPath2.getParts()); + String path = lcp > 0 ? summarizedPath(diffPath2.getParts(), lcp) : diffPath2.getPath(); addSummary(summaries, path, true); } } } // count differences - for ( String[] diffPath : diffPaths ) { - for ( SummarizedDifference sumDiff : summaries.values() ) { - if ( sumDiff.matches(diffPath) ) + for ( Difference diffPath : singletonDiffs ) { + for ( Difference sumDiff : summaries.values() ) { + if ( sumDiff.matches(diffPath.getParts()) ) addSummary(summaries, sumDiff.getPath(), false); } } - List sortedSummaries = new ArrayList(summaries.values()); + List sortedSummaries = new ArrayList(summaries.values()); Collections.sort(sortedSummaries); return sortedSummaries; } - private static void addSummary(Map summaries, String path, boolean onlyCatalog) { + private static void addSummary(Map summaries, String path, boolean onlyCatalog) { if ( summaries.containsKey(path) ) { if ( ! onlyCatalog ) summaries.get(path).incCount(); } else { - SummarizedDifference sumDiff = new SummarizedDifference(path); + Difference sumDiff = new Difference(path); summaries.put(sumDiff.getPath(), sumDiff); } } - protected void printSummaryReport(List sortedSummaries, SummaryReportParams params ) { + protected void printSummaryReport(List sortedSummaries, SummaryReportParams params ) { GATKReport report = new GATKReport(); final String tableName = "diffences"; report.addTable(tableName, "Summarized differences between the master and test files.\nSee http://www.broadinstitute.org/gsa/wiki/index.php/DiffObjectsWalker_and_SummarizedDifferences for more information"); @@ -213,7 +215,7 @@ public class DiffEngine { table.addColumn("NumberOfOccurrences", 0); int count = 0, count1 = 0; - for ( SummarizedDifference diff : sortedSummaries ) { + for ( Difference diff : sortedSummaries ) { if ( diff.getCount() < params.minSumDiffToShow ) // in order, so break as soon as the count is too low break; @@ -261,76 +263,6 @@ public class DiffEngine { return Utils.join(".", parts); } - /** - * TODO -- all of the algorithms above should use SummarizedDifference instead - * TODO -- of some SummarizedDifferences and some low-level String[] - */ - public static class SummarizedDifference implements Comparable { - final String path; // X.Y.Z - final String[] parts; - int count = 0; - - public SummarizedDifference(String path) { - this.path = path; - this.parts = diffNameToPath(path); - } - - public void incCount() { count++; } - - public int getCount() { - return count; - } - - /** - * The fully qualified path object A.B.C etc - * @return - */ - public String getPath() { - return path; - } - - /** - * @return the length of the parts of this summary - */ - public int length() { - return this.parts.length; - } - - /** - * Returns true if the string parts matches this summary. Matches are - * must be equal() everywhere where this summary isn't *. - * @param otherParts - * @return - */ - public boolean matches(String[] otherParts) { - if ( otherParts.length != length() ) - return false; - - // TODO optimization: can start at right most non-star element - for ( int i = 0; i < length(); i++ ) { - String part = parts[i]; - if ( ! part.equals("*") && ! part.equals(otherParts[i]) ) - return false; - } - - return true; - } - - @Override - public String toString() { - return String.format("%s:%d", getPath(), getCount()); - } - - @Override - public int compareTo(SummarizedDifference other) { - // sort first highest to lowest count, then by lowest to highest path - int countCmp = Integer.valueOf(count).compareTo(other.count); - return countCmp != 0 ? -1 * countCmp : path.compareTo(other.path); - } - - - } - // -------------------------------------------------------------------------------- // // plugin manager @@ -404,7 +336,7 @@ public class DiffEngine { if ( diffEngine.canRead(masterFile) && diffEngine.canRead(testFile) ) { DiffElement master = diffEngine.createDiffableFromFile(masterFile); DiffElement test = diffEngine.createDiffableFromFile(testFile); - List diffs = diffEngine.diff(master, test); + List diffs = diffEngine.diff(master, test); diffEngine.reportSummarizedDifferences(diffs, params); return true; } else { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java index 3e1be8609..2f48de2d3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffNode.java @@ -153,6 +153,13 @@ public class DiffNode extends DiffValue { add(new DiffElement(name, this.getBinding(), new DiffValue(value))); } + public int size() { + int count = 0; + for ( DiffElement value : getElements() ) + count += value.size(); + return count; + } + // --------------------------------------------------------------------------- // // toString diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java index fe411b195..ecb836af9 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffObjectsWalker.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -import org.apache.xmlbeans.impl.tool.Diff; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -95,18 +94,20 @@ public class DiffObjectsWalker extends RodWalker { public void onTraversalDone(Integer sum) { out.printf("Reading master file %s%n", masterFile); DiffElement master = diffEngine.createDiffableFromFile(masterFile, MAX_OBJECTS_TO_READ); + out.printf(" Read %d objects%n", master.size()); out.printf("Reading test file %s%n", testFile); DiffElement test = diffEngine.createDiffableFromFile(testFile, MAX_OBJECTS_TO_READ); + out.printf(" Read %d objects%n", test.size()); // out.printf("Master diff objects%n"); // out.println(master.toString()); // out.printf("Test diff objects%n"); // out.println(test.toString()); - List diffs = diffEngine.diff(master, test); + List diffs = diffEngine.diff(master, test); if ( showItemizedDifferences ) { out.printf("Itemized results%n"); - for ( Difference diff : diffs ) + for ( SpecificDifference diff : diffs ) out.printf("DIFF: %s%n", diff.toString()); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java index 7245e9e8d..3750496a1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java @@ -87,4 +87,5 @@ public class DiffValue { public boolean isAtomic() { return true; } public boolean isCompound() { return ! isAtomic(); } + public int size() { return 1; } } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java index 6627a4cc5..efc6ef160 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/Difference.java @@ -24,35 +24,72 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -/** - * Created by IntelliJ IDEA. - * User: depristo - * Date: 7/4/11 - * Time: 12:53 PM - * - * Represents a specific difference between two specific DiffElements - */ -public class Difference { - DiffElement master, test; +public class Difference implements Comparable { + final String path; // X.Y.Z + final String[] parts; + int count = 0; - public Difference(DiffElement master, DiffElement test) { - if ( master == null && test == null ) throw new IllegalArgumentException("Master and test both cannot be null"); - this.master = master; - this.test = test; + public Difference(String path) { + this.path = path; + this.parts = DiffEngine.diffNameToPath(path); } + public String[] getParts() { + return parts; + } + + public void incCount() { count++; } + + public int getCount() { + return count; + } + + /** + * The fully qualified path object A.B.C etc + * @return + */ + public String getPath() { + return path; + } + + /** + * @return the length of the parts of this summary + */ + public int length() { + return this.parts.length; + } + + /** + * Returns true if the string parts matches this summary. Matches are + * must be equal() everywhere where this summary isn't *. + * @param otherParts + * @return + */ + public boolean matches(String[] otherParts) { + if ( otherParts.length != length() ) + return false; + + // TODO optimization: can start at right most non-star element + for ( int i = 0; i < length(); i++ ) { + String part = parts[i]; + if ( ! part.equals("*") && ! part.equals(otherParts[i]) ) + return false; + } + + return true; + } + + @Override public String toString() { - return String.format("%s:%s!=%s", - getFullyQualifiedName(), - getOneLineString(master), - getOneLineString(test)); + return String.format("%s:%d", getPath(), getCount()); } - public String getFullyQualifiedName() { - return (master == null ? test : master).fullyQualifiedName(); + @Override + public int compareTo(Difference other) { + // sort first highest to lowest count, then by lowest to highest path + int countCmp = Integer.valueOf(count).compareTo(other.count); + return countCmp != 0 ? -1 * countCmp : path.compareTo(other.path); } - private static String getOneLineString(DiffElement elt) { - return elt == null ? "MISSING" : elt.getValue().toOneLineString(); - } + } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/SpecificDifference.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/SpecificDifference.java new file mode 100644 index 000000000..2fe9b47f8 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/SpecificDifference.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.walkers.diffengine; + +/** + * Created by IntelliJ IDEA. + * User: depristo + * Date: 7/4/11 + * Time: 12:53 PM + * + * Represents a specific difference between two specific DiffElements + */ +public class SpecificDifference extends Difference { + DiffElement master, test; + + public SpecificDifference(DiffElement master, DiffElement test) { + super(createName(master, test)); + if ( master == null && test == null ) throw new IllegalArgumentException("Master and test both cannot be null"); + this.master = master; + this.test = test; + } + + public String toString() { + return String.format("%s:%s!=%s", + getPath(), + getOneLineString(master), + getOneLineString(test)); + } + + private static String createName(DiffElement master, DiffElement test) { + return (master == null ? test : master).fullyQualifiedName(); + } + + private static String getOneLineString(DiffElement elt) { + return elt == null ? "MISSING" : elt.getValue().toOneLineString(); + } +} diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java index cd6c3598a..96dfec6e8 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngineUnitTest.java @@ -99,7 +99,7 @@ public class DiffEngineUnitTest extends BaseTest { logger.warn("Test tree1: " + test.tree1.toOneLineString()); logger.warn("Test tree2: " + test.tree2.toOneLineString()); - List diffs = engine.diff(test.tree1, test.tree2); + List diffs = engine.diff(test.tree1, test.tree2); logger.warn("Test expected diff : " + test.differences); logger.warn("Observed diffs : " + diffs); } @@ -185,12 +185,12 @@ public class DiffEngineUnitTest extends BaseTest { List diffPaths = new ArrayList(diffs.size()); for ( String diff : diffs ) { diffPaths.add(DiffEngine.diffNameToPath(diff)); } - List sumDiffs = engine.summarizedDifferencesOfPaths(diffPaths); + List sumDiffs = engine.summarizedDifferencesOfPathsFromString(diffs); Assert.assertEquals(sumDiffs.size(), expecteds.size(), "Unexpected number of summarized differences: " + sumDiffs); for ( int i = 0; i < sumDiffs.size(); i++ ) { - DiffEngine.SummarizedDifference sumDiff = sumDiffs.get(i); + Difference sumDiff = sumDiffs.get(i); String expected = expecteds.get(i); String[] pathCount = expected.split(":"); String path = pathCount[0]; diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java index da272ec30..64579a01b 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DifferenceUnitTest.java @@ -87,7 +87,7 @@ public class DifferenceUnitTest extends BaseTest { logger.warn("Test tree1: " + (test.tree1 == null ? "null" : test.tree1.toOneLineString())); logger.warn("Test tree2: " + (test.tree2 == null ? "null" : test.tree2.toOneLineString())); logger.warn("Test expected diff : " + test.difference); - Difference diff = new Difference(test.tree1, test.tree2); + SpecificDifference diff = new SpecificDifference(test.tree1, test.tree2); logger.warn("Observed diffs : " + diff); Assert.assertEquals(diff.toString(), test.difference, "Observed diff string " + diff + " not equal to expected difference string " + test.difference ); From 5077c94d85929bad35fcc00bbeab0b8036aabe4a Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Tue, 12 Jul 2011 15:39:07 -0400 Subject: [PATCH 093/161] Adding MappingQualityUnavailableReadFilter to the SNP and indel CountCovariates --- .../recalibration/CountCovariatesWalker.java | 3 +- .../RecalibrationWalkersIntegrationTest.java | 91 +++---------------- 2 files changed, 15 insertions(+), 79 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java index 6673bec92..c21f548b3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java @@ -27,6 +27,7 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; import org.broad.tribble.bed.BEDCodec; import org.broad.tribble.dbsnp.DbSNPCodec; +import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; import org.broadinstitute.sting.utils.codecs.vcf.VCF3Codec; import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; import org.broadinstitute.sting.commandline.Gather; @@ -75,7 +76,7 @@ import java.util.Map; @BAQMode(ApplicationTime = BAQ.ApplicationTime.FORBIDDEN) @By( DataSource.READS ) // Only look at covered loci, not every loci of the reference file -@ReadFilters( {MappingQualityZeroReadFilter.class} ) // Filter out all reads with zero mapping quality +@ReadFilters( {MappingQualityZeroReadFilter.class, MappingQualityUnavailableReadFilter.class} ) // Filter out all reads with zero or unavailable mapping quality @Requires( {DataSource.READS, DataSource.REFERENCE, DataSource.REFERENCE_BASES} ) // This walker requires both -I input.bam and -R reference.fasta @PartitionBy(PartitionType.LOCUS) public class CountCovariatesWalker extends LocusWalker implements TreeReducible { diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java index b0f76229b..129161da3 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java @@ -19,9 +19,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { public void testCountCovariates1() { HashMap e = new HashMap(); e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "7b5832d4b2a23b8ef2bb639eb59bfa88" ); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "f4f8a49bb5764d2a8f61e055f64dcce4"); + e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "9c006f8e9fb5752b1c139f5a8cc7ea88"); e.put( validationDataLocation + "NA12873.454.SRP000031.2009_06.chr1.10_20mb.bam", "e6f7b4ab9aa291022e0ba8b7dbe4c77e" ); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam", "570506533f079d738d70934dfe1c02cd" ); + e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam", "e6b98af01c5a08e4954b79ec42db6fc3" ); for ( String parallelism : Arrays.asList("", " -nt 4")) { for ( Map.Entry entry : e.entrySet() ) { @@ -53,9 +53,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { public void testTableRecalibrator1() { HashMap e = new HashMap(); e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "0278cce4cfdab869dc0c11d6852a984b" ); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "344d4252143df8c2cce6b568747553a5"); + e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "6797d7ffa4ef6c48413719ba32696ccf"); e.put( validationDataLocation + "NA12873.454.SRP000031.2009_06.chr1.10_20mb.bam", "2bb3374dde131791d7638031ae3b3e10" ); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam", "064c4a7bdd23974c3a9c5f924540df76" ); + e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam", "1f9d8944b73169b367cb83b0d22e5432" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -107,7 +107,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { @Test public void testTableRecalibratorMaxQ70() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "344d4252143df8c2cce6b568747553a5" ); + e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "0278cce4cfdab869dc0c11d6852a984b" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -133,12 +133,10 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - - @Test public void testCountCovariatesSolidIndelsRemoveRefBias() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "0a6cdb9611e5880ea6611205080aa267" ); + e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "c9ea5f995e1e2b7a5688533e678dcedc" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -164,7 +162,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { @Test public void testTableRecalibratorSolidIndelsRemoveRefBias() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "9bc7e1ad223ba759fe5e8ddb4c07369c" ); + e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "993fae4270e7e1e15986f270acf247af" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -189,13 +187,10 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - - - @Test public void testCountCovariatesVCF() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "3700eaf567e4937f442fc777a226d6ad"); + e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "170f0c3cc4b8d72c539136effeec9a16"); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -219,7 +214,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { @Test public void testCountCovariatesBED() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "6803891a3398821fc8a37e19ea8e5a00"); + e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "b460478d9683e827784e42bc352db8bb"); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -243,7 +238,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { @Test public void testCountCovariatesVCFPlusDBsnp() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", "f224c42fbc4026db973ccc91265ab5c7"); + e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "a3d892bd60d8f679affda3c1e3af96c1"); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -268,69 +263,10 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - @Test - public void testCountCovariatesNoReadGroups() { - HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12762.SOLID.SRP000031.2009_07.chr1.10_20mb.bam", "c024e03f019aeceaf364fa58c8295ad8" ); - - for ( Map.Entry entry : e.entrySet() ) { - String bam = entry.getKey(); - String md5 = entry.getValue(); - - WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( - "-R " + b36KGReference + - " --DBSNP " + GATKDataLocation + "dbsnp_129_b36.rod" + - " -T CountCovariates" + - " -I " + bam + - " -L 1:10,000,000-10,200,000" + - " -cov ReadGroupCovariate" + - " -cov QualityScoreCovariate" + - " -cov CycleCovariate" + - " -cov DinucCovariate" + - " --default_read_group DefaultReadGroup" + - " --default_platform illumina" + - " --solid_recal_mode SET_Q_ZERO" + - " -recalFile %s", - 1, // just one output file - Arrays.asList(md5)); - List result = executeTest("testCountCovariatesNoReadGroups", spec).getFirst(); - paramsFilesNoReadGroupTest.put(bam, result.get(0).getAbsolutePath()); - } - } - - @Test - public void testTableRecalibratorNoReadGroups() { - HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12762.SOLID.SRP000031.2009_07.chr1.10_20mb.bam", "1eefbe7ac0376fc1ed1392d85242171e" ); - - for ( Map.Entry entry : e.entrySet() ) { - String bam = entry.getKey(); - String md5 = entry.getValue(); - String paramsFile = paramsFilesNoReadGroupTest.get(bam); - System.out.printf("PARAMS FOR %s is %s%n", bam, paramsFile); - if ( paramsFile != null ) { - WalkerTestSpec spec = new WalkerTestSpec( - "-R " + b36KGReference + - " -T TableRecalibration" + - " -I " + bam + - " -L 1:10,100,000-10,300,000" + - " -o %s" + - " --no_pg_tag" + - " --solid_recal_mode SET_Q_ZERO" + - " --default_read_group DefaultReadGroup" + - " --default_platform illumina" + - " -recalFile " + paramsFile, - 1, // just one output file - Arrays.asList(md5)); - executeTest("testTableRecalibratorNoReadGroups", spec); - } - } - } - @Test public void testCountCovariatesNoIndex() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.noindex.bam", "cfc31bb6f51436d1c3b34f62bb801dc8" ); + e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.noindex.bam", "284ccac1f8fe485e52c86333cac7c2d4" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -356,7 +292,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { @Test public void testTableRecalibratorNoIndex() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.noindex.bam", "83b848a16034c2fb423d1bb0f5be7784" ); + e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.noindex.bam", "c167799c2d9cab815d7c9b23337f162e" ); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); @@ -380,11 +316,10 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - @Test public void testCountCovariatesFailWithoutDBSNP() { HashMap e = new HashMap(); - e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SOLID.bam", ""); + e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", ""); for ( Map.Entry entry : e.entrySet() ) { String bam = entry.getKey(); From 6007eea3ffba2e459ec6bf0a1c66c0a017fe0a62 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Wed, 13 Jul 2011 09:56:08 -0400 Subject: [PATCH 099/161] Allowing VCF records without GTs in vf4.1 --- .../utils/codecs/vcf/StandardVCFWriter.java | 41 +++++++++++++------ .../sting/utils/codecs/vcf/VCF3Codec.java | 13 +++--- .../sting/utils/codecs/vcf/VCFCodec.java | 28 ++++++------- .../sting/utils/variantcontext/Genotype.java | 35 +++++++++++++--- .../utils/variantcontext/VariantContext.java | 8 ++-- 5 files changed, 83 insertions(+), 42 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index a8bf74707..f7d09f16d 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -32,6 +32,7 @@ import org.broad.tribble.index.IndexFactory; import org.broad.tribble.util.LittleEndianOutputStream; import org.broad.tribble.util.ParsingUtils; import org.broad.tribble.util.PositionalStream; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; @@ -300,10 +301,7 @@ public class StandardVCFWriter implements VCFWriter { } else { List genotypeAttributeKeys = new ArrayList(); if ( vc.hasGenotypes() ) { - genotypeAttributeKeys.add(VCFConstants.GENOTYPE_KEY); - for ( String key : calcVCFGenotypeKeys(vc) ) { - genotypeAttributeKeys.add(key); - } + genotypeAttributeKeys.addAll(calcVCFGenotypeKeys(vc)); } else if ( mHeader.hasGenotypingData() ) { // this needs to be done in case all samples are no-calls genotypeAttributeKeys.add(VCFConstants.GENOTYPE_KEY); @@ -387,16 +385,22 @@ public class StandardVCFWriter implements VCFWriter { continue; } - writeAllele(g.getAllele(0), alleleMap); - for (int i = 1; i < g.getPloidy(); i++) { - mWriter.write(g.isPhased() ? VCFConstants.PHASED : VCFConstants.UNPHASED); - writeAllele(g.getAllele(i), alleleMap); - } - List attrs = new ArrayList(genotypeFormatKeys.size()); for ( String key : genotypeFormatKeys ) { - if ( key.equals(VCFConstants.GENOTYPE_KEY) ) + + if ( key.equals(VCFConstants.GENOTYPE_KEY) ) { + if ( !g.isAvailable() ) { + throw new ReviewedStingException("GTs cannot be missing for some samples if they are available for others in the record"); + } + + writeAllele(g.getAllele(0), alleleMap); + for (int i = 1; i < g.getPloidy(); i++) { + mWriter.write(g.isPhased() ? VCFConstants.PHASED : VCFConstants.UNPHASED); + writeAllele(g.getAllele(i), alleleMap); + } + continue; + } Object val = g.hasAttribute(key) ? g.getAttribute(key) : VCFConstants.MISSING_VALUE_v4; @@ -488,10 +492,13 @@ public class StandardVCFWriter implements VCFWriter { private static List calcVCFGenotypeKeys(VariantContext vc) { Set keys = new HashSet(); + boolean sawGoodGT = false; boolean sawGoodQual = false; boolean sawGenotypeFilter = false; for ( Genotype g : vc.getGenotypes().values() ) { keys.addAll(g.getAttributes().keySet()); + if ( g.isAvailable() ) + sawGoodGT = true; if ( g.hasNegLog10PError() ) sawGoodQual = true; if (g.isFiltered() && g.isCalled()) @@ -504,7 +511,17 @@ public class StandardVCFWriter implements VCFWriter { if (sawGenotypeFilter) keys.add(VCFConstants.GENOTYPE_FILTER_KEY); - return ParsingUtils.sortList(new ArrayList(keys)); + List sortedList = ParsingUtils.sortList(new ArrayList(keys)); + + // make sure the GT is first + if ( sawGoodGT ) { + List newList = new ArrayList(sortedList.size()+1); + newList.add(VCFConstants.GENOTYPE_KEY); + newList.addAll(sortedList); + sortedList = newList; + } + + return sortedList; } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCF3Codec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCF3Codec.java index f3c99e963..c29f2ba8b 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCF3Codec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCF3Codec.java @@ -141,8 +141,6 @@ public class VCF3Codec extends AbstractVCFCodec { boolean missing = i >= GTValueSplitSize; if (gtKey.equals(VCFConstants.GENOTYPE_KEY)) { - if (i != 0) - generateException("Saw GT at position " + i + ", but it must be at the first position for genotypes"); genotypeAlleleLocation = i; } else if (gtKey.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) { GTQual = missing ? parseQual(VCFConstants.MISSING_VALUE_v4) : parseQual(GTValueArray[i]); @@ -156,12 +154,13 @@ public class VCF3Codec extends AbstractVCFCodec { } } - // check to make sure we found a gentoype field - if (genotypeAlleleLocation < 0) generateException("Unable to find required field GT for the record; we don't yet support a missing GT field"); + // check to make sure we found a genotype field + if ( genotypeAlleleLocation < 0 ) + generateException("Unable to find the GT field for the record; the GT field is required"); + if ( genotypeAlleleLocation > 0 ) + generateException("Saw GT field at position " + genotypeAlleleLocation + ", but it must be at the first position for genotypes"); - // todo -- assuming allele list length in the single digits is bad. Fix me. - // Check for > 1 for haploid genotypes - boolean phased = GTValueArray[genotypeAlleleLocation].length() > 1 && GTValueArray[genotypeAlleleLocation].charAt(1) == '|'; + boolean phased = GTValueArray[genotypeAlleleLocation].indexOf(VCFConstants.PHASED) != -1; // add it to the list try { diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCodec.java index 0fb2940bb..05fff5d9e 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFCodec.java @@ -145,8 +145,6 @@ public class VCFCodec extends AbstractVCFCodec { // todo -- all of these on the fly parsing of the missing value should be static constants if (gtKey.equals(VCFConstants.GENOTYPE_KEY)) { - if (i != 0) - generateException("Saw GT at position " + i + ", but it must be at the first position for genotypes"); genotypeAlleleLocation = i; } else if (gtKey.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) { GTQual = missing ? parseQual(VCFConstants.MISSING_VALUE_v4) : parseQual(GTValueArray[i]); @@ -160,22 +158,24 @@ public class VCFCodec extends AbstractVCFCodec { } } - // check to make sure we found a gentoype field - // TODO -- This is no longer required in v4.1 - if (genotypeAlleleLocation < 0) generateException("Unable to find required field GT for the record; we don't yet support a missing GT field"); + // check to make sure we found a genotype field if we are a VCF4.0 file + if ( version == VCFHeaderVersion.VCF4_0 && genotypeAlleleLocation == -1 ) + generateException("Unable to find the GT field for the record; the GT field is required in VCF4.0"); + if ( genotypeAlleleLocation > 0 ) + generateException("Saw GT field at position " + genotypeAlleleLocation + ", but it must be at the first position for genotypes when present"); - // todo -- assuming allele list length in the single digits is bad. Fix me. - // Check for > 1 for haploid genotypes - boolean phased = GTValueArray[genotypeAlleleLocation].length() > 1 && GTValueArray[genotypeAlleleLocation].charAt(1) == '|'; + List GTalleles = (genotypeAlleleLocation == -1 ? null : parseGenotypeAlleles(GTValueArray[genotypeAlleleLocation], alleles, alleleMap)); + boolean phased = genotypeAlleleLocation != -1 && GTValueArray[genotypeAlleleLocation].indexOf(VCFConstants.PHASED) != -1; // add it to the list try { - genotypes.put(sampleName, new Genotype(sampleName, - parseGenotypeAlleles(GTValueArray[genotypeAlleleLocation], alleles, alleleMap), - GTQual, - genotypeFilters, - gtAttributes, - phased)); + genotypes.put(sampleName, + new Genotype(sampleName, + GTalleles, + GTQual, + genotypeFilters, + gtAttributes, + phased)); } catch (TribbleException e) { throw new TribbleException.InternalCodecException(e.getMessage() + ", at position " + chr+":"+pos); } diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Genotype.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Genotype.java index 3a87f1196..0b5976c3c 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Genotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Genotype.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.utils.variantcontext; import org.broad.tribble.util.ParsingUtils; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.*; @@ -19,12 +20,14 @@ public class Genotype { protected InferredGeneticContext commonInfo; public final static double NO_NEG_LOG_10PERROR = InferredGeneticContext.NO_NEG_LOG_10PERROR; protected List alleles = null; // new ArrayList(); + protected Type type = null; protected boolean isPhased = false; - private boolean filtersWereAppliedToContext; + protected boolean filtersWereAppliedToContext; public Genotype(String sampleName, List alleles, double negLog10PError, Set filters, Map attributes, boolean isPhased) { - this.alleles = Collections.unmodifiableList(alleles); + if ( alleles != null ) + this.alleles = Collections.unmodifiableList(alleles); commonInfo = new InferredGeneticContext(sampleName, negLog10PError, filters, attributes); filtersWereAppliedToContext = filters != null; this.isPhased = isPhased; @@ -66,6 +69,9 @@ public class Genotype { } public List getAlleles(Allele allele) { + if ( getType() == Type.UNAVAILABLE ) + throw new ReviewedStingException("Requesting alleles for an UNAVAILABLE genotype"); + List al = new ArrayList(); for ( Allele a : alleles ) if ( a.equals(allele) ) @@ -75,6 +81,8 @@ public class Genotype { } public Allele getAllele(int i) { + if ( getType() == Type.UNAVAILABLE ) + throw new ReviewedStingException("Requesting alleles for an UNAVAILABLE genotype"); return alleles.get(i); } @@ -89,10 +97,21 @@ public class Genotype { NO_CALL, HOM_REF, HET, - HOM_VAR + HOM_VAR, + UNAVAILABLE } public Type getType() { + if ( type == null ) { + type = determineType(); + } + return type; + } + + protected Type determineType() { + if ( alleles == null ) + return Type.UNAVAILABLE; + Allele firstAllele = alleles.get(0); if ( firstAllele.isNoCall() ) { @@ -122,7 +141,8 @@ public class Genotype { * @return true if this genotype is not actually a genotype but a "no call" (e.g. './.' in VCF) */ public boolean isNoCall() { return getType() == Type.NO_CALL; } - public boolean isCalled() { return getType() != Type.NO_CALL; } + public boolean isCalled() { return getType() != Type.NO_CALL && getType() != Type.UNAVAILABLE; } + public boolean isAvailable() { return getType() != Type.UNAVAILABLE; } // // Useful methods for getting genotype likelihoods for a genotype object, if present @@ -157,8 +177,8 @@ public class Genotype { } public void validate() { - if ( alleles == null ) throw new IllegalArgumentException("BUG: alleles cannot be null in setAlleles"); - if ( alleles.size() == 0) throw new IllegalArgumentException("BUG: alleles cannot be of size 0 in setAlleles"); + if ( alleles == null ) return; + if ( alleles.size() == 0) throw new IllegalArgumentException("BUG: alleles cannot be of size 0"); int nNoCalls = 0; for ( Allele allele : alleles ) { @@ -175,6 +195,9 @@ public class Genotype { } public String getGenotypeString(boolean ignoreRefState) { + if ( alleles == null ) + return null; + // Notes: // 1. Make sure to use the appropriate separator depending on whether the genotype is phased // 2. If ignoreRefState is true, then we want just the bases of the Alleles (ignoring the '*' indicating a ref Allele) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java index da80a3431..92c5d648b 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java @@ -1206,9 +1206,11 @@ public class VariantContext implements Feature { // to enable tribble intergrati if ( ! name.equals(g.getSampleName()) ) throw new IllegalStateException("Bound sample name " + name + " does not equal the name of the genotype " + g.getSampleName()); - for ( Allele gAllele : g.getAlleles() ) { - if ( ! hasAllele(gAllele) && gAllele.isCalled() ) - throw new IllegalStateException("Allele in genotype " + gAllele + " not in the variant context " + alleles); + if ( g.isAvailable() ) { + for ( Allele gAllele : g.getAlleles() ) { + if ( ! hasAllele(gAllele) && gAllele.isCalled() ) + throw new IllegalStateException("Allele in genotype " + gAllele + " not in the variant context " + alleles); + } } } } From 797c50e6894f5e5fd341c3b002610301173c269a Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Wed, 13 Jul 2011 10:01:23 -0400 Subject: [PATCH 100/161] Fixing integration tests I broke yesterday; removing batch merging test since we don't support that anymore. --- .../phasing/MergeMNPsIntegrationTest.java | 6 +-- ...gatingAlternateAllelesIntegrationTest.java | 6 +-- .../BatchMergeIntegrationTest.java | 46 ------------------- 3 files changed, 6 insertions(+), 52 deletions(-) delete mode 100755 public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/BatchMergeIntegrationTest.java diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsIntegrationTest.java index 3f87fc1a2..c88eac149 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsIntegrationTest.java @@ -23,7 +23,7 @@ public class MergeMNPsIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 1) + " -L chr20:556259-756570", 1, - Arrays.asList("e312b7d3854d5b2834a370659514a813")); + Arrays.asList("7f11f7f75d1526077f0173c7ed1fc6c4")); executeTest("Merge MNP sites within genomic distance of 1 [TEST ONE]", spec); } @@ -33,7 +33,7 @@ public class MergeMNPsIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 10) + " -L chr20:556259-756570", 1, - Arrays.asList("681f50e45f1d697370d2c355df2e18bc")); + Arrays.asList("53dd312468296826bdd3c22387390c88")); executeTest("Merge MNP sites within genomic distance of 10 [TEST TWO]", spec); } @@ -43,7 +43,7 @@ public class MergeMNPsIntegrationTest extends WalkerTest { baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 100) + " -L chr20:556259-756570", 1, - Arrays.asList("0bccb0ef928a108418246bec01098083")); + Arrays.asList("e26f92d2fb9f4eaeac7f9d8ee27410ee")); executeTest("Merge MNP sites within genomic distance of 100 [TEST THREE]", spec); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesIntegrationTest.java index 009048c10..f855c1dd3 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesIntegrationTest.java @@ -23,7 +23,7 @@ public class MergeSegregatingAlternateAllelesIntegrationTest extends WalkerTest baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 1) + " -L chr20:556259-756570", 1, - Arrays.asList("e16f957d888054ae0518e25660295241")); + Arrays.asList("af5e1370822551c0c6f50f23447dc627")); executeTest("Merge sites within genomic distance of 1 [TEST ONE]", spec); } @@ -33,7 +33,7 @@ public class MergeSegregatingAlternateAllelesIntegrationTest extends WalkerTest baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 10) + " -L chr20:556259-756570", 1, - Arrays.asList("122a482090677c7619c2105d44e00d11")); + Arrays.asList("dd8c44ae1ef059a7fe85399467e102eb")); executeTest("Merge sites within genomic distance of 10 [TEST TWO]", spec); } @@ -43,7 +43,7 @@ public class MergeSegregatingAlternateAllelesIntegrationTest extends WalkerTest baseTestString(hg18Reference, "merging_test_chr20_556259_756570.vcf", 100) + " -L chr20:556259-756570", 1, - Arrays.asList("bc6a8c8a42bb2601db98e88e9ad74748")); + Arrays.asList("f81fd72ecaa57b3215406fcea860bcc5")); executeTest("Merge sites within genomic distance of 100 [TEST THREE]", spec); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/BatchMergeIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/BatchMergeIntegrationTest.java deleted file mode 100755 index 7e1d86105..000000000 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/BatchMergeIntegrationTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2010, The Broad Institute - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -package org.broadinstitute.sting.gatk.walkers.variantutils; - -import org.broadinstitute.sting.WalkerTest; -import org.testng.annotations.Test; - -import java.io.File; -import java.util.Arrays; - -public class BatchMergeIntegrationTest extends WalkerTest { - @Test - public void testBatchMerge1() { - String bam = validationDataLocation + "NA12878.HiSeq.b37.chr20.10_11mb.bam"; - String alleles = validationDataLocation + "batch.merge.alleles.vcf"; - WalkerTestSpec spec = new WalkerTestSpec( - "-T UnifiedGenotyper -NO_HEADER -BTI alleles -stand_call_conf 0.0 -glm BOTH -G none -nsl -gt_mode GENOTYPE_GIVEN_ALLELES -out_mode EMIT_ALL_SITES -o %s -R " + b37KGReference - + " -B:alleles,VCF " + alleles - + " -I " + bam, - 1, - Arrays.asList("f4ed8f4ef2cba96823c06e90e9d0de35")); - executeTest("testBatchMerge UG genotype given alleles:" + new File(bam).getName() + " with " + new File(alleles).getName(), spec); - } -} \ No newline at end of file From fa3ff5350800f1449b6e4e5f365cf2b745906932 Mon Sep 17 00:00:00 2001 From: Menachem Fromer Date: Wed, 13 Jul 2011 11:58:16 -0400 Subject: [PATCH 104/161] Filters should only be applied to the new VC if the old VC had filters applied --- .../sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java index e59b29502..af24035c8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java @@ -220,6 +220,9 @@ public class ReadBackedPhasingWalker extends RodWalker Date: Wed, 13 Jul 2011 14:40:01 -0400 Subject: [PATCH 106/161] Don't output source and ref header lines anymore. Short-term motivation for this is that I'd like this tool when run on a VCF to emit the exact same VCF. Long-term motivation is that these tags should be output by the VCF writer itself for all tools. --- .../walkers/variantutils/VariantsToVCF.java | 4 +-- .../utils/codecs/vcf/VCFIntegrationTest.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java index 7eb49da34..79134b553 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java @@ -199,8 +199,8 @@ public class VariantsToVCF extends RodWalker { // setup the header fields Set hInfo = new HashSet(); hInfo.addAll(VCFUtils.getHeaderFields(getToolkit())); - hInfo.add(new VCFHeaderLine("source", "VariantsToVCF")); - hInfo.add(new VCFHeaderLine("reference", getToolkit().getArguments().referenceFile.getName())); + //hInfo.add(new VCFHeaderLine("source", "VariantsToVCF")); + //hInfo.add(new VCFHeaderLine("reference", getToolkit().getArguments().referenceFile.getName())); allowedGenotypeFormatStrings.add(VCFConstants.GENOTYPE_KEY); for ( VCFHeaderLine field : hInfo ) { diff --git a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java new file mode 100644 index 000000000..32ff25c7b --- /dev/null +++ b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java @@ -0,0 +1,28 @@ +package org.broadinstitute.sting.utils.codecs.vcf; + +import org.broadinstitute.sting.WalkerTest; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +public class VCFIntegrationTest extends WalkerTest { + + @Test + public void testReadingAndWritingWitHNoChanges() { + + String md5ofInputVCF = "a990ba187a69ca44cb9bc2bb44d00447"; + String testVCF = validationDataLocation + "vcf4.1.example.vcf"; + + String baseCommand = "-R " + b37KGReference + " -NO_HEADER -o %s "; + + String test1 = baseCommand + "-T VariantAnnotator -BTI variant -B:variant,vcf " + testVCF; + WalkerTestSpec spec1 = new WalkerTestSpec(test1, 1, Arrays.asList(md5ofInputVCF)); + List result = executeTest("Test Variant Annotator with no changes", spec1).getFirst(); + + String test2 = baseCommand + "-T VariantsToVCF -B:variant,vcf " + result.get(0).getAbsolutePath(); + WalkerTestSpec spec2 = new WalkerTestSpec(test2, 1, Arrays.asList(md5ofInputVCF)); + executeTest("Test Variants To VCF from new output", spec2); + } +} From df996a1a738208dac7c42b24645f747304b3de7f Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Wed, 13 Jul 2011 14:53:58 -0400 Subject: [PATCH 107/161] more progress report for the Data Processing Pipeline. Bam lists can now have empty lines, comments and whitespaces anywhere. --- .../qscripts/DataProcessingPipeline.scala | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index f9369ee3f..d6caabd23 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -147,13 +147,22 @@ class DataProcessingPipeline extends QScript { } } + println("\n\n*** DEBUG ***\n") // Creating one file for each sample in the dataset val sampleBamFiles = scala.collection.mutable.Map.empty[String, File] for ((sample, flist) <- sampleTable) { + + println(sample + ":") + for (f <- flist) + println (f) + println() + val sampleFileName = new File(qscript.outputDir + qscript.projectName + "." + sample + ".bam") sampleBamFiles(sample) = sampleFileName add(joinBams(flist, sampleFileName)) } + println("*** DEBUG ***\n\n") + return sampleBamFiles.toMap } @@ -211,8 +220,10 @@ class DataProcessingPipeline extends QScript { if (in.toString.endsWith("bam")) return List(in) var l: List[File] = List() - for (bam <- fromFile(in).getLines) - l :+= new File(bam) + for (bam <- fromFile(in).getLines) { + if (!bam.startsWith("#") && !bam.isEmpty) + l :+= new File(bam.trim) + } return l } @@ -234,9 +245,6 @@ class DataProcessingPipeline extends QScript { // Generate a BAM file per sample joining all per lane files if necessary val sampleBamFiles: Map[String, File] = createSampleFiles(bams, realignedBams) - - println("nContigs: " + nContigs) - // Final output list of processed bam files var cohortList: List[File] = List() @@ -244,6 +252,7 @@ class DataProcessingPipeline extends QScript { println("\nFound the following samples: ") for ((sample, file) <- sampleBamFiles) println("\t" + sample + " -> " + file) + println("\n") // If this is a 'knowns only' indel realignment run, do it only once for all samples. val globalIntervals = new File(outputDir + projectName + ".intervals") From bb0e3a26fcf2a0c99ee0e70c46fb6359b3720a40 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Wed, 13 Jul 2011 14:57:21 -0400 Subject: [PATCH 108/161] Added integration test for VCF writing. Also, bug fix for writing the GT-free records. --- .../sting/utils/codecs/vcf/StandardVCFWriter.java | 7 ++++--- .../variantutils/VariantsToVCFIntegrationTest.java | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index f7d09f16d..e7ddac185 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -444,9 +444,10 @@ public class StandardVCFWriter implements VCFWriter { break; } - for (String s : attrs ) { - mWriter.write(VCFConstants.GENOTYPE_FIELD_SEPARATOR); - mWriter.write(s); + for (int i = 0; i < attrs.size(); i++) { + if ( i > 0 || genotypeFormatKeys.contains(VCFConstants.GENOTYPE_KEY) ) + mWriter.write(VCFConstants.GENOTYPE_FIELD_SEPARATOR); + mWriter.write(attrs.get(i)); } } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java index 8421076c9..8c96c1e11 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCFIntegrationTest.java @@ -20,7 +20,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testVariantsToVCFUsingGeliInput() { List md5 = new ArrayList(); - md5.add("815b82fff92aab41c209eedce2d7e7d9"); + md5.add("4accae035d271b35ee2ec58f403c68c6"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -38,7 +38,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingGeliInput() { List md5 = new ArrayList(); - md5.add("22336ee9c12aa222ce29c3c5babca7d0"); + md5.add("71e8c98d7c3a73b6287ecc339086fe03"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -56,7 +56,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingHapMapInput() { List md5 = new ArrayList(); - md5.add("9bedaa7670b86a07be5191898c3727cf"); + md5.add("f343085305e80c7a2493422e4eaad983"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + @@ -73,7 +73,7 @@ public class VariantsToVCFIntegrationTest extends WalkerTest { @Test public void testGenotypesToVCFUsingVCFInput() { List md5 = new ArrayList(); - md5.add("cc215edec9ca28e5c79ab1b67506f9f7"); + md5.add("86f02e2e764ba35854cff2aa05a1fdd8"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-R " + b36KGReference + From 66c652d687ec5b5e15b33255441e31b775d20c3c Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 14 Jul 2011 11:56:10 -0400 Subject: [PATCH 115/161] Added some extra error checks in the VCF codec. Now that we've moved this back into the GATK, changed some of the standard exceptions to be USerErrors (instead of TribbleExceptions). --- .../utils/codecs/vcf/AbstractVCFCodec.java | 25 ++++++++++--------- .../sting/utils/exceptions/UserException.java | 10 ++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java index 01344a117..710127f7a 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java @@ -7,6 +7,8 @@ import org.broad.tribble.NameAwareCodec; import org.broad.tribble.TribbleException; import org.broad.tribble.readers.LineReader; import org.broad.tribble.util.ParsingUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; @@ -96,6 +98,9 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, for ( String str : headerStrings ) { if ( !str.startsWith(VCFHeader.METADATA_INDICATOR) ) { String[] strings = str.substring(1).split(VCFConstants.FIELD_SEPARATOR); + if ( strings.length < VCFHeader.HEADER_FIELDS.values().length ) + throw new TribbleException.InvalidHeader("there are not enough columns present in the header line: " + str); + int arrayIndex = 0; for (VCFHeader.HEADER_FIELDS field : VCFHeader.HEADER_FIELDS.values()) { try { @@ -159,12 +164,11 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, } private Feature reallyDecode(String line) { - try { // the same line reader is not used for parsing the header and parsing lines, if we see a #, we've seen a header line if (line.startsWith(VCFHeader.HEADER_INDICATOR)) return null; // our header cannot be null, we need the genotype sample names and counts - if (header == null) throw new IllegalStateException("VCF Header cannot be null when decoding a record"); + if (header == null) throw new ReviewedStingException("VCF Header cannot be null when decoding a record"); if (parts == null) parts = new String[Math.min(header.getColumnCount(), NUM_STANDARD_FIELDS+1)]; @@ -174,17 +178,18 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, // if we have don't have a header, or we have a header with no genotyping data check that we have eight columns. Otherwise check that we have nine (normal colummns + genotyping data) if (( (header == null || (header != null && !header.hasGenotypingData())) && nParts != NUM_STANDARD_FIELDS) || (header != null && header.hasGenotypingData() && nParts != (NUM_STANDARD_FIELDS + 1)) ) - throw new IllegalArgumentException("There aren't enough columns for line " + line + " (we expected " + (header == null ? NUM_STANDARD_FIELDS : NUM_STANDARD_FIELDS + 1) + - " tokens, and saw " + nParts + " )"); + throw new UserException.MalformedVCF("there aren't enough columns for line " + line + " (we expected " + (header == null ? NUM_STANDARD_FIELDS : NUM_STANDARD_FIELDS + 1) + + " tokens, and saw " + nParts + " )", lineNo); return parseVCFLine(parts); - } catch (TribbleException e) { - throw new TribbleException.InvalidDecodeLine(e.getMessage(), line); - } } protected void generateException(String message) { - throw new TribbleException.InvalidDecodeLine(message, lineNo); + throw new UserException.MalformedVCF(message, lineNo); + } + + private static void generateException(String message, int lineNo) { + throw new UserException.MalformedVCF(message, lineNo); } /** @@ -472,10 +477,6 @@ public abstract class AbstractVCFCodec implements FeatureCodec, NameAwareCodec, return true; } - private static void generateException(String message, int lineNo) { - throw new TribbleException.InvalidDecodeLine(message, lineNo); - } - private static int computeForwardClipping(List unclippedAlleles, String ref) { boolean clipping = true; // Note that the computation of forward clipping here is meant only to see whether there is a common diff --git a/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java b/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java index 0be4bec91..17c4a7df4 100755 --- a/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java +++ b/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java @@ -154,6 +154,16 @@ public class UserException extends ReviewedStingException { } } + public static class MalformedVCF extends UserException { + public MalformedVCF(String message, String line) { + super(String.format("The provided VCF file is malformed at line %s: %s", line, message)); + } + + public MalformedVCF(String message, int lineNo) { + super(String.format("The provided VCF file is malformed at line nmber %d: %s", lineNo, message)); + } + } + public static class ReadMissingReadGroup extends MalformedBAM { public ReadMissingReadGroup(SAMRecord read) { super(read, String.format("Read %s is either missing the read group or its read group is not defined in the BAM header, both of which are required by the GATK. Please use http://www.broadinstitute.org/gsa/wiki/index.php/ReplaceReadGroups to fix this problem", read.getReadName())); From ed6beae1f3769c247b9a4fc80121985baad6443f Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 14 Jul 2011 13:55:35 -0400 Subject: [PATCH 116/161] Adding headers to diffable reading for VCFs --- .../gatk/walkers/diffengine/VCFDiffableReader.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java index 06d14366f..5677574bd 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -26,16 +26,12 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; import org.broad.tribble.readers.AsciiLineReader; import org.broad.tribble.readers.LineReader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.*; -import java.util.Arrays; import java.util.Map; -import java.util.zip.GZIPInputStream; /** @@ -58,7 +54,11 @@ public class VCFDiffableReader implements DiffableReader { VCFCodec vcfCodec = new VCFCodec(); // must be read as state is stored in reader itself - vcfCodec.readHeader(lineReader); + VCFHeader header = (VCFHeader)vcfCodec.readHeader(lineReader); + for ( VCFHeaderLine headerLine : header.getMetaData() ) { + final String key = (headerLine instanceof VCFNamedHeaderLine ? headerLine.getKey() + "." + ((VCFNamedHeaderLine) headerLine).getName() : headerLine.getKey()); + root.add(key, headerLine.toString()); + } String line = lineReader.readLine(); int count = 0; From 9540df69986c16112b5fdd57efebf72846d86424 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 14 Jul 2011 14:00:19 -0400 Subject: [PATCH 117/161] Oops, forgot to update unit test --- .../sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java index baa2f0383..a0cb47770 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReaderUnitTest.java @@ -87,7 +87,7 @@ public class DiffableReaderUnitTest extends BaseTest { Assert.assertSame(diff.getParent(), DiffElement.ROOT); DiffNode node = diff.getValueAsNode(); - Assert.assertEquals(node.getElements().size(), 9); + Assert.assertEquals(node.getElements().size(), 10); // chr1 2646 rs62635284 G A 0.15 PASS AC=2;AF=1.00;AN=2 GT:AD:DP:GL:GQ 1/1:53,75:3:-12.40,-0.90,-0.00:9.03 DiffNode rec1 = node.getElement("chr1:2646").getValueAsNode(); From 5ffeddd3b1ac5f83d6018dad0a178ae785a4dc39 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Thu, 14 Jul 2011 14:45:16 -0400 Subject: [PATCH 118/161] better to use _ instead of ., as this is a special case later. --- .../sting/gatk/walkers/diffengine/VCFDiffableReader.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java index 5677574bd..a812babaf 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -56,7 +56,9 @@ public class VCFDiffableReader implements DiffableReader { // must be read as state is stored in reader itself VCFHeader header = (VCFHeader)vcfCodec.readHeader(lineReader); for ( VCFHeaderLine headerLine : header.getMetaData() ) { - final String key = (headerLine instanceof VCFNamedHeaderLine ? headerLine.getKey() + "." + ((VCFNamedHeaderLine) headerLine).getName() : headerLine.getKey()); + String key = headerLine.getKey(); + if ( headerLine instanceof VCFNamedHeaderLine ) + key += "_" + ((VCFNamedHeaderLine) headerLine).getName(); root.add(key, headerLine.toString()); } From c0bbeb23ba0200d80f940a395ddc019fdb61f093 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Thu, 14 Jul 2011 15:12:28 -0400 Subject: [PATCH 119/161] Now providing more information when the index on the fly isn't equal to the one created by reading the file from disk. --- .../test/org/broadinstitute/sting/WalkerTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/public/java/test/org/broadinstitute/sting/WalkerTest.java b/public/java/test/org/broadinstitute/sting/WalkerTest.java index dacaf2738..d65f4ec34 100755 --- a/public/java/test/org/broadinstitute/sting/WalkerTest.java +++ b/public/java/test/org/broadinstitute/sting/WalkerTest.java @@ -26,7 +26,9 @@ package org.broadinstitute.sting; import org.apache.commons.lang.StringUtils; +import org.broad.tribble.FeatureCodec; import org.broad.tribble.Tribble; +import org.broad.tribble.index.Index; import org.broad.tribble.index.IndexFactory; import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; import org.broadinstitute.sting.gatk.CommandLineExecutable; @@ -64,10 +66,19 @@ public class WalkerTest extends BaseTest { } System.out.println("Verifying on-the-fly index " + indexFile + " for test " + name + " using file " + resultFile); - Assert.assertTrue(IndexFactory.onDiskIndexEqualToNewlyCreatedIndex(resultFile, indexFile, new VCFCodec()), "Index on disk from indexing on the fly not equal to the index created after the run completed"); + Index indexFromOutputFile = IndexFactory.createIndex(resultFile, new VCFCodec()); + Index dynamicIndex = IndexFactory.loadIndex(indexFile.getAbsolutePath()); + + if ( ! indexFromOutputFile.equals(dynamicIndex) ) { + Assert.fail(String.format("Index on disk from indexing on the fly not equal to the index created after the run completed. FileIndex %s vs. on-the-fly %s%n", + indexFromOutputFile.getProperties(), + dynamicIndex.getProperties())); + } } } + + public List assertMatchingMD5s(final String name, List resultFiles, List expectedMD5s) { List md5s = new ArrayList(); for (int i = 0; i < resultFiles.size(); i++) { From 9f5180ab053d7116b194f2ef09b5f157dbeb4cca Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Thu, 14 Jul 2011 16:42:17 -0400 Subject: [PATCH 120/161] Recalibrates a list of bam files allowing multiple bams to be recalibrated out of a single 'mother' queue job. --- .../qscripts/RecalibrateBaseQualities.scala | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index dc9ae0f4b..88c7f5ff7 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -3,6 +3,7 @@ package org.broadinstitute.sting.queue.qscripts import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ import net.sf.samtools.SAMFileReader +import io.Source._ /** * Created by IntelliJ IDEA. @@ -37,21 +38,35 @@ class RecalibrateBaseQualities extends QScript { return samReader.getFileHeader.getSequenceDictionary.getSequences.size() } + // Reads a BAM LIST file and creates a scala list with all the files + def createListFromFile(in: File):List[File] = { + if (in.toString.endsWith("bam")) + return List(in) + var l: List[File] = List() + for (bam <- fromFile(in).getLines) + l :+= new File(bam) + return l + } + def script = { - nContigs = getNumberOfContigs(input) + val bamList = createListFromFile(input) + nContigs = getNumberOfContigs(bamList(0)) - val recalFile1: File = swapExt(input, ".bam", ".recal1.csv") - val recalFile2: File = swapExt(input, ".bam", ".recal2.csv") - val recalBam: File = swapExt(input, ".bam", ".recal.bam") - val path1: String = input + "before" - val path2: String = input + "after" - - add(cov(input, recalFile1), - recal(input, recalFile1, recalBam), - cov(recalBam, recalFile2), - analyzeCovariates(recalFile1, path1), - analyzeCovariates(recalFile2, path2)) + for (bam <- bamList) { + + val recalFile1: File = swapExt(bam, ".bam", ".recal1.csv") + val recalFile2: File = swapExt(bam, ".bam", ".recal2.csv") + val recalBam: File = swapExt(bam, ".bam", ".recal.bam") + val path1: String = bam + "before" + val path2: String = bam + "after" + + add(cov(bam, recalFile1), + recal(bam, recalFile1, recalBam), + cov(recalBam, recalFile2), + analyzeCovariates(recalFile1, path1), + analyzeCovariates(recalFile2, path2)) + } } trait CommandLineGATKArgs extends CommandLineGATK { From 09ffe277ae7d3418f75510cabe65e6c9a8fa8f25 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Thu, 14 Jul 2011 17:09:35 -0400 Subject: [PATCH 121/161] Added a qscripts util package with some utility functions commonly shared across queue scripts. Refactored some of my public scripts to use it in an effort to make queue scripts more reusable and "supportable". --- .../qscripts/DataProcessingPipeline.scala | 38 ++---------- .../qscripts/RecalibrateBaseQualities.scala | 20 +----- .../sting/queue/qscripts/utils/Utils.scala | 62 +++++++++++++++++++ 3 files changed, 71 insertions(+), 49 deletions(-) create mode 100644 public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index f9369ee3f..e62b1b926 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -4,13 +4,13 @@ import org.broadinstitute.sting.queue.extensions.gatk._ import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.function.ListWriterFunction -import scala.io.Source._ import collection.JavaConversions._ import org.broadinstitute.sting.gatk.walkers.indels.IndelRealigner.ConsensusDeterminationModel import org.broadinstitute.sting.queue.extensions.picard._ -import net.sf.samtools.{SAMFileReader, SAMReadGroupRecord} +import net.sf.samtools.{SAMFileReader} import net.sf.samtools.SAMFileHeader.SortOrder +import org.broadinstitute.sting.queue.qscripts.utils.Utils class DataProcessingPipeline extends QScript { qscript => @@ -103,18 +103,6 @@ class DataProcessingPipeline extends QScript { val ds: String) {} - // Utility function to check if there are multiple samples in a BAM file (currently we can't deal with that) - def hasMultipleSamples(readGroups: java.util.List[SAMReadGroupRecord]): Boolean = { - var sample: String = "" - for (r <- readGroups) { - if (sample.isEmpty) - sample = r.getSample - else if (sample != r.getSample) - return true; - } - return false - } - // Utility function to merge all bam files of similar samples. Generates one BAM file per sample. // It uses the sample information on the header of the input BAM files. // @@ -135,7 +123,7 @@ class DataProcessingPipeline extends QScript { // only allow one sample per file. Bam files with multiple samples would require pre-processing of the file // with PrintReads to separate the samples. Tell user to do it himself! - assert(!hasMultipleSamples(readGroups), "The pipeline requires that only one sample is present in a BAM file. Please separate the samples in " + bam) + assert(!Utils.hasMultipleSamples(readGroups), "The pipeline requires that only one sample is present in a BAM file. Please separate the samples in " + bam) // Fill out the sample table with the readgroups in this file for (rg <- readGroups) { @@ -157,12 +145,6 @@ class DataProcessingPipeline extends QScript { return sampleBamFiles.toMap } - // Checks how many contigs are in the dataset. Uses the BAM file header information. - def getNumberOfContigs(bamFile: File): Int = { - val samReader = new SAMFileReader(new File(bamFile)) - return samReader.getFileHeader.getSequenceDictionary.getSequences.size() - } - // Rebuilds the Read Group string to give BWA def addReadGroups(inBam: File, outBam: File, samReader: SAMFileReader) { val readGroups = samReader.getFileHeader.getReadGroups @@ -206,15 +188,7 @@ class DataProcessingPipeline extends QScript { return realignedBams } - // Reads a BAM LIST file and creates a scala list with all the files - def createListFromFile(in: File):List[File] = { - if (in.toString.endsWith("bam")) - return List(in) - var l: List[File] = List() - for (bam <- fromFile(in).getLines) - l :+= new File(bam) - return l - } + @@ -226,8 +200,8 @@ class DataProcessingPipeline extends QScript { def script = { // keep a record of the number of contigs in the first bam file in the list - val bams = createListFromFile(input) - nContigs = getNumberOfContigs(bams(0)) + val bams = Utils.createListFromFile(input) + nContigs = Utils.getNumberOfContigs(bams(0)) val realignedBams = if (useBWApe || useBWAse) {performAlignment(bams)} else {bams} diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index 88c7f5ff7..b2960f150 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -4,6 +4,7 @@ import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ import net.sf.samtools.SAMFileReader import io.Source._ +import org.broadinstitute.sting.queue.qscripts.utils.Utils /** * Created by IntelliJ IDEA. @@ -33,25 +34,10 @@ class RecalibrateBaseQualities extends QScript { val queueLogDir: String = ".qlog/" var nContigs: Int = 0 - def getNumberOfContigs(bamFile: File): Int = { - val samReader = new SAMFileReader(new File(bamFile)) - return samReader.getFileHeader.getSequenceDictionary.getSequences.size() - } - - // Reads a BAM LIST file and creates a scala list with all the files - def createListFromFile(in: File):List[File] = { - if (in.toString.endsWith("bam")) - return List(in) - var l: List[File] = List() - for (bam <- fromFile(in).getLines) - l :+= new File(bam) - return l - } - def script = { - val bamList = createListFromFile(input) - nContigs = getNumberOfContigs(bamList(0)) + val bamList = Utils.createListFromFile(input) + nContigs = Utils.getNumberOfContigs(bamList(0)) for (bam <- bamList) { diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala new file mode 100644 index 000000000..ff94744ee --- /dev/null +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala @@ -0,0 +1,62 @@ +package org.broadinstitute.sting.queue.qscripts.utils + +import java.io.File +import io.Source._ +import net.sf.samtools.{SAMReadGroupRecord, SAMFileReader} + +import collection.JavaConversions._ + + +/** + * Created by IntelliJ IDEA. + * User: carneiro + * Date: 7/14/11 + * Time: 4:57 PM + * To change this template use File | Settings | File Templates. + */ + +object Utils { + + /** + * Takes a bam list file and produces a scala list with each file allowing the bam list + * to have empty lines and comment lines (lines starting with #). + */ + def createListFromFile(in: File):List[File] = { + // If the file provided ends with .bam, it is not a bam list, we treat it as a single file. + // and return a list with only this file. + if (in.toString.endsWith(".bam")) + return List(in) + + var list: List[File] = List() + for (bam <- fromFile(in).getLines) + if (!bam.startsWith("#") && !bam.isEmpty ) + list :+= new File(bam.trim()) + list + } + + /** + * Returns the number of contigs in the BAM file header. + */ + + def getNumberOfContigs(bamFile: File): Int = { + val samReader = new SAMFileReader(new File(bamFile)) + samReader.getFileHeader.getSequenceDictionary.getSequences.size() + } + + /** + * Check if there are multiple samples in a BAM file + */ + + def hasMultipleSamples(readGroups: java.util.List[SAMReadGroupRecord]): Boolean = { + var sample: String = "" + for (r <- readGroups) { + if (sample.isEmpty) + sample = r.getSample + else if (sample != r.getSample) + return true; + } + false + } + + +} \ No newline at end of file From 43c6a8565bfe77e4c50317a3e8858b754d4afcba Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Thu, 14 Jul 2011 17:10:44 -0400 Subject: [PATCH 122/161] looks better now. --- .../org/broadinstitute/sting/queue/qscripts/utils/Utils.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala index ff94744ee..1189b376c 100644 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala @@ -37,7 +37,6 @@ object Utils { /** * Returns the number of contigs in the BAM file header. */ - def getNumberOfContigs(bamFile: File): Int = { val samReader = new SAMFileReader(new File(bamFile)) samReader.getFileHeader.getSequenceDictionary.getSequences.size() @@ -46,7 +45,6 @@ object Utils { /** * Check if there are multiple samples in a BAM file */ - def hasMultipleSamples(readGroups: java.util.List[SAMReadGroupRecord]): Boolean = { var sample: String = "" for (r <- readGroups) { From a670d6420ad586b7138326b994822ce1f6682629 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 15 Jul 2011 14:31:43 -0400 Subject: [PATCH 125/161] Refactoring Qscript utils into queue general utils package. --- .../sting/queue/qscripts/DataProcessingPipeline.scala | 4 ++-- .../sting/queue/qscripts/RecalibrateBaseQualities.scala | 4 +--- .../org/broadinstitute/sting/queue/util}/Utils.scala | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) rename public/scala/{qscript/org/broadinstitute/sting/queue/qscripts/utils => src/org/broadinstitute/sting/queue/util}/Utils.scala (96%) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index e62b1b926..40ac43a81 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -7,10 +7,10 @@ import org.broadinstitute.sting.queue.function.ListWriterFunction import collection.JavaConversions._ import org.broadinstitute.sting.gatk.walkers.indels.IndelRealigner.ConsensusDeterminationModel import org.broadinstitute.sting.queue.extensions.picard._ -import net.sf.samtools.{SAMFileReader} +import net.sf.samtools.SAMFileReader import net.sf.samtools.SAMFileHeader.SortOrder -import org.broadinstitute.sting.queue.qscripts.utils.Utils +import org.broadinstitute.sting.queue.util.Utils class DataProcessingPipeline extends QScript { qscript => diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index b2960f150..8ba880291 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -2,9 +2,7 @@ package org.broadinstitute.sting.queue.qscripts import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ -import net.sf.samtools.SAMFileReader -import io.Source._ -import org.broadinstitute.sting.queue.qscripts.utils.Utils +import org.broadinstitute.sting.queue.util.Utils /** * Created by IntelliJ IDEA. diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala b/public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala similarity index 96% rename from public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala rename to public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala index 1189b376c..5b80503a3 100644 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/utils/Utils.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala @@ -1,4 +1,4 @@ -package org.broadinstitute.sting.queue.qscripts.utils +package org.broadinstitute.sting.queue.util import java.io.File import io.Source._ From 7b7d40d5d97461f3b4cf71bf7b6efc0695a97f91 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 15 Jul 2011 14:34:50 -0400 Subject: [PATCH 126/161] A better name for the qscript utilities. Throw here every method you find yourself repeatedly implementing in your qscripts! Refactoring appropriately. --- .../sting/queue/qscripts/DataProcessingPipeline.scala | 8 ++++---- .../sting/queue/qscripts/RecalibrateBaseQualities.scala | 6 +++--- .../sting/queue/util/{Utils.scala => QScriptUtils.scala} | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) rename public/scala/src/org/broadinstitute/sting/queue/util/{Utils.scala => QScriptUtils.scala} (98%) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index 40ac43a81..050604b4e 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -10,7 +10,7 @@ import org.broadinstitute.sting.queue.extensions.picard._ import net.sf.samtools.SAMFileReader import net.sf.samtools.SAMFileHeader.SortOrder -import org.broadinstitute.sting.queue.util.Utils +import org.broadinstitute.sting.queue.util.QScriptUtils class DataProcessingPipeline extends QScript { qscript => @@ -123,7 +123,7 @@ class DataProcessingPipeline extends QScript { // only allow one sample per file. Bam files with multiple samples would require pre-processing of the file // with PrintReads to separate the samples. Tell user to do it himself! - assert(!Utils.hasMultipleSamples(readGroups), "The pipeline requires that only one sample is present in a BAM file. Please separate the samples in " + bam) + assert(!QScriptUtils.hasMultipleSamples(readGroups), "The pipeline requires that only one sample is present in a BAM file. Please separate the samples in " + bam) // Fill out the sample table with the readgroups in this file for (rg <- readGroups) { @@ -200,8 +200,8 @@ class DataProcessingPipeline extends QScript { def script = { // keep a record of the number of contigs in the first bam file in the list - val bams = Utils.createListFromFile(input) - nContigs = Utils.getNumberOfContigs(bams(0)) + val bams = QScriptUtils.createListFromFile(input) + nContigs = QScriptUtils.getNumberOfContigs(bams(0)) val realignedBams = if (useBWApe || useBWAse) {performAlignment(bams)} else {bams} diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index 8ba880291..56ca36925 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -2,7 +2,7 @@ package org.broadinstitute.sting.queue.qscripts import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.extensions.gatk._ -import org.broadinstitute.sting.queue.util.Utils +import org.broadinstitute.sting.queue.util.QScriptUtils /** * Created by IntelliJ IDEA. @@ -34,8 +34,8 @@ class RecalibrateBaseQualities extends QScript { def script = { - val bamList = Utils.createListFromFile(input) - nContigs = Utils.getNumberOfContigs(bamList(0)) + val bamList = QScriptUtils.createListFromFile(input) + nContigs = QScriptUtils.getNumberOfContigs(bamList(0)) for (bam <- bamList) { diff --git a/public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala similarity index 98% rename from public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala rename to public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala index 5b80503a3..e2f1f1608 100644 --- a/public/scala/src/org/broadinstitute/sting/queue/util/Utils.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala @@ -15,7 +15,7 @@ import collection.JavaConversions._ * To change this template use File | Settings | File Templates. */ -object Utils { +object QScriptUtils { /** * Takes a bam list file and produces a scala list with each file allowing the bam list From 224d373997e0f4775207654ad4e246caad6c9aac Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 15 Jul 2011 15:19:10 -0400 Subject: [PATCH 130/161] No need to double overload the file constructor --- .../src/org/broadinstitute/sting/queue/util/QScriptUtils.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala index e2f1f1608..9fb4fa30d 100644 --- a/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala @@ -38,7 +38,7 @@ object QScriptUtils { * Returns the number of contigs in the BAM file header. */ def getNumberOfContigs(bamFile: File): Int = { - val samReader = new SAMFileReader(new File(bamFile)) + val samReader = new SAMFileReader(bamFile) samReader.getFileHeader.getSequenceDictionary.getSequences.size() } From 72f4cf9c0ecbd8608d207ee59a5e5bd36a395be8 Mon Sep 17 00:00:00 2001 From: Menachem Fromer Date: Fri, 15 Jul 2011 17:44:31 -0400 Subject: [PATCH 141/161] Walker to perform deterministic annotation of phasing by transmission (to be compatible with RBP's definition of consecutive pairwise phasing) --- .../sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java index 1d9616aac..fbe6e5b5a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java @@ -242,7 +242,7 @@ public class ReadBackedPhasingWalker extends RodWalker KEYS_TO_KEEP_IN_REDUCED_VCF = new HashSet(Arrays.asList("PQ")); + private static final Set KEYS_TO_KEEP_IN_REDUCED_VCF = new HashSet(Arrays.asList(PQ_KEY)); private VariantContext reduceVCToSamples(VariantContext vc, List samplesToPhase) { // for ( String sample : samplesToPhase ) From 1e4798d5d0303df6b9cd42e9f7f2d30956004668 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 15 Jul 2011 19:34:14 -0400 Subject: [PATCH 144/161] Added targets to build.xml to re-run only tests that have failed (integration, unit, performance or pipeline tests). This is very useful and easy. After running any test (for example ant integrationtest) and seeing failures, you can rerun ONLY THE TESTS THAT FAILED by using one of the following commands: ant failed-integration ant failed-pipeline ant failed-test ant failed-performance obviously matching whatever tests you were running and got failures on. This should run only the failed tests, and you can keep using this command until you have fixed everything. (Thanks to David Roazen for major help with ANT) --- build.xml | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/build.xml b/build.xml index 986d89213..91eb1f8e9 100644 --- a/build.xml +++ b/build.xml @@ -785,6 +785,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -819,6 +863,22 @@ + + + + + + + + + + + + + + + + From fd1df31ef0ab60ec735ff5692132441224a02659 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Fri, 15 Jul 2011 19:39:42 -0400 Subject: [PATCH 145/161] changing the output directory names for Analyze Covariates --- .../sting/queue/qscripts/RecalibrateBaseQualities.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala index 56ca36925..fca420816 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/RecalibrateBaseQualities.scala @@ -42,8 +42,8 @@ class RecalibrateBaseQualities extends QScript { val recalFile1: File = swapExt(bam, ".bam", ".recal1.csv") val recalFile2: File = swapExt(bam, ".bam", ".recal2.csv") val recalBam: File = swapExt(bam, ".bam", ".recal.bam") - val path1: String = bam + "before" - val path2: String = bam + "after" + val path1: String = bam + ".before" + val path2: String = bam + ".after" add(cov(bam, recalFile1), recal(bam, recalFile1, recalBam), @@ -83,7 +83,7 @@ class RecalibrateBaseQualities extends QScript { case class analyzeCovariates (inRecalFile: File, outPath: String) extends AnalyzeCovariates { this.resources = R this.recal_file = inRecalFile - this.output_dir = outPath.toString + this.output_dir = outPath this.analysisName = queueLogDir + inRecalFile + ".analyze_covariates" this.jobName = queueLogDir + inRecalFile + ".analyze_covariates" } From ed55182a4c5553eb517569567e5193a12eb7e68a Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Sat, 16 Jul 2011 00:09:00 -0400 Subject: [PATCH 146/161] Removing Broad specific paths from parameters and making them required. This should make it unambiguous for people inside and outside the Broad to use the DataProcessingPipeline (as per request in the GetSatisfaction) --- .../qscripts/DataProcessingPipeline.scala | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index 050604b4e..4d4499990 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -3,10 +3,11 @@ package org.broadinstitute.sting.queue.qscripts import org.broadinstitute.sting.queue.extensions.gatk._ import org.broadinstitute.sting.queue.QScript import org.broadinstitute.sting.queue.function.ListWriterFunction +import org.broadinstitute.sting.queue.extensions.picard._ +import org.broadinstitute.sting.gatk.walkers.indels.IndelRealigner.ConsensusDeterminationModel +import org.broadinstitute.sting.utils.baq.BAQ.CalculationMode import collection.JavaConversions._ -import org.broadinstitute.sting.gatk.walkers.indels.IndelRealigner.ConsensusDeterminationModel -import org.broadinstitute.sting.queue.extensions.picard._ import net.sf.samtools.SAMFileReader import net.sf.samtools.SAMFileHeader.SortOrder @@ -29,6 +30,11 @@ class DataProcessingPipeline extends QScript { @Input(doc="Reference fasta file", fullName="reference", shortName="R", required=true) var reference: File = _ + @Input(doc="dbsnp ROD to use (must be in VCF format)", fullName="dbsnp", shortName="D", required=true) + var dbSNP: File = _ + + @Input(doc="extra VCF files to use as reference indels for Indel Realignment", fullName="extra_indels", shortName="indels", required=true) + var indels: File = _ /**************************************************************************** @@ -42,12 +48,6 @@ class DataProcessingPipeline extends QScript { @Input(doc="The path to the binary of bwa (usually BAM files have already been mapped - but if you want to remap this is the option)", fullName="path_to_bwa", shortName="bwa", required=false) var bwaPath: File = _ - @Input(doc="dbsnp ROD to use (must be in VCF format)", fullName="dbsnp", shortName="D", required=false) - var dbSNP: File = new File("/humgen/gsa-hpprojects/GATK/data/dbsnp_132_b37.leftAligned.vcf") - - @Input(doc="extra VCF files to use as reference indels for Indel Realignment", fullName="extra_indels", shortName="indels", required=false) - var indels: File = new File("/humgen/gsa-hpprojects/GATK/data/Comparisons/Unvalidated/AFR+EUR+ASN+1KG.dindel_august_release_merged_pilot1.20110126.sites.vcf") - @Input(doc="the project name determines the final output (BAM file) base name. Example NA12878 yields NA12878.processed.bam", fullName="project", shortName="p", required=false) var projectName: String = "project" @@ -295,7 +295,7 @@ class DataProcessingPipeline extends QScript { this.targetIntervals = tIntervals this.out = outBam this.rodBind :+= RodBind("dbsnp", "VCF", dbSNP) - this.rodBind :+= RodBind("indels", "VCF", qscript.indels) + this.rodBind :+= RodBind("indels", "VCF", indels) this.consensusDeterminationModel = consensusDeterminationModel this.compress = 0 this.scatterCount = nContigs @@ -318,7 +318,7 @@ class DataProcessingPipeline extends QScript { case class recal (inBam: File, inRecalFile: File, outBam: File) extends TableRecalibration with CommandLineGATKArgs { this.input_file :+= inBam this.recal_file = inRecalFile - this.baq = org.broadinstitute.sting.utils.baq.BAQ.CalculationMode.CALCULATE_AS_NECESSARY + this.baq = CalculationMode.CALCULATE_AS_NECESSARY this.out = outBam if (!qscript.intervalString.isEmpty()) this.intervalsString ++= List(qscript.intervalString) else if (qscript.intervals != null) this.intervals :+= qscript.intervals From dd92a14b40b6270cf093b38830aab3987b8d0d25 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Sat, 16 Jul 2011 00:23:35 -0400 Subject: [PATCH 147/161] Made extra indel VCF optional but DBSNP mandatory. --- .../queue/qscripts/DataProcessingPipeline.scala | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala index 4d4499990..d55b86d69 100755 --- a/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala +++ b/public/scala/qscript/org/broadinstitute/sting/queue/qscripts/DataProcessingPipeline.scala @@ -33,10 +33,6 @@ class DataProcessingPipeline extends QScript { @Input(doc="dbsnp ROD to use (must be in VCF format)", fullName="dbsnp", shortName="D", required=true) var dbSNP: File = _ - @Input(doc="extra VCF files to use as reference indels for Indel Realignment", fullName="extra_indels", shortName="indels", required=true) - var indels: File = _ - - /**************************************************************************** * Optional Parameters ****************************************************************************/ @@ -45,6 +41,10 @@ class DataProcessingPipeline extends QScript { // @Input(doc="path to Picard's SortSam.jar (if re-aligning a previously processed BAM file)", fullName="path_to_sort_jar", shortName="sort", required=false) // var sortSamJar: File = _ // + + @Input(doc="extra VCF files to use as reference indels for Indel Realignment", fullName="extra_indels", shortName="indels", required=false) + var indels: File = _ + @Input(doc="The path to the binary of bwa (usually BAM files have already been mapped - but if you want to remap this is the option)", fullName="path_to_bwa", shortName="bwa", required=false) var bwaPath: File = _ @@ -284,7 +284,8 @@ class DataProcessingPipeline extends QScript { this.out = outIntervals this.mismatchFraction = 0.0 this.rodBind :+= RodBind("dbsnp", "VCF", dbSNP) - this.rodBind :+= RodBind("indels", "VCF", indels) + if (!indels.isEmpty) + this.rodBind :+= RodBind("indels", "VCF", indels) this.scatterCount = nContigs this.analysisName = queueLogDir + outIntervals + ".target" this.jobName = queueLogDir + outIntervals + ".target" @@ -295,7 +296,8 @@ class DataProcessingPipeline extends QScript { this.targetIntervals = tIntervals this.out = outBam this.rodBind :+= RodBind("dbsnp", "VCF", dbSNP) - this.rodBind :+= RodBind("indels", "VCF", indels) + if (!indels.isEmpty) + this.rodBind :+= RodBind("indels", "VCF", indels) this.consensusDeterminationModel = consensusDeterminationModel this.compress = 0 this.scatterCount = nContigs From 5e7bc862a34d7366c168209261ea5aedb812c790 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sat, 16 Jul 2011 08:51:21 -0400 Subject: [PATCH 148/161] Rev tribble to include new equal() method that prints out details of why two indices are not the same. --- .../{tribble-3.jar => tribble-4.jar} | Bin 258609 -> 286423 bytes .../{tribble-3.xml => tribble-4.xml} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename settings/repository/org.broad/{tribble-3.jar => tribble-4.jar} (69%) rename settings/repository/org.broad/{tribble-3.xml => tribble-4.xml} (58%) diff --git a/settings/repository/org.broad/tribble-3.jar b/settings/repository/org.broad/tribble-4.jar similarity index 69% rename from settings/repository/org.broad/tribble-3.jar rename to settings/repository/org.broad/tribble-4.jar index f0ab44a05fb969693b20757be8d29b18f3b611a6..1f82f3cc05b8f02f117506269a8b96110cff591a 100644 GIT binary patch delta 50001 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 diff --git a/settings/repository/org.broad/tribble-3.xml b/settings/repository/org.broad/tribble-4.xml similarity index 58% rename from settings/repository/org.broad/tribble-3.xml rename to settings/repository/org.broad/tribble-4.xml index c35358331..07235efb0 100644 --- a/settings/repository/org.broad/tribble-3.xml +++ b/settings/repository/org.broad/tribble-4.xml @@ -1,4 +1,4 @@ - From eacf205f4079e55ed03dd248cbb8c1a41491c01e Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sat, 16 Jul 2011 09:22:34 -0400 Subject: [PATCH 150/161] Tests needed to be updated to reflect the code reorg of tribble. --- .../org/broadinstitute/sting/WalkerTest.java | 21 +++++++++++-------- .../codecs/vcf/IndexFactoryUnitTest.java | 3 ++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/public/java/test/org/broadinstitute/sting/WalkerTest.java b/public/java/test/org/broadinstitute/sting/WalkerTest.java index d65f4ec34..a39fa37fe 100755 --- a/public/java/test/org/broadinstitute/sting/WalkerTest.java +++ b/public/java/test/org/broadinstitute/sting/WalkerTest.java @@ -65,19 +65,22 @@ public class WalkerTest extends BaseTest { throw new StingException("Found an index created for file " + resultFile + " but we can only validate VCF files. Extend this code!"); } - System.out.println("Verifying on-the-fly index " + indexFile + " for test " + name + " using file " + resultFile); - Index indexFromOutputFile = IndexFactory.createIndex(resultFile, new VCFCodec()); - Index dynamicIndex = IndexFactory.loadIndex(indexFile.getAbsolutePath()); - - if ( ! indexFromOutputFile.equals(dynamicIndex) ) { - Assert.fail(String.format("Index on disk from indexing on the fly not equal to the index created after the run completed. FileIndex %s vs. on-the-fly %s%n", - indexFromOutputFile.getProperties(), - dynamicIndex.getProperties())); - } + assertOnDiskIndexEqualToNewlyCreatedIndex(indexFile, name, resultFile); } } + public static void assertOnDiskIndexEqualToNewlyCreatedIndex(final File indexFile, final String name, final File resultFile) { + System.out.println("Verifying on-the-fly index " + indexFile + " for test " + name + " using file " + resultFile); + Index indexFromOutputFile = IndexFactory.createIndex(resultFile, new VCFCodec()); + Index dynamicIndex = IndexFactory.loadIndex(indexFile.getAbsolutePath()); + + if ( ! indexFromOutputFile.equals(dynamicIndex) ) { + Assert.fail(String.format("Index on disk from indexing on the fly not equal to the index created after the run completed. FileIndex %s vs. on-the-fly %s%n", + indexFromOutputFile.getProperties(), + dynamicIndex.getProperties())); + } + } public List assertMatchingMD5s(final String name, List resultFiles, List expectedMD5s) { List md5s = new ArrayList(); diff --git a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/IndexFactoryUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/IndexFactoryUnitTest.java index 2f6b589f4..68a2ecf8d 100755 --- a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/IndexFactoryUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/IndexFactoryUnitTest.java @@ -4,6 +4,7 @@ import org.broad.tribble.Tribble; import org.broad.tribble.index.*; import org.broad.tribble.iterators.CloseableTribbleIterator; import org.broad.tribble.source.BasicFeatureSource; +import org.broadinstitute.sting.WalkerTest; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.testng.Assert; import org.testng.annotations.Test; @@ -75,7 +76,7 @@ public class IndexFactoryUnitTest { // test that the input index is the same as the one created from the identical input file // test that the dynamic index is the same as the output index, which is equal to the input index - Assert.assertTrue(IndexFactory.onDiskIndexEqualToNewlyCreatedIndex(outputFile, outputFileIndex, new VCFCodec())); + WalkerTest.assertOnDiskIndexEqualToNewlyCreatedIndex(outputFileIndex, "unittest", outputFile); } } } From 07b875c7796972eff2c56c662f198821a5c4e659 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Sat, 16 Jul 2011 09:57:46 -0400 Subject: [PATCH 151/161] Renaming the updated tribble jar file to match the svn revision number. --- .../org.broad/{tribble-4.jar => tribble-14.jar} | Bin .../org.broad/{tribble-4.xml => tribble-14.xml} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename settings/repository/org.broad/{tribble-4.jar => tribble-14.jar} (100%) rename settings/repository/org.broad/{tribble-4.xml => tribble-14.xml} (57%) diff --git a/settings/repository/org.broad/tribble-4.jar b/settings/repository/org.broad/tribble-14.jar similarity index 100% rename from settings/repository/org.broad/tribble-4.jar rename to settings/repository/org.broad/tribble-14.jar diff --git a/settings/repository/org.broad/tribble-4.xml b/settings/repository/org.broad/tribble-14.xml similarity index 57% rename from settings/repository/org.broad/tribble-4.xml rename to settings/repository/org.broad/tribble-14.xml index 07235efb0..f2116324a 100644 --- a/settings/repository/org.broad/tribble-4.xml +++ b/settings/repository/org.broad/tribble-14.xml @@ -1,4 +1,4 @@ - From 2b55d5b7c0dfca0abd09ab810206d5a437d598ec Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sat, 16 Jul 2011 16:45:55 -0400 Subject: [PATCH 152/161] Test tribble library where equals() ignores time stamps. --- settings/repository/org.broad/tribble-14.jar | Bin 286423 -> 286358 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/settings/repository/org.broad/tribble-14.jar b/settings/repository/org.broad/tribble-14.jar index 1f82f3cc05b8f02f117506269a8b96110cff591a..a0313df326217a5b1820cd7e7d6c029c8129e326 100644 GIT binary patch delta 6171 zcmZ`-3wTsTmOkg+o4%b+=Rv2FkdTBR0--}fctaqN010mrNJ0qj@KBUT!h)l&NQ06A z83m+AY6OJ9ph0m~1(FamJak5Mb{!XoU38s?IIPZ&Fq#=x*MVsEKlk2r!hYYTzf{%v z>(r_9tg7x0&h^-Tu7|gDhHiL>+(akpp7svZ8tPsf6@LTW>6te+YcUOVZR7V;jr;ML zOrkTHs{V@JGgNycUUd{0F6I3#yMx?n(%&QL7TtDJyGh@9=zHpjBxZ6mdst<*{^ zBi!r~!gRCS!;$O}BFaM}WyUK+w3}n3kM&S*0po<|;bxzQ433ZJaQ+1KyEy@UkP}T# z683nLd&(}!9?Ygl6EAQtX;Nh(O`3Fl{^V)p9`4NPn!NwJb*K! zcpwL)$uc=RiiUHJ$%CcO_3#iLiYCazWH?+W+DamEgsdKE@+dct_Rx4vHhGLdc^)d{ zu`(KGa()yQ@pxgMAV@(J7h*GD69trpZ>*O`c)$ER#z-RL)D| z-CQbzInvCPrp!ZSTyAoOxM`l7E5*a}JzT{LMCL*_FN&m9yx7f4q+e?CG7tKA*`Yd$ zmvcX9GEH9Lq5DH$e7PdWKW+A;nH7_ZmX?<-oi=-E(VU9HnPp78fGK)X&H9a-s@HFt zSH1RuRqz5)sHCm$>BrjoY5e!oC;nC!aeBzN8JfP09u1Y>8tQ(G9{18-dOEcGR*t@% zf}sny^7J3lj?m!SL-d_sT5&s5e}Z;}cHhp{pF)5Bc6R(Bdd^FA6l5YVZKg+=l0rwn z_J^X|{c{h|VJ{t`dM|J0N4>m-p7tUuwt9IRZ#DTbFF(%Pz4SNw%FA_h)5|{uKkwk3 zUiyV#Pw+02f8^yS`6-jvd3iS-4{dCp7>B86gnd6m(HqnndaHel`w$=S@9@5tHk^^sgZ3b!vr5vh9D<*CrqJ@-e7J?*rzaiqPZqTJbX7N8GF)aYL^W;s$v?A{qzcNi0MFZ2#fSNPXUT1|TB9(xAKd;XN^k@xh8Os4Zhx2HkxAf9>f-Gg=1sDBlN?^- zWtgs02<>|6rS5g}*x*unkCxG&shV!kO8N%Xl|=V>p}m=zg9^Yj`rP=ebnF>!_A% zXe0d?%QI~A=^5G&3XUK}KY?@l^9*_xm_`Qx_aKj%+)hJHI@mikCy*TofCU9&dl6Nl zQ!(m<#s-=xIlzq+8Sqm|BYEvEHQ-BYq}aeIN^c}rpp|-8HB&|-`MZWmuVJ}HA+;%z zvx1_T7s4UY(M+~G>}*$rAZwV5#_~Q@Sb>35NO!zG=5X!1CIu+^Uw-f0pYLtI4tpVDz>ry}el z-ikwZy5Qw{GK~f@^sY2||4IQJj)EKr#!WBAX}^4i(){3@XFRN!?N>y_mr!;d=7zcV=PG-`wx3A4Sj2`eScUedm!g=|vuEgDK^t*w|^z>nL*aZEaR z#W7m~SvU?y+x3bnYoakIG^uP1^CSRvk95YAmChEsPyFXPhT2AU`^IkZjjbnl07W{^ znm9_C;2)izx?SryOsTSVwlsMLrv2H;Mib>%HgsIKVk$u$7sFG+j<^pe(a(_)It+`V za~K)47-!gd%V;PacF7jH02i}kwtkyR+sVtfsP`RaM%wF;MU-W0cZi}}X?&G$ zLNgUy(9_1Jr5>Yr(X&$KE4S<1(D6lQ-t~^W?RY zL`dQhO?o@Ub30y0x5(d3Gp1kCTaIRusZ!gqtyEYAC*gjW*i4gN1=OvAf{1F@sTu2R zj9U>*m$3eAddHEs3-Tnu=^_i(Ouk4(c}BAFHbwBO$wq2g3l-}~vd#;}Cw^fcMRPp) zIFbC^)7nWA6H=U=a5twr#VVs;IRQzhf3|!Pjllg2y$exdx0_(I-=ts5wGFl2gMxU( zI0_y|FQFJKSu;h74kla0WsRn`&@`r5gPht*!T_}ugcY;1vs!4nMhzXGIiZ1+L{XFb z!npnvhpRA`GbxV)mI)HCT)Y58Go8}#k=l}js`J{B(PgW)MDHll+9}N{pVT{|^*#kV z>*pTG6vyln?PploWZiP9%`~%-lI*-6fWu~16V2{axPOHRoZLkH&NA~W?FE;o}d2zGvLgDq-5j5YnEFJX)4Wyf`zmi$BFbi z(N4v^CcTuL>2peMJWl6Kc+mEbhepwFthi1?8C{`&gQxDZM*nX4Y+pFr_jN12L~^xL zBJw*>Y|_=GCVhba58d6|XV8CyUlO>uELn?|pQ1&+#o_l)B;G$xBFHoAEG=oGr2!lk z%Vr8=wPC&1aFH%QOEJ#0Osoh`tn8YQGba>OM%k{r=OtC>c+^pPew zg7)cev$Wu`MtSaJx0BmxGO{j?`|~1`aT~2UK(6g3&Yq74Rh^-g31(e&BdwJ2@&uQR zm-l*>^2PAArsWamvVr#!T-N(EBEhtJm!H-pm^;=aC%AUhoTVDaXAK>BgQWE33aa+w zRVio6Juv)1B>x}iV>qFj?zYOrjhqS5H6(x)x57YxJr04Z%$xTJE+lEeVA!<1>*Fw1oT#`bhmvAlG-4VA6k~1Us;4B;KPq z_k=X*&nA72@A=eBlyQr+4yqudYo73HfgCG0=%yV|+JIw7N_|W~mo)O#y6(uKDg)WH zGALP76#-`nwQG%J*se~0bsfRhn~2wti`RC0$c%Apb%hg(=`Zw!v;QpAnp_f5NF;w2 z-WmCoPGSPI1wKGQ5C6cDm|^pVy%%NOgK{s}_n^H0zN9u-B=4=Epk&T1vd_|nE={fH z7C&mqwBLblN2Yxg|J5+$dn+=4<%{GJ5rQuhoiBZP_sd^QJn>ojhtsskb(+#eZ?;}@ z_T#W0(j*(I{10%AzNH7yr@(+!;M#;&$Z#G+|Ae1q%65E{$oSXruQz{_Xgrjxov2f_ zxyBg$8q|C;*LX1&12wO}SRQ@H&qC_00^@#eRk?*mDeqC+3XL)?y0;oqXr!pNLSvG4 z_e7g0nP^PV7MG|`CK|ofD-(@e?Kg9Un5V5Px50v;9IZMkI96?%gz2}c!f+3DRgg)m z!icGICIk8E5li^~XE;(lKG_IpLpOH^*s;VL*Mf+-B=TwS% zu?W0b$2x%ofvHzs5bSTZpi1t^T0mZPmZ?UHzB@`&M^|xjXxRmyx-`|u)%y+ThLo;lQ}oT% zQ$|>@Ulq*JBGn_)jDTL=4eFzQFI?Y_)Ix&8PNG(Ol}9a8I79sUat{6g6N5s7D+sRC>~V*26p_}!_JEO zdm&`POf37n8dhm2*V%tEU97KG+=xYodys z4Yf0$?-cR8mZUmn!HsRx4X=usX~gLJ8?4C;_0nu;amA)e#IQIuvcyPXL(M5MsC&+NI0V=cs}!u=1ffU^{tL zkU{FI5FfLeQ*I=yK68r2H+w2B!b?ZIU-U?_IRfa@-a$tCF zwpKehOhl+_!}LhiT!!`IM+@9nogb|y+e=>-jU9%s+(zjBAN zQ?7)$V$_3G5d7uUFp{7?5aj$HZKVD)Jx1j&K;$=m8b;#O?gil4_@^-9Rc+Uy$qj+m z+zi7WRj?4{zfNsfh(oZW&7P<|sT=D0Lily`U&BbWn$V&9BnpXY@gmqV?3-?LM;1Zw zyI%GFBBMg9_e-Cl(h`vAmhmeWV?k|C8?Ik$jL=483X!JT4#B4vGx6(u)Dmo{1`3?4 iN|zwjuXGWnDh(LviKR0lToTmB@L8He)F)RS`~M4LTXq@% delta 6319 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 Date: Sun, 17 Jul 2011 10:14:23 -0400 Subject: [PATCH 153/161] Moved the varianteval/tags/DataPoint.java and varianteval/tags/Analysis.java to varianteval/utils. This allows rsync to see these files with the -C option, as tags is some kind of reserved CVS keyword. --- .../gatk/walkers/varianteval/VariantEvalWalker.java | 5 ++--- .../walkers/varianteval/evaluators/CompOverlap.java | 4 ++-- .../walkers/varianteval/evaluators/CountVariants.java | 4 ++-- .../varianteval/evaluators/GenotypeConcordance.java | 4 ++-- .../evaluators/GenotypePhasingEvaluator.java | 7 +++---- .../varianteval/evaluators/IndelLengthHistogram.java | 4 ++-- .../varianteval/evaluators/IndelMetricsByAC.java | 4 ++-- .../varianteval/evaluators/IndelStatistics.java | 4 ++-- .../evaluators/MendelianViolationEvaluator.java | 10 ++-------- .../varianteval/evaluators/PrintMissingComp.java | 4 ++-- .../varianteval/evaluators/SimpleMetricsByAC.java | 7 +++---- .../varianteval/evaluators/ThetaVariantEvaluator.java | 4 ++-- .../varianteval/evaluators/TiTvVariantEvaluator.java | 4 ++-- .../varianteval/evaluators/ValidationReport.java | 5 ++--- .../varianteval/evaluators/VariantQualityScore.java | 4 ++-- .../walkers/varianteval/{tags => util}/Analysis.java | 2 +- .../varianteval/util/AnalysisModuleScanner.java | 2 -- .../walkers/varianteval/{tags => util}/DataPoint.java | 2 +- .../walkers/varianteval/util/VariantEvalUtils.java | 3 --- 19 files changed, 34 insertions(+), 49 deletions(-) rename public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/{tags => util}/Analysis.java (80%) rename public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/{tags => util}/DataPoint.java (77%) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java index 15d808ebe..c9c5e09a8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java @@ -20,7 +20,7 @@ import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.gatk.walkers.Window; import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.VariantEvaluator; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.Tranche; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibrator; @@ -30,10 +30,9 @@ import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; -import net.sf.picard.reference.FastaSequenceFile; import net.sf.picard.reference.IndexedFastaSequenceFile; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import net.sf.picard.reference.ReferenceSequence; + import java.io.FileNotFoundException; import java.io.File; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java index 76db330ed..85373baa8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; /** * The Broad Institute diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java index c4277adc9..befb2ff13 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; @Analysis(description = "Counts different classes of variants in the sample") diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java index 4b56cf130..58803c9d0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java index 3d14dd0e5..407b71893 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java @@ -1,6 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -9,10 +10,8 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.phasing.AllelePair; import org.broadinstitute.sting.gatk.walkers.phasing.ReadBackedPhasingWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.NewEvaluationContext; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.MathUtils; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java index 5daf33a9f..f7f9fce0c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java @@ -1,11 +1,11 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java index eca6c5193..dd4bb492e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java index 48b06d532..1bd420e0a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.IndelUtils; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java index 85e0b5889..16ec74433 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java @@ -1,22 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.MendelianViolation; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Mendelian violation detection and counting *

diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java index 7d54d0df8..e83914ef8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java @@ -24,12 +24,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; @Analysis(name = "PrintMissingComp", description = "the overlap between eval and comp sites") public class PrintMissingComp extends VariantEvaluator { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java index deed05508..395309975 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; @@ -8,11 +9,9 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.Degeneracy; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.Sample; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.StateKey; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import java.util.ArrayList; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java index 89c67cfe9..f9cda5e0b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java index 8811dc001..deeafd851 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.BaseUtils; @Analysis(description = "Ti/Tv Variant Evaluator") diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java index 405f35635..756427581 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java @@ -1,14 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java index 4af14810b..29a61e27a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java @@ -25,14 +25,14 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.collections.Pair; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/Analysis.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/Analysis.java similarity index 80% rename from public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/Analysis.java rename to public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/Analysis.java index 129d5a95d..2b37ce210 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/Analysis.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/Analysis.java @@ -1,4 +1,4 @@ -package org.broadinstitute.sting.gatk.walkers.varianteval.tags; +package org.broadinstitute.sting.gatk.walkers.varianteval.util; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/AnalysisModuleScanner.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/AnalysisModuleScanner.java index c8d917040..db44e9e28 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/AnalysisModuleScanner.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/AnalysisModuleScanner.java @@ -23,8 +23,6 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.util; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.lang.annotation.Annotation; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/DataPoint.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/DataPoint.java similarity index 77% rename from public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/DataPoint.java rename to public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/DataPoint.java index 3ba448049..396843252 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/tags/DataPoint.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/DataPoint.java @@ -1,4 +1,4 @@ -package org.broadinstitute.sting.gatk.walkers.varianteval.tags; +package org.broadinstitute.sting.gatk.walkers.varianteval.util; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java index b8e45e462..eabd2e588 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java @@ -7,15 +7,12 @@ import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.report.GATKReport; import org.broadinstitute.sting.gatk.report.GATKReportTable; -import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.StandardEval; import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.VariantEvaluator; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.RequiredStratification; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.StandardStratification; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.tags.DataPoint; import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; From a5bfcb1ed9f4ee0f5a94a744bd9e31bbd8d254a2 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 17 Jul 2011 10:25:34 -0400 Subject: [PATCH 154/161] V15 is broken. Going up to v16 in a second. --- .../{tribble-14.jar => tribble-15.jar} | Bin 286358 -> 286159 bytes .../{tribble-14.xml => tribble-15.xml} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename settings/repository/org.broad/{tribble-14.jar => tribble-15.jar} (89%) rename settings/repository/org.broad/{tribble-14.xml => tribble-15.xml} (59%) diff --git a/settings/repository/org.broad/tribble-14.jar b/settings/repository/org.broad/tribble-15.jar similarity index 89% rename from settings/repository/org.broad/tribble-14.jar rename to settings/repository/org.broad/tribble-15.jar index a0313df326217a5b1820cd7e7d6c029c8129e326..4e89047f49d774453a2ae61d036a21a7d4270d09 100644 GIT binary patch delta 12091 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 RVUZBM%8lWU30VjS{ePbyo$&ww delta 12360 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 z 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 diff --git a/settings/repository/org.broad/tribble-14.xml b/settings/repository/org.broad/tribble-15.xml similarity index 59% rename from settings/repository/org.broad/tribble-14.xml rename to settings/repository/org.broad/tribble-15.xml index f2116324a..e23eec339 100644 --- a/settings/repository/org.broad/tribble-14.xml +++ b/settings/repository/org.broad/tribble-15.xml @@ -1,4 +1,4 @@ - From 1af76736b9dc41da345df90648ec5d74ade03f70 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Sun, 17 Jul 2011 11:41:34 -0400 Subject: [PATCH 155/161] Guarantees that the list of files will always be in the same order. --- .../src/org/broadinstitute/sting/queue/util/QScriptUtils.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala index 9fb4fa30d..99aaa9474 100644 --- a/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/util/QScriptUtils.scala @@ -31,7 +31,7 @@ object QScriptUtils { for (bam <- fromFile(in).getLines) if (!bam.startsWith("#") && !bam.isEmpty ) list :+= new File(bam.trim()) - list + list.sortWith(_.compareTo(_) < 0) } /** From 4db2b13e9ebd54f832d05f885d7ec8946118fb70 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 17 Jul 2011 13:05:04 -0400 Subject: [PATCH 156/161] Rev tribble. Just added more documentation for diffEngine and pointer to new wiki: http://www.broadinstitute.org/gsa/wiki/index.php/DiffEngine --- .../gatk/walkers/diffengine/DiffEngine.java | 2 +- .../walkers/diffengine/DiffableReader.java | 15 +++++++++++++++ .../org/broadinstitute/sting/WalkerTest.java | 2 +- settings/repository/org.broad/tribble-15.jar | Bin 286159 -> 0 bytes .../{tribble-15.xml => tribble-16.xml} | 0 5 files changed, 17 insertions(+), 2 deletions(-) delete mode 100644 settings/repository/org.broad/tribble-15.jar rename settings/repository/org.broad/{tribble-15.xml => tribble-16.xml} (100%) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java index 6d85df71d..2f87a900a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffEngine.java @@ -209,7 +209,7 @@ public class DiffEngine { protected void printSummaryReport(List sortedSummaries, SummaryReportParams params ) { GATKReport report = new GATKReport(); final String tableName = "diffences"; - report.addTable(tableName, "Summarized differences between the master and test files.\nSee http://www.broadinstitute.org/gsa/wiki/index.php/DiffObjectsWalker_and_SummarizedDifferences for more information"); + report.addTable(tableName, "Summarized differences between the master and test files.\nSee http://www.broadinstitute.org/gsa/wiki/index.php/DiffEngine for more information"); GATKReportTable table = report.getTable(tableName); table.addPrimaryKey("Difference", true); table.addColumn("NumberOfOccurrences", 0); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java index af5771c55..a117206f1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffableReader.java @@ -39,12 +39,27 @@ import java.io.File; */ public interface DiffableReader { @Ensures("result != null") + /** + * Return the name of this DiffableReader type. For example, the VCF reader returns 'VCF' and the + * bam reader 'BAM' + */ public String getName(); @Ensures("result != null") @Requires("file != null") + /** + * Read up to maxElementsToRead DiffElements from file, and return them. + */ public DiffElement readFromFile(File file, int maxElementsToRead); + /** + * Return true if the file can be read into DiffElement objects with this reader. This should + * be uniquely true/false for all readers, as the system will use the first reader that can read the + * file. This routine should never throw an exception. The VCF reader, for example, looks at the + * first line of the file for the ##format=VCF4.1 header, and the BAM reader for the BAM_MAGIC value + * @param file + * @return + */ @Requires("file != null") public boolean canRead(File file); } diff --git a/public/java/test/org/broadinstitute/sting/WalkerTest.java b/public/java/test/org/broadinstitute/sting/WalkerTest.java index a39fa37fe..22635dfa3 100755 --- a/public/java/test/org/broadinstitute/sting/WalkerTest.java +++ b/public/java/test/org/broadinstitute/sting/WalkerTest.java @@ -75,7 +75,7 @@ public class WalkerTest extends BaseTest { Index indexFromOutputFile = IndexFactory.createIndex(resultFile, new VCFCodec()); Index dynamicIndex = IndexFactory.loadIndex(indexFile.getAbsolutePath()); - if ( ! indexFromOutputFile.equals(dynamicIndex) ) { + if ( ! indexFromOutputFile.equalsIgnoreTimestamp(dynamicIndex) ) { Assert.fail(String.format("Index on disk from indexing on the fly not equal to the index created after the run completed. FileIndex %s vs. on-the-fly %s%n", indexFromOutputFile.getProperties(), dynamicIndex.getProperties())); diff --git a/settings/repository/org.broad/tribble-15.jar b/settings/repository/org.broad/tribble-15.jar deleted file mode 100644 index 4e89047f49d774453a2ae61d036a21a7d4270d09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286159 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 diff --git a/settings/repository/org.broad/tribble-15.xml b/settings/repository/org.broad/tribble-16.xml similarity index 100% rename from settings/repository/org.broad/tribble-15.xml rename to settings/repository/org.broad/tribble-16.xml From 35ec82a467b3e739c98bc700c4765d9f0a0be17a Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 17 Jul 2011 13:08:08 -0400 Subject: [PATCH 157/161] Oops, need this --- settings/repository/org.broad/tribble-16.jar | Bin 0 -> 286215 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 settings/repository/org.broad/tribble-16.jar diff --git a/settings/repository/org.broad/tribble-16.jar b/settings/repository/org.broad/tribble-16.jar new file mode 100644 index 0000000000000000000000000000000000000000..331f28ec34a8d1b63d30a02cd396595e3abe6353 GIT binary patch literal 286215 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 literal 0 HcmV?d00001 From 9ca9cf52aca2fe7bc47c6cc5d7eb527a77c488a6 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 17 Jul 2011 15:38:33 -0400 Subject: [PATCH 158/161] Uncommenting a stray commented test. --- .../walkers/variantutils/CombineVariantsIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java index daaab9425..fb18c6c33 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariantsIntegrationTest.java @@ -119,7 +119,7 @@ public class CombineVariantsIntegrationTest extends WalkerTest { executeTest("combineComplexSites 1:" + new File(file1).getName() + " 2:" + new File(file2).getName() + " args = " + args, spec); } -// @Test public void complexTestFull() { combineComplexSites("", "64b991fd3850f83614518f7d71f0532f"); } + @Test public void complexTestFull() { combineComplexSites("", "64b991fd3850f83614518f7d71f0532f"); } @Test public void complexTestMinimal() { combineComplexSites(" -minimalVCF", "df96cb3beb2dbb5e02f80abec7d3571e"); } @Test public void complexTestSitesOnly() { combineComplexSites(" -sites_only", "f72a178137e25dbe0b931934cdc0079d"); } @Test public void complexTestSitesOnlyMinimal() { combineComplexSites(" -sites_only -minimalVCF", "f704caeaaaed6711943014b847fe381a"); } From 9992c373be8bda5fd4e5999ac3cac36c35e9bb96 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 17 Jul 2011 20:29:58 -0400 Subject: [PATCH 159/161] Optimize imports run on the whole project, public and private. I just got too tired of all of the unused imports floating around. Confirmed that the system builds after the changes. --- .../analyzecovariates/AnalyzeCovariates.java | 11 +++-- .../sting/commandline/Argument.java | 7 +-- .../commandline/ArgumentDefinitionGroup.java | 4 +- .../commandline/ArgumentDefinitions.java | 4 +- .../commandline/ArgumentTypeDescriptor.java | 6 +-- .../sting/commandline/CommandLineProgram.java | 10 +++- .../sting/commandline/CommandLineUtils.java | 10 +++- .../MissingArgumentValueException.java | 2 - .../sting/commandline/ParsingEngine.java | 10 ++-- .../sting/commandline/ParsingMethod.java | 4 +- .../sting/gatk/CommandLineExecutable.java | 21 +++------ .../sting/gatk/CommandLineGATK.java | 10 ++-- .../sting/gatk/GenomeAnalysisEngine.java | 15 ++---- .../sting/gatk/ReadMetrics.java | 9 ++-- .../sting/gatk/ReadProperties.java | 1 - .../sting/gatk/WalkerManager.java | 7 ++- .../arguments/GATKArgumentCollection.java | 11 ++--- .../sting/gatk/contexts/AlignmentContext.java | 6 +-- .../gatk/contexts/AlignmentContextUtils.java | 2 +- .../sting/gatk/contexts/ReferenceContext.java | 9 ++-- .../datasources/providers/AllLocusView.java | 16 +++---- .../providers/LocusReferenceView.java | 11 ++--- .../providers/LocusShardDataProvider.java | 9 ++-- .../gatk/datasources/providers/LocusView.java | 2 +- .../ManagingReferenceOrderedView.java | 2 +- .../providers/ReadReferenceView.java | 3 +- .../providers/ReadShardDataProvider.java | 7 ++- .../gatk/datasources/providers/ReadView.java | 5 +- .../datasources/providers/ReferenceView.java | 18 ++++---- .../datasources/providers/RodLocusView.java | 4 +- .../providers/ShardDataProvider.java | 5 +- .../reads/BAMBlockStartIterator.java | 5 -- .../gatk/datasources/reads/BAMSchedule.java | 7 +-- .../gatk/datasources/reads/BAMScheduler.java | 12 +---- .../gatk/datasources/reads/FilePointer.java | 10 +--- .../gatk/datasources/reads/GATKBAMIndex.java | 14 ++---- .../datasources/reads/GATKBAMIndexData.java | 6 +-- .../datasources/reads/IntervalSharder.java | 11 +---- .../gatk/datasources/reads/LocusShard.java | 3 +- .../datasources/reads/LocusShardStrategy.java | 17 +++---- .../datasources/reads/MonolithicShard.java | 2 +- .../reads/MonolithicShardStrategy.java | 2 +- .../gatk/datasources/reads/ReadShard.java | 14 +++--- .../datasources/reads/ReadShardStrategy.java | 5 +- .../gatk/datasources/reads/SAMDataSource.java | 14 +++--- .../sting/gatk/datasources/reads/Shard.java | 8 +--- .../reads/ShardStrategyFactory.java | 4 +- .../reads/utilities/BAMFileStat.java | 8 ++-- .../reads/utilities/BAMTagRenamer.java | 8 ++-- .../reads/utilities/PrintBGZFBounds.java | 1 - .../reference/ReferenceDataSource.java | 11 ++--- .../gatk/datasources/rmd/ResourcePool.java | 6 +-- .../datasources/sample/SampleDataSource.java | 5 +- .../sting/gatk/examples/CoverageBySample.java | 17 ++++--- .../gatk/examples/GATKPaperGenotyper.java | 4 +- .../sting/gatk/executive/Accumulator.java | 12 ++--- .../executive/HierarchicalMicroScheduler.java | 18 ++++---- .../gatk/executive/LinearMicroScheduler.java | 11 ++--- .../sting/gatk/executive/MicroScheduler.java | 25 +++++----- .../sting/gatk/executive/OutputMergeTask.java | 3 +- .../sting/gatk/executive/ReduceTree.java | 4 +- .../sting/gatk/executive/ShardTraverser.java | 6 +-- .../sting/gatk/executive/TreeReducer.java | 2 +- .../sting/gatk/executive/WindowMaker.java | 19 ++++---- .../sting/gatk/filters/BadCigarFilter.java | 6 ++- .../sting/gatk/filters/BadMateFilter.java | 1 - .../filters/CountingFilteringIterator.java | 13 +++--- .../gatk/filters/DuplicateReadFilter.java | 1 - .../FailsVendorQualityCheckReadFilter.java | 1 - .../sting/gatk/filters/FilterManager.java | 3 -- .../gatk/filters/MalformedReadFilter.java | 2 +- .../filters/MappingQualityReadFilter.java | 1 - .../MappingQualityUnavailableReadFilter.java | 1 - .../gatk/filters/MaxInsertSizeFilter.java | 1 - .../gatk/filters/MaxReadLengthFilter.java | 1 - .../gatk/filters/MissingReadGroupFilter.java | 1 - .../NoOriginalQualityScoresFilter.java | 1 - .../NotPrimaryAlignmentReadFilter.java | 1 - .../sting/gatk/filters/Platform454Filter.java | 2 - .../sting/gatk/filters/PlatformFilter.java | 4 +- .../gatk/filters/PlatformUnitFilter.java | 10 ++-- .../sting/gatk/filters/ReadFilter.java | 1 - .../filters/ReadGroupBlackListFilter.java | 13 +++--- .../sting/gatk/filters/ReadStrandFilter.java | 1 - .../sting/gatk/filters/SampleFilter.java | 3 +- .../gatk/filters/SingleReadGroupFilter.java | 3 +- .../gatk/filters/UnmappedReadFilter.java | 1 - .../sting/gatk/io/DirectOutputTracker.java | 4 +- .../sting/gatk/io/OutputTracker.java | 16 +++---- .../sting/gatk/io/StingSAMFileWriter.java | 2 +- .../gatk/io/ThreadLocalOutputTracker.java | 9 ++-- .../gatk/io/storage/OutputStreamStorage.java | 4 +- .../gatk/io/storage/SAMFileWriterStorage.java | 9 ++-- .../sting/gatk/io/storage/StorageFactory.java | 2 +- .../gatk/io/storage/VCFWriterStorage.java | 19 +++++--- .../OutputStreamArgumentTypeDescriptor.java | 2 +- .../sting/gatk/io/stubs/OutputStreamStub.java | 4 +- .../SAMFileReaderArgumentTypeDescriptor.java | 8 ++-- .../SAMFileWriterArgumentTypeDescriptor.java | 9 ++-- .../gatk/io/stubs/SAMFileWriterStub.java | 15 +++--- .../VCFWriterArgumentTypeDescriptor.java | 7 ++- .../sting/gatk/io/stubs/VCFWriterStub.java | 18 ++++---- .../gatk/iterators/BoundedReadIterator.java | 4 +- .../gatk/iterators/BufferingReadIterator.java | 5 +- .../gatk/iterators/DownsampleIterator.java | 3 +- .../gatk/iterators/GenomeLocusIterator.java | 2 +- .../sting/gatk/iterators/LocusIterator.java | 3 +- .../gatk/iterators/LocusIteratorByState.java | 20 +++++--- .../sting/gatk/iterators/NullSAMIterator.java | 1 - .../iterators/PositionTrackingIterator.java | 1 - .../iterators/ReadFormattingIterator.java | 7 +-- .../gatk/iterators/StingSAMIterator.java | 1 - .../sting/gatk/phonehome/GATKRunReport.java | 5 +- .../sting/gatk/refdata/RODRecordIterator.java | 10 ++-- .../sting/gatk/refdata/RODRecordListImpl.java | 2 +- .../gatk/refdata/RefMetaDataTracker.java | 4 +- .../gatk/refdata/SeekableRODIterator.java | 2 +- .../gatk/refdata/VariantContextAdaptors.java | 12 ++--- .../annotator/AnnotatorInputTableCodec.java | 12 ++--- .../annotator/AnnotatorInputTableFeature.java | 4 +- .../refdata/features/beagle/BeagleCodec.java | 10 ++-- .../features/beagle/BeagleFeature.java | 5 +- .../features/refseq/RefSeqFeature.java | 3 +- .../features/sampileup/SAMPileupCodec.java | 4 +- .../features/sampileup/SAMPileupFeature.java | 3 +- .../features/samread/SAMReadCodec.java | 6 +-- .../refdata/features/table/BedTableCodec.java | 5 -- .../refdata/features/table/TableCodec.java | 6 +-- .../refdata/features/table/TableFeature.java | 2 +- .../gatk/refdata/indexer/RMDIndexer.java | 1 - .../gatk/refdata/tracks/QueryableTrack.java | 1 - .../sting/gatk/refdata/tracks/RMDTrack.java | 2 - .../tracks/builders/RMDTrackBuilder.java | 8 ++-- .../utils/FeatureToGATKFeatureIterator.java | 2 - .../sting/gatk/refdata/utils/GATKFeature.java | 2 - .../LocationAwareSeekableRODIterator.java | 4 -- .../StringToGenomeLocIteratorAdapter.java | 2 +- .../refdata/utils/helpers/DbSNPHelper.java | 2 +- .../gatk/traversals/TraversalEngine.java | 9 ++-- .../gatk/traversals/TraverseDuplicates.java | 3 +- .../sting/gatk/traversals/TraverseLoci.java | 1 - .../gatk/traversals/TraverseReadPairs.java | 16 ++++--- .../sting/gatk/traversals/TraverseReads.java | 8 ++-- .../sting/gatk/walkers/Allows.java | 7 +-- .../sting/gatk/walkers/BAQMode.java | 7 +-- .../broadinstitute/sting/gatk/walkers/By.java | 7 +-- .../sting/gatk/walkers/ClipReadsWalker.java | 26 +++++------ .../sting/gatk/walkers/DuplicateWalker.java | 7 +-- .../walkers/FindReadsWithNamesWalker.java | 1 - .../sting/gatk/walkers/FlagStatWalker.java | 6 +-- .../walkers/GCContentByIntervalWalker.java | 3 +- .../sting/gatk/walkers/LocusWalker.java | 7 ++- .../sting/gatk/walkers/PileupWalker.java | 8 ++-- .../sting/gatk/walkers/PrintRODsWalker.java | 4 +- .../sting/gatk/walkers/PrintReadsWalker.java | 6 +-- .../sting/gatk/walkers/ReadWalker.java | 2 +- .../sting/gatk/walkers/Requires.java | 7 +-- .../gatk/walkers/SplitSamFileWalker.java | 18 +++++--- .../sting/gatk/walkers/Walker.java | 6 +-- .../sting/gatk/walkers/WalkerName.java | 6 +-- .../sting/gatk/walkers/Window.java | 5 +- .../gatk/walkers/annotator/AlleleBalance.java | 16 +++---- .../annotator/AlleleBalanceBySample.java | 14 ++++-- .../walkers/annotator/AnnotationByDepth.java | 3 +- .../gatk/walkers/annotator/BaseCounts.java | 12 ++--- .../annotator/BaseQualityRankSumTest.java | 8 ++-- .../walkers/annotator/ChromosomeCounts.java | 20 ++++---- .../walkers/annotator/DepthOfCoverage.java | 15 +++--- .../annotator/DepthPerAlleleBySample.java | 19 ++++---- .../gatk/walkers/annotator/FisherStrand.java | 14 +++--- .../gatk/walkers/annotator/GCContent.java | 13 +++--- .../sting/gatk/walkers/annotator/GLstats.java | 15 +++--- .../walkers/annotator/HaplotypeScore.java | 32 +++++++------ .../gatk/walkers/annotator/HardyWeinberg.java | 15 +++--- .../walkers/annotator/HomopolymerRun.java | 10 ++-- .../gatk/walkers/annotator/IndelType.java | 6 +-- .../sting/gatk/walkers/annotator/LowMQ.java | 12 ++--- .../annotator/MappingQualityRankSumTest.java | 8 ++-- .../walkers/annotator/MappingQualityZero.java | 8 ++-- .../annotator/MappingQualityZeroBySample.java | 20 ++++---- .../annotator/MappingQualityZeroFraction.java | 6 +-- .../gatk/walkers/annotator/NBaseCount.java | 6 +-- .../gatk/walkers/annotator/QualByDepth.java | 12 ++--- .../walkers/annotator/RMSMappingQuality.java | 15 +++--- .../gatk/walkers/annotator/RankSumTest.java | 15 +++--- .../ReadDepthAndAllelicFractionBySample.java | 21 ++++----- .../walkers/annotator/ReadPosRankSumTest.java | 11 +++-- .../gatk/walkers/annotator/SBByDepth.java | 10 ++-- .../gatk/walkers/annotator/SampleList.java | 10 ++-- .../walkers/annotator/SpanningDeletions.java | 6 +-- .../annotator/TechnologyComposition.java | 6 ++- .../walkers/annotator/VariantAnnotator.java | 13 +++--- .../annotator/VariantAnnotatorEngine.java | 31 ++++++------- .../genomicannotator/GenomicAnnotation.java | 14 +++--- .../genomicannotator/GenomicAnnotator.java | 22 ++++----- .../annotator/genomicannotator/JoinTable.java | 6 +-- .../genomicannotator/JoinTableParser.java | 8 ++-- .../TranscriptToGenomicInfo.java | 15 ++---- .../interfaces/GenotypeAnnotation.java | 10 ++-- .../interfaces/InfoFieldAnnotation.java | 8 ++-- .../beagle/BeagleOutputToVCFWalker.java | 14 +++--- .../beagle/ProduceBeagleInputWalker.java | 13 +++--- .../VariantsToBeagleUnphasedWalker.java | 19 ++++---- .../walkers/coverage/CallableLociWalker.java | 6 +-- .../coverage/CoarseCoverageWalker.java | 7 ++- .../coverage/CompareCallableLociWalker.java | 10 ++-- .../gatk/walkers/coverage/CoverageUtils.java | 4 +- .../coverage/DepthOfCoverageWalker.java | 11 +++-- .../walkers/diffengine/BAMDiffableReader.java | 13 ++---- .../gatk/walkers/diffengine/DiffElement.java | 4 +- .../gatk/walkers/diffengine/DiffValue.java | 2 - .../walkers/diffengine/VCFDiffableReader.java | 5 +- .../fasta/FastaAlternateReferenceWalker.java | 2 +- .../walkers/fasta/FastaReferenceWalker.java | 5 +- .../gatk/walkers/filters/ClusteredSnps.java | 2 +- .../walkers/filters/FiltrationContext.java | 2 +- .../filters/FiltrationContextWindow.java | 4 +- .../filters/VariantFiltrationWalker.java | 13 +++--- .../AlleleFrequencyCalculationModel.java | 7 +-- .../genotyper/DiploidIndelGenotypePriors.java | 2 - .../DiploidSNPGenotypeLikelihoods.java | 11 +++-- .../genotyper/ExactAFCalculationModel.java | 15 ++++-- .../GenotypeLikelihoodsCalculationModel.java | 2 +- .../genotyper/GridSearchAFEstimation.java | 10 ++-- ...elGenotypeLikelihoodsCalculationModel.java | 11 ++--- .../MultiallelicGenotypeLikelihoods.java | 2 +- ...NPGenotypeLikelihoodsCalculationModel.java | 18 ++++---- .../walkers/genotyper/UGCalcLikelihoods.java | 8 ++-- .../walkers/genotyper/UGCallVariants.java | 8 ++-- .../genotyper/UnifiedArgumentCollection.java | 1 - .../walkers/genotyper/UnifiedGenotyper.java | 19 ++++---- .../genotyper/UnifiedGenotyperEngine.java | 16 ++++--- .../indels/ConstrainedMateFixingManager.java | 6 ++- .../indels/HaplotypeIndelErrorModel.java | 7 +-- .../gatk/walkers/indels/IndelRealigner.java | 38 +++++++-------- .../gatk/walkers/indels/LeftAlignIndels.java | 6 ++- .../indels/PairHMMIndelErrorModel.java | 27 +++++------ .../walkers/indels/RealignedReadCounter.java | 24 ++++++---- .../indels/RealignerTargetCreator.java | 12 ++--- ...CoordinateComparatorWithUnmappedReads.java | 3 +- .../indels/SomaticIndelDetectorWalker.java | 46 +++++++++++-------- .../gatk/walkers/phasing/AllelePair.java | 2 +- .../walkers/phasing/AnnotateMNPsWalker.java | 9 ++-- .../gatk/walkers/phasing/MergeMNPsWalker.java | 8 ++-- ...eSegregatingAlternateAllelesVCFWriter.java | 15 +++--- ...ergeSegregatingAlternateAllelesWalker.java | 10 ++-- .../phasing/ReadBackedPhasingWalker.java | 21 +++++---- .../gatk/walkers/phasing/SNPallelePair.java | 4 +- .../sting/gatk/walkers/phasing/WriteVCF.java | 2 +- .../sting/gatk/walkers/qc/CountIntervals.java | 4 +- .../gatk/walkers/qc/CountLociWalker.java | 1 - .../gatk/walkers/qc/CountPairsWalker.java | 6 +-- .../gatk/walkers/qc/CountReadsWalker.java | 4 +- .../gatk/walkers/qc/CountRodByRefWalker.java | 2 +- .../sting/gatk/walkers/qc/CountRodWalker.java | 11 +++-- .../gatk/walkers/qc/CycleQualityWalker.java | 24 +++++----- .../walkers/qc/PrintLocusContextWalker.java | 12 ++--- .../walkers/qc/ReadClippingStatsWalker.java | 27 ++++++----- .../gatk/walkers/qc/ReadValidationWalker.java | 8 ++-- .../walkers/qc/RodSystemValidationWalker.java | 6 ++- .../walkers/qc/ValidatingPileupWalker.java | 8 ++-- .../CountCovariatesGatherer.java | 1 - .../recalibration/CountCovariatesWalker.java | 13 +++--- .../walkers/recalibration/CycleCovariate.java | 1 - .../walkers/recalibration/DinucCovariate.java | 5 +- .../recalibration/RecalDataManager.java | 18 ++++---- .../recalibration/RecalDatumOptimized.java | 2 +- .../TableRecalibrationWalker.java | 30 ++++++------ .../walkers/sequenom/CreateSequenomMask.java | 4 +- .../walkers/sequenom/PickSequenomProbes.java | 18 ++++---- .../varianteval/VariantEvalWalker.java | 17 +++---- .../evaluators/CompEvalGenotypes.java | 2 +- .../varianteval/evaluators/CompOverlap.java | 6 +-- .../varianteval/evaluators/CountVariants.java | 8 ++-- .../evaluators/GenotypeConcordance.java | 12 ++--- .../evaluators/GenotypePhasingEvaluator.java | 7 +-- .../evaluators/IndelLengthHistogram.java | 8 ++-- .../evaluators/IndelMetricsByAC.java | 6 +-- .../evaluators/IndelStatistics.java | 8 ++-- .../MendelianViolationEvaluator.java | 8 ++-- .../evaluators/PrintMissingComp.java | 6 +-- .../evaluators/SamplePreviousGenotypes.java | 2 +- .../evaluators/SimpleMetricsByAC.java | 7 +-- .../evaluators/ThetaVariantEvaluator.java | 6 +-- .../evaluators/TiTvVariantEvaluator.java | 8 ++-- .../evaluators/ValidationReport.java | 12 ++--- .../evaluators/VariantEvaluator.java | 2 +- .../evaluators/VariantQualityScore.java | 10 ++-- .../stratifications/AlleleCount.java | 5 +- .../stratifications/AlleleFrequency.java | 2 +- .../varianteval/stratifications/CompRod.java | 2 +- .../varianteval/stratifications/Contig.java | 2 +- .../varianteval/stratifications/CpG.java | 2 +- .../stratifications/Degeneracy.java | 4 +- .../varianteval/stratifications/EvalRod.java | 2 +- .../varianteval/stratifications/Filter.java | 2 +- .../stratifications/FunctionalClass.java | 2 +- .../stratifications/JexlExpression.java | 4 +- .../varianteval/stratifications/Novelty.java | 2 +- .../varianteval/stratifications/Sample.java | 2 +- .../stratifications/VariantStratifier.java | 3 +- .../util/NewEvaluationContext.java | 2 +- .../util/SortableJexlVCMatchExp.java | 2 +- .../varianteval/util/VariantEvalUtils.java | 4 +- .../ApplyRecalibration.java | 12 ++--- .../walkers/variantrecalibration/Tranche.java | 7 ++- .../VQSRCalibrationCurve.java | 2 +- .../VariantDataManager.java | 6 ++- .../VariantRecalibrator.java | 4 +- .../walkers/variantutils/CombineVariants.java | 13 +++--- .../variantutils/FilterLiftedVariants.java | 19 ++++---- .../variantutils/LeftAlignVariants.java | 12 ++--- .../variantutils/LiftoverVariants.java | 32 ++++++------- .../variantutils/RandomlySplitVariants.java | 13 +++--- .../walkers/variantutils/SelectVariants.java | 19 ++++---- .../variantutils/ValidateVariants.java | 21 +++++---- .../VariantValidationAssessor.java | 13 +++--- .../walkers/variantutils/VariantsToTable.java | 5 +- .../walkers/variantutils/VariantsToVCF.java | 24 +++++----- .../sting/jna/clibrary/LibC.java | 5 +- .../sting/jna/lsf/v7_0_6/LibLsf.java | 2 +- .../gatk/ArgumentDefinitionField.java | 7 ++- .../queue/extensions/gatk/ArgumentField.java | 5 +- .../gatk/GATKExtensionsGenerator.java | 7 ++- .../sting/utils/DisjointSet.java | 4 +- .../broadinstitute/sting/utils/GenomeLoc.java | 1 - .../sting/utils/GenomeLocParser.java | 6 ++- .../sting/utils/IndelUtils.java | 2 +- .../broadinstitute/sting/utils/MathUtils.java | 9 ++-- .../sting/utils/MendelianViolation.java | 7 +-- .../broadinstitute/sting/utils/PathUtils.java | 4 +- .../sting/utils/ReservoirDownsampler.java | 4 +- .../sting/utils/SWPairwiseAlignment.java | 7 ++- .../sting/utils/SampleUtils.java | 6 +-- .../sting/utils/SimpleTimer.java | 5 +- .../org/broadinstitute/sting/utils/Utils.java | 5 +- .../broadinstitute/sting/utils/baq/BAQ.java | 6 +-- .../sting/utils/baq/BAQSamIterator.java | 5 +- .../sting/utils/bed/BedParser.java | 5 +- .../sting/utils/classloader/JVMUtils.java | 2 +- .../sting/utils/clipreads/ClippingOp.java | 3 -- .../sting/utils/clipreads/ReadClipper.java | 1 - .../codecs/completegenomics/CGVarCodec.java | 1 - .../utils/codecs/soapsnp/SoapSNPCodec.java | 6 +-- .../utils/codecs/vcf/StandardVCFWriter.java | 4 +- .../sting/utils/codecs/vcf/VCFParser.java | 4 +- .../sting/utils/codecs/vcf/VCFUtils.java | 4 +- .../utils/collections/NestedHashMap.java | 3 +- .../utils/collections/RODMergingIterator.java | 7 ++- .../sting/utils/duplicates/DupUtils.java | 9 ++-- .../sting/utils/exceptions/UserException.java | 3 +- .../CachingIndexedFastaSequenceFile.java | 7 +-- .../sting/utils/genotype/DiploidGenotype.java | 1 - .../sting/utils/genotype/Haplotype.java | 8 ++-- .../sting/utils/help/ApplicationDetails.java | 8 ++-- .../sting/utils/help/DescriptionTaglet.java | 1 - .../sting/utils/help/DisplayNameTaglet.java | 1 - .../sting/utils/help/HelpFormatter.java | 12 ++--- .../sting/utils/help/HelpTaglet.java | 4 +- .../help/ResourceBundleExtractorDoclet.java | 14 +++--- .../sting/utils/help/SummaryTaglet.java | 1 - .../sting/utils/instrumentation/Sizeof.java | 2 +- .../interval/IntervalFileMergingIterator.java | 6 +-- .../sting/utils/interval/IntervalUtils.java | 4 +- .../interval/NwayIntervalMergingIterator.java | 3 +- .../interval/OverlappingIntervalIterator.java | 3 +- .../pileup/AbstractReadBackedPileup.java | 11 ++--- .../pileup/ExtendedEventPileupElement.java | 3 -- .../sting/utils/pileup/FragmentPileup.java | 5 +- .../pileup/MergingPileupElementIterator.java | 2 +- .../sting/utils/pileup/PileupElement.java | 5 +- .../pileup/ReadBackedExtendedEventPileup.java | 6 +-- .../ReadBackedExtendedEventPileupImpl.java | 5 +- .../sting/utils/pileup/ReadBackedPileup.java | 5 +- .../utils/pileup/ReadBackedPileupImpl.java | 2 +- .../sting/utils/sam/AlignmentUtils.java | 9 ++-- .../utils/sam/ArtificialReadsTraversal.java | 16 +++---- .../utils/sam/ArtificialSAMFileReader.java | 16 ++++--- .../utils/sam/ArtificialSAMIterator.java | 5 +- .../utils/sam/ArtificialSAMQueryIterator.java | 5 +- .../sting/utils/sam/ComparableSAMRecord.java | 2 - .../utils/sam/GATKSAMReadGroupRecord.java | 2 +- .../sting/utils/sam/GATKSAMRecord.java | 8 ++-- .../sting/utils/sam/ReadUtils.java | 5 +- .../sting/utils/sam/SAMFileReaderBuilder.java | 3 +- .../utils/sam/SimplifyingSAMFileWriter.java | 7 --- .../sting/utils/text/ListFileUtils.java | 1 - .../sting/utils/text/TextFormattingUtils.java | 8 ++-- .../sting/utils/text/XReadLines.java | 6 +-- .../FileBackedGenomeLocProcessingTracker.java | 4 -- .../NoOpGenomeLocProcessingTracker.java | 4 -- .../sting/utils/threading/SharedFileLock.java | 3 -- .../threading/SharedFileThreadSafeLock.java | 5 -- .../sting/utils/variantcontext/Allele.java | 4 +- .../variantcontext/GenotypeLikelihoods.java | 2 +- .../variantcontext/MutableVariantContext.java | 5 +- .../utils/variantcontext/VariantContext.java | 2 +- .../variantcontext/VariantContextUtils.java | 19 +++++--- .../variantcontext/VariantJEXLContext.java | 5 +- .../sting/utils/wiggle/WiggleWriter.java | 2 +- 400 files changed, 1480 insertions(+), 1602 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java b/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java index f8e298d88..b9e380295 100755 --- a/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java +++ b/public/java/src/org/broadinstitute/sting/analyzecovariates/AnalyzeCovariates.java @@ -25,20 +25,21 @@ package org.broadinstitute.sting.analyzecovariates; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.commandline.Input; -import org.broadinstitute.sting.gatk.walkers.recalibration.*; +import org.broadinstitute.sting.gatk.walkers.recalibration.Covariate; +import org.broadinstitute.sting.gatk.walkers.recalibration.RecalDatum; +import org.broadinstitute.sting.gatk.walkers.recalibration.RecalibrationArgumentCollection; import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.commandline.CommandLineProgram; -import org.broadinstitute.sting.commandline.Argument; +import java.io.*; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import java.io.*; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/commandline/Argument.java b/public/java/src/org/broadinstitute/sting/commandline/Argument.java index b2ee9d1fc..33592287d 100755 --- a/public/java/src/org/broadinstitute/sting/commandline/Argument.java +++ b/public/java/src/org/broadinstitute/sting/commandline/Argument.java @@ -25,12 +25,7 @@ package org.broadinstitute.sting.commandline; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitionGroup.java b/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitionGroup.java index c36a8e04f..b47677b08 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitionGroup.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitionGroup.java @@ -27,10 +27,10 @@ package org.broadinstitute.sting.commandline; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.List; -import java.util.Collections; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; +import java.util.List; /** * A group of argument definitions. diff --git a/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitions.java b/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitions.java index 39e698ca3..9f92df6e0 100755 --- a/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitions.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ArgumentDefinitions.java @@ -27,10 +27,10 @@ package org.broadinstitute.sting.commandline; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.Set; -import java.util.HashSet; import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; +import java.util.Set; /** * A collection of argument definitions. diff --git a/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java index 6c50e1784..9c33e084d 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java @@ -25,12 +25,12 @@ package org.broadinstitute.sting.commandline; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.walkers.Multiplex; import org.broadinstitute.sting.gatk.walkers.Multiplexer; -import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.classloader.JVMUtils; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.lang.annotation.Annotation; diff --git a/public/java/src/org/broadinstitute/sting/commandline/CommandLineProgram.java b/public/java/src/org/broadinstitute/sting/commandline/CommandLineProgram.java index d404a2b6e..aba4fc109 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/CommandLineProgram.java +++ b/public/java/src/org/broadinstitute/sting/commandline/CommandLineProgram.java @@ -25,14 +25,20 @@ package org.broadinstitute.sting.commandline; -import org.apache.log4j.*; +import org.apache.log4j.FileAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; import org.broadinstitute.sting.gatk.CommandLineGATK; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.help.ApplicationDetails; import org.broadinstitute.sting.utils.help.HelpFormatter; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Locale; public abstract class CommandLineProgram { diff --git a/public/java/src/org/broadinstitute/sting/commandline/CommandLineUtils.java b/public/java/src/org/broadinstitute/sting/commandline/CommandLineUtils.java index 99608f167..bd2006388 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/CommandLineUtils.java +++ b/public/java/src/org/broadinstitute/sting/commandline/CommandLineUtils.java @@ -25,11 +25,17 @@ package org.broadinstitute.sting.commandline; -import org.apache.log4j.*; +import org.apache.log4j.Appender; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; import java.lang.annotation.Annotation; +import java.util.Collections; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.Map; /** * Static utility methods for working with command-line arguments. diff --git a/public/java/src/org/broadinstitute/sting/commandline/MissingArgumentValueException.java b/public/java/src/org/broadinstitute/sting/commandline/MissingArgumentValueException.java index 8029db7b3..4e6c3a16f 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/MissingArgumentValueException.java +++ b/public/java/src/org/broadinstitute/sting/commandline/MissingArgumentValueException.java @@ -26,8 +26,6 @@ package org.broadinstitute.sting.commandline; import org.broadinstitute.sting.utils.Utils; -import java.util.Collection; - /** * Specifies that a value was missing when attempting to populate an argument. */ diff --git a/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java b/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java index 717c5c522..8423bb2f2 100755 --- a/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java @@ -25,16 +25,16 @@ package org.broadinstitute.sting.commandline; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.help.ApplicationDetails; import org.broadinstitute.sting.utils.help.HelpFormatter; -import org.apache.log4j.Logger; -import java.lang.reflect.*; +import java.lang.reflect.Field; import java.util.*; /** diff --git a/public/java/src/org/broadinstitute/sting/commandline/ParsingMethod.java b/public/java/src/org/broadinstitute/sting/commandline/ParsingMethod.java index d1cda3ed9..a070cb5a1 100755 --- a/public/java/src/org/broadinstitute/sting/commandline/ParsingMethod.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ParsingMethod.java @@ -27,10 +27,8 @@ package org.broadinstitute.sting.commandline; import org.broadinstitute.sting.utils.Utils; -import java.util.regex.Pattern; import java.util.regex.Matcher; -import java.util.List; -import java.util.ArrayList; +import java.util.regex.Pattern; /** * Holds a pattern, along with how to get to the argument definitions that could match that pattern. diff --git a/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java b/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java index fd7e749c3..a080ab439 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java +++ b/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java @@ -25,30 +25,21 @@ package org.broadinstitute.sting.gatk; -import org.broadinstitute.sting.commandline.Tags; -import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; -import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; -import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; +import org.broadinstitute.sting.commandline.CommandLineProgram; +import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.VCFWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.phonehome.GATKRunReport; -import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; -import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType; -import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.Walker; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.*; - -import net.sf.picard.filter.SamRecordFilter; -import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.ListFileUtils; -import org.broadinstitute.sting.utils.text.XReadLines; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; /** * @author aaron diff --git a/public/java/src/org/broadinstitute/sting/gatk/CommandLineGATK.java b/public/java/src/org/broadinstitute/sting/gatk/CommandLineGATK.java index 7982f61e2..da2be74bf 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/CommandLineGATK.java +++ b/public/java/src/org/broadinstitute/sting/gatk/CommandLineGATK.java @@ -26,13 +26,15 @@ package org.broadinstitute.sting.gatk; import org.broad.tribble.TribbleException; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.ArgumentCollection; +import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.walkers.Attribution; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.text.TextFormattingUtils; -import org.broadinstitute.sting.utils.help.ApplicationDetails; -import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.help.ApplicationDetails; +import org.broadinstitute.sting.utils.text.TextFormattingUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index f8527c33b..918bc1251 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -28,24 +28,14 @@ import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.samtools.*; import org.apache.log4j.Logger; -import org.broadinstitute.sting.commandline.ArgumentException; -import org.broadinstitute.sting.commandline.ArgumentSource; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.commandline.CommandLineUtils; -import org.broadinstitute.sting.commandline.ParsingEngine; -import org.broadinstitute.sting.commandline.Tags; +import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; -import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; -import org.broadinstitute.sting.gatk.datasources.reads.Shard; +import org.broadinstitute.sting.gatk.datasources.reads.*; import org.broadinstitute.sting.gatk.datasources.reference.ReferenceDataSource; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; -import org.broadinstitute.sting.gatk.datasources.reads.MonolithicShardStrategy; -import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategy; -import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategyFactory; -import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; import org.broadinstitute.sting.gatk.executive.MicroScheduler; import org.broadinstitute.sting.gatk.filters.FilterManager; import org.broadinstitute.sting.gatk.filters.ReadFilter; @@ -65,6 +55,7 @@ import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.interval.IntervalUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/ReadMetrics.java b/public/java/src/org/broadinstitute/sting/gatk/ReadMetrics.java index 27a86ab3f..7cb615f7f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/ReadMetrics.java +++ b/public/java/src/org/broadinstitute/sting/gatk/ReadMetrics.java @@ -25,13 +25,12 @@ package org.broadinstitute.sting.gatk; import net.sf.picard.filter.SamRecordFilter; - -import java.util.Map; -import java.util.HashMap; -import java.util.Collections; - import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + /** * Holds a bunch of basic information about the traversal. */ diff --git a/public/java/src/org/broadinstitute/sting/gatk/ReadProperties.java b/public/java/src/org/broadinstitute/sting/gatk/ReadProperties.java index 1a361029a..93fa2d146 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/ReadProperties.java +++ b/public/java/src/org/broadinstitute/sting/gatk/ReadProperties.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk; -import net.sf.picard.filter.SamRecordFilter; import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileReader; diff --git a/public/java/src/org/broadinstitute/sting/gatk/WalkerManager.java b/public/java/src/org/broadinstitute/sting/gatk/WalkerManager.java index 9553f651e..cf190835e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/WalkerManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/WalkerManager.java @@ -25,19 +25,18 @@ package org.broadinstitute.sting.gatk; -import net.sf.picard.filter.SamRecordFilter; import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.filters.FilterManager; import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.classloader.PluginManager; -import org.broadinstitute.sting.utils.text.TextFormattingUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.help.DescriptionTaglet; import org.broadinstitute.sting.utils.help.DisplayNameTaglet; import org.broadinstitute.sting.utils.help.SummaryTaglet; -import org.broadinstitute.sting.utils.baq.BAQ; +import org.broadinstitute.sting.utils.text.TextFormattingUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/arguments/GATKArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/arguments/GATKArgumentCollection.java index 93638f21d..ee2e85025 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/arguments/GATKArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/arguments/GATKArgumentCollection.java @@ -26,17 +26,16 @@ package org.broadinstitute.sting.gatk.arguments; import net.sf.samtools.SAMFileReader; -import org.broadinstitute.sting.commandline.Hidden; -import org.broadinstitute.sting.gatk.phonehome.GATKRunReport; -import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.interval.IntervalMergingRule; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Input; import org.broadinstitute.sting.gatk.DownsampleType; import org.broadinstitute.sting.gatk.DownsamplingMethod; -import org.broadinstitute.sting.utils.interval.IntervalSetRule; +import org.broadinstitute.sting.gatk.phonehome.GATKRunReport; import org.broadinstitute.sting.utils.baq.BAQ; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.interval.IntervalMergingRule; +import org.broadinstitute.sting.utils.interval.IntervalSetRule; import org.simpleframework.xml.*; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.stream.Format; diff --git a/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContext.java b/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContext.java index 337c2664c..17e4a0743 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContext.java +++ b/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContext.java @@ -26,13 +26,13 @@ package org.broadinstitute.sting.gatk.contexts; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.HasGenomeLocation; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import java.util.*; +import java.util.List; /** * Useful class for forwarding on locusContext data from this iterator diff --git a/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContextUtils.java b/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContextUtils.java index 6a0d30837..1f9a7d705 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContextUtils.java +++ b/public/java/src/org/broadinstitute/sting/gatk/contexts/AlignmentContextUtils.java @@ -27,8 +27,8 @@ package org.broadinstitute.sting.gatk.contexts; import net.sf.samtools.SAMReadGroupRecord; import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java b/public/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java index 760b3a7bc..376064cdb 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java +++ b/public/java/src/org/broadinstitute/sting/gatk/contexts/ReferenceContext.java @@ -25,11 +25,12 @@ package org.broadinstitute.sting.gatk.contexts; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.BaseUtils; +import com.google.java.contract.Ensures; +import com.google.java.contract.Requires; import net.sf.samtools.util.StringUtil; -import com.google.java.contract.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; /** * The section of the reference that overlaps with the given diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java index b36c59a2c..e92599494 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/AllLocusView.java @@ -1,16 +1,14 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.iterators.GenomeLocusIterator; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; + +import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; -import java.util.ArrayList; -import java.util.Collections; - -import org.broadinstitute.sting.gatk.iterators.GenomeLocusIterator; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.utils.GenomeLoc; -import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; /** * User: hanna * Date: May 13, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java index 330a9e4f7..ff312bcac 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusReferenceView.java @@ -1,13 +1,12 @@ package org.broadinstitute.sting.gatk.datasources.providers; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; +import net.sf.picard.reference.ReferenceSequence; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.walkers.Reference; import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.gatk.walkers.Window; -import org.broadinstitute.sting.gatk.walkers.Reference; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import net.sf.picard.reference.ReferenceSequence; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; /* * Copyright (c) 2009 The Broad Institute * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusShardDataProvider.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusShardDataProvider.java index 72b962522..55304da34 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusShardDataProvider.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusShardDataProvider.java @@ -1,16 +1,15 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.iterators.LocusIterator; -import org.broadinstitute.sting.gatk.ReadProperties; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; import java.util.Collection; -import net.sf.picard.reference.IndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.GenomeLocParser; - /** * Presents data sharded by locus to the traversal engine. * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusView.java index b467a2ab5..f9ed0cb74 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/LocusView.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.gatk.datasources.providers; -import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.DownsampleType; +import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.iterators.LocusIterator; import org.broadinstitute.sting.utils.GenomeLoc; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java index a91e169c1..223659a46 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java @@ -5,10 +5,10 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; import org.broadinstitute.sting.utils.GenomeLoc; -import java.util.List; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; /** * User: hanna * Date: May 21, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java index d2c097f5d..3d62faf49 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadReferenceView.java @@ -1,9 +1,8 @@ package org.broadinstitute.sting.gatk.datasources.providers; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.utils.GenomeLoc; /* * Copyright (c) 2009 The Broad Institute * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadShardDataProvider.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadShardDataProvider.java index 5a672b09f..7843e7518 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadShardDataProvider.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadShardDataProvider.java @@ -1,14 +1,13 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import net.sf.picard.reference.IndexedFastaSequenceFile; import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; +import org.broadinstitute.sting.utils.GenomeLocParser; import java.util.Collection; -import net.sf.picard.reference.IndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.GenomeLocParser; - /** * Present data sharded by read to a traversal engine. * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadView.java index 0c4b78a7c..e809092d4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReadView.java @@ -1,11 +1,10 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import java.util.Collection; import java.util.Arrays; - -import net.sf.samtools.SAMRecord; +import java.util.Collection; /** * User: hanna * Date: May 22, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java index d6c938f36..efb92235f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ReferenceView.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.datasources.providers; -import org.broadinstitute.sting.utils.*; - -import java.util.Collections; -import java.util.Collection; -import java.util.Arrays; - -import net.sf.samtools.SAMSequenceRecord; -import net.sf.samtools.SAMRecord; -import net.sf.picard.reference.ReferenceSequence; import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.picard.reference.ReferenceSequence; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMSequenceRecord; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; /** * User: hanna * Date: May 22, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java index feed2ab85..39c632539 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java @@ -25,9 +25,9 @@ package org.broadinstitute.sting.gatk.datasources.providers; -import org.broadinstitute.sting.gatk.refdata.*; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; import org.broadinstitute.sting.utils.GenomeLoc; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ShardDataProvider.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ShardDataProvider.java index a0ea32f9b..803bd885b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ShardDataProvider.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/providers/ShardDataProvider.java @@ -1,15 +1,14 @@ package org.broadinstitute.sting.gatk.datasources.providers; +import net.sf.picard.reference.IndexedFastaSequenceFile; import org.broadinstitute.sting.gatk.datasources.reads.Shard; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.ArrayList; -import java.util.List; import java.util.Collection; - -import net.sf.picard.reference.IndexedFastaSequenceFile; +import java.util.List; /** * User: hanna * Date: May 8, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMBlockStartIterator.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMBlockStartIterator.java index a9e04e357..de938e845 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMBlockStartIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMBlockStartIterator.java @@ -24,9 +24,6 @@ package org.broadinstitute.sting.gatk.datasources.reads; -import net.sf.samtools.SAMFileReader; -import net.sf.samtools.SAMRecord; -import org.apache.commons.lang.ArrayUtils; import org.broadinstitute.sting.utils.exceptions.StingException; import java.io.File; @@ -35,9 +32,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.FileChannel; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMSchedule.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMSchedule.java index 34693d501..521bcd5a3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMSchedule.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMSchedule.java @@ -39,12 +39,7 @@ import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.FileChannel; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Writes schedules for a single BAM file to a target output file. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMScheduler.java index 266232c0f..467aebac5 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/BAMScheduler.java @@ -26,20 +26,10 @@ package org.broadinstitute.sting.gatk.datasources.reads; import net.sf.picard.util.PeekableIterator; import net.sf.samtools.GATKBAMFileSpan; -import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocSortedSet; -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; +import java.util.*; /** * Assign intervals to the most appropriate blocks, keeping as little as possible in memory at once. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/FilePointer.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/FilePointer.java index c014c1995..e4141f61c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/FilePointer.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/FilePointer.java @@ -29,19 +29,11 @@ import net.sf.samtools.GATKBAMFileSpan; import net.sf.samtools.SAMFileSpan; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.interval.IntervalMergingRule; import org.broadinstitute.sting.utils.interval.IntervalUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.*; /** * Represents a small section of a BAM file, and every associated interval. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndex.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndex.java index 8ebb8b1a8..5d0c38b78 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndex.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndex.java @@ -23,24 +23,18 @@ */ package org.broadinstitute.sting.gatk.datasources.reads; -import net.sf.samtools.Bin; - -import net.sf.samtools.GATKBAMFileSpan; -import net.sf.samtools.GATKBin; -import net.sf.samtools.GATKChunk; -import net.sf.samtools.LinearIndex; -import net.sf.samtools.SAMException; -import net.sf.samtools.util.RuntimeIOException; +import net.sf.samtools.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.lang.ref.SoftReference; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.FileChannel; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * A basic interface for querying BAM indices. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndexData.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndexData.java index f9b998a60..daf1b77e3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndexData.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/GATKBAMIndexData.java @@ -24,11 +24,7 @@ package org.broadinstitute.sting.gatk.datasources.reads; -import net.sf.samtools.Bin; -import net.sf.samtools.GATKBAMFileSpan; -import net.sf.samtools.GATKBin; -import net.sf.samtools.GATKChunk; -import net.sf.samtools.LinearIndex; +import net.sf.samtools.*; import java.util.ArrayList; import java.util.Collections; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/IntervalSharder.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/IntervalSharder.java index fc3f76ab7..4ddf28dce 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/IntervalSharder.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/IntervalSharder.java @@ -35,16 +35,7 @@ import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.PriorityQueue; -import java.util.Queue; +import java.util.*; /** * Shard intervals based on position within the BAM file. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShard.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShard.java index 26af890b4..19d33aa6b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShard.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShard.java @@ -1,5 +1,6 @@ package org.broadinstitute.sting.gatk.datasources.reads; +import net.sf.samtools.SAMFileSpan; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.Utils; @@ -7,8 +8,6 @@ import org.broadinstitute.sting.utils.Utils; import java.util.List; import java.util.Map; -import net.sf.samtools.SAMFileSpan; - /** * Handles locus shards of BAM information. * @author aaron diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShardStrategy.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShardStrategy.java index 950d67428..a5ca07853 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShardStrategy.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/LocusShardStrategy.java @@ -24,17 +24,18 @@ package org.broadinstitute.sting.gatk.datasources.reads; -import net.sf.samtools.GATKBAMFileSpan; -import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMFileSpan; +import net.sf.samtools.SAMSequenceRecord; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.GenomeLocSortedSet; -import java.util.*; - -import net.sf.samtools.SAMFileHeader; -import net.sf.samtools.SAMSequenceRecord; -import net.sf.samtools.SAMFileSpan; -import net.sf.picard.reference.IndexedFastaSequenceFile; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; /** * A sharding strategy for loci based on reading of the index. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShard.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShard.java index 7579c22f6..278eeb898 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShard.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShard.java @@ -1,8 +1,8 @@ package org.broadinstitute.sting.gatk.datasources.reads; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.GenomeLoc; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShardStrategy.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShardStrategy.java index 10228ecd7..28b737f28 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShardStrategy.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/MonolithicShardStrategy.java @@ -4,8 +4,8 @@ import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import java.util.Iterator; -import java.util.NoSuchElementException; import java.util.List; +import java.util.NoSuchElementException; /** * Create a giant shard representing all the data in the input BAM(s). diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShard.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShard.java index 9aecd7779..4d9c9092d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShard.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShard.java @@ -1,15 +1,17 @@ package org.broadinstitute.sting.gatk.datasources.reads; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import org.broadinstitute.sting.gatk.iterators.StingSAMIteratorAdapter; - -import java.util.*; - import net.sf.samtools.SAMFileSpan; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; +import org.broadinstitute.sting.gatk.iterators.StingSAMIteratorAdapter; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * * User: aaron diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShardStrategy.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShardStrategy.java index da70a615b..c2235ec73 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShardStrategy.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ReadShardStrategy.java @@ -25,12 +25,11 @@ package org.broadinstitute.sting.gatk.datasources.reads; import net.sf.samtools.SAMFileSpan; - -import java.util.*; - import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import java.util.*; + /** * The sharding strategy for reads using a simple counting mechanism. Each read shard * has a specific number of reads (default to 10K) which is configured in the constructor. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java index c2aa5f18e..6064806f3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java @@ -24,21 +24,19 @@ package org.broadinstitute.sting.gatk.datasources.reads; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.picard.sam.MergingSamRecordIterator; +import net.sf.picard.sam.SamFileHeaderMerger; import net.sf.samtools.*; import net.sf.samtools.util.CloseableIterator; -import net.sf.picard.filter.SamRecordFilter; -import net.sf.picard.sam.SamFileHeaderMerger; -import net.sf.picard.sam.MergingSamRecordIterator; -import net.sf.picard.reference.IndexedFastaSequenceFile; - import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.DownsamplingMethod; -import org.broadinstitute.sting.gatk.filters.ReadFilter; -import org.broadinstitute.sting.gatk.iterators.*; -import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.ReadMetrics; +import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.filters.CountingFilteringIterator; +import org.broadinstitute.sting.gatk.filters.ReadFilter; +import org.broadinstitute.sting.gatk.iterators.*; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.baq.BAQ; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/Shard.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/Shard.java index 418f5d3ee..f8d941784 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/Shard.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/Shard.java @@ -2,17 +2,13 @@ package org.broadinstitute.sting.gatk.datasources.reads; import net.sf.samtools.SAMFileSpan; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; -import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.gatk.ReadMetrics; import org.broadinstitute.sting.gatk.ReadProperties; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.HasGenomeLocation; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ShardStrategyFactory.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ShardStrategyFactory.java index fa733ce12..780b41ef7 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ShardStrategyFactory.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/ShardStrategyFactory.java @@ -1,10 +1,10 @@ package org.broadinstitute.sting.gatk.datasources.reads; -import net.sf.samtools.SAMSequenceDictionary; import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.samtools.SAMSequenceDictionary; import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; /** * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMFileStat.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMFileStat.java index ae0f1cf43..07c13a76e 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMFileStat.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMFileStat.java @@ -25,17 +25,17 @@ package org.broadinstitute.sting.gatk.datasources.reads.utilities; -import org.broadinstitute.sting.commandline.CommandLineProgram; +import net.sf.samtools.BAMIndex; +import net.sf.samtools.SAMFileReader; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.instrumentation.Sizeof; import java.io.File; import java.lang.reflect.Field; -import java.util.Map; import java.util.List; - -import net.sf.samtools.*; +import java.util.Map; /** * diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMTagRenamer.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMTagRenamer.java index f03e2a44f..54de04379 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMTagRenamer.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/BAMTagRenamer.java @@ -24,12 +24,12 @@ package org.broadinstitute.sting.gatk.datasources.reads.utilities; -import org.broadinstitute.sting.commandline.CommandLineProgram; -import org.broadinstitute.sting.commandline.Argument; -import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMFileReader; -import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMFileWriterFactory; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.CommandLineProgram; import java.io.File; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/PrintBGZFBounds.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/PrintBGZFBounds.java index df7dccaa9..773541d11 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/PrintBGZFBounds.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reads/utilities/PrintBGZFBounds.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.datasources.reads.utilities; -import net.sf.samtools.SAMFileReader; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.CommandLineProgram; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSource.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSource.java index c2d64ddd8..ef69a8e5f 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSource.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/reference/ReferenceDataSource.java @@ -25,16 +25,15 @@ package org.broadinstitute.sting.gatk.datasources.reference; -import net.sf.picard.reference.ReferenceSequenceFileFactory; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import net.sf.picard.reference.FastaSequenceIndexBuilder; -import net.sf.picard.sam.CreateSequenceDictionary; -import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.picard.reference.FastaSequenceIndex; +import net.sf.picard.reference.FastaSequenceIndexBuilder; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.picard.sam.CreateSequenceDictionary; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; import org.broadinstitute.sting.utils.file.FSLockWithShared; import org.broadinstitute.sting.utils.file.FileSystemInabilityToLockException; -import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; import java.io.File; diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/rmd/ResourcePool.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/rmd/ResourcePool.java index 934f4f997..21f58d480 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/rmd/ResourcePool.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/rmd/ResourcePool.java @@ -28,11 +28,7 @@ import net.sf.samtools.SAMSequenceDictionary; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; /** * A pool of open resources, all of which can create a closeable iterator. diff --git a/public/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java b/public/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java index 0a5981a1b..067bf3f72 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java +++ b/public/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java @@ -3,11 +3,10 @@ package org.broadinstitute.sting.gatk.datasources.sample; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMReadGroupRecord; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; diff --git a/public/java/src/org/broadinstitute/sting/gatk/examples/CoverageBySample.java b/public/java/src/org/broadinstitute/sting/gatk/examples/CoverageBySample.java index a1419ba70..5dbd90405 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/examples/CoverageBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/examples/CoverageBySample.java @@ -1,15 +1,20 @@ package org.broadinstitute.sting.gatk.examples; -import net.sf.samtools.*; -import org.broadinstitute.sting.gatk.refdata.*; -import org.broadinstitute.sting.gatk.walkers.LocusWalker; -import org.broadinstitute.sting.gatk.contexts.*; -import org.broadinstitute.sting.utils.pileup.*; +import net.sf.samtools.SAMReadGroupRecord; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.LocusWalker; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import java.util.*; import java.io.PrintStream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; /** * Computes the coverage per sample. diff --git a/public/java/src/org/broadinstitute/sting/gatk/examples/GATKPaperGenotyper.java b/public/java/src/org/broadinstitute/sting/gatk/examples/GATKPaperGenotyper.java index b96d0ffbf..26205a203 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/examples/GATKPaperGenotyper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/examples/GATKPaperGenotyper.java @@ -25,6 +25,8 @@ package org.broadinstitute.sting.gatk.examples; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -32,8 +34,6 @@ import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.gatk.walkers.genotyper.DiploidSNPGenotypePriors; import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import java.io.PrintStream; diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/Accumulator.java b/public/java/src/org/broadinstitute/sting/gatk/executive/Accumulator.java index 3e335733d..b23782563 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/Accumulator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/Accumulator.java @@ -25,18 +25,18 @@ package org.broadinstitute.sting.gatk.executive; -import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; -import org.broadinstitute.sting.gatk.datasources.providers.LocusShardDataProvider; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.gatk.datasources.providers.LocusShardDataProvider; +import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; +import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.ArrayList; -import java.util.List; import java.util.Iterator; +import java.util.List; /** * Manages the */ diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java index 8a27e008c..59fb4aa9e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java @@ -1,27 +1,27 @@ package org.broadinstitute.sting.gatk.executive; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategy; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.gatk.io.*; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.gatk.io.OutputTracker; +import org.broadinstitute.sting.gatk.io.ThreadLocalOutputTracker; +import org.broadinstitute.sting.gatk.walkers.TreeReducible; +import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.threading.ThreadPoolMonitor; -import java.util.Queue; -import java.util.LinkedList; import java.util.Collection; -import java.util.concurrent.Executors; +import java.util.LinkedList; +import java.util.Queue; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; -import net.sf.picard.reference.IndexedFastaSequenceFile; - /** * A microscheduler that schedules shards according to a tree-like structure. * Requires a special walker tagged with a 'TreeReducible' interface. diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java index 4cb571c45..9466fdf75 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java @@ -1,22 +1,21 @@ package org.broadinstitute.sting.gatk.executive; -import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.providers.LocusShardDataProvider; import org.broadinstitute.sting.gatk.datasources.providers.ReadShardDataProvider; +import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; import org.broadinstitute.sting.gatk.datasources.reads.Shard; import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategy; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.io.DirectOutputTracker; import org.broadinstitute.sting.gatk.io.OutputTracker; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.gatk.walkers.LocusWalker; +import org.broadinstitute.sting.gatk.walkers.Walker; import java.util.Collection; -import net.sf.picard.reference.IndexedFastaSequenceFile; - /** A micro-scheduling manager for single-threaded execution of a traversal. */ public class LinearMicroScheduler extends MicroScheduler { diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java index cfe0f8187..23e5769f1 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java @@ -25,26 +25,18 @@ package org.broadinstitute.sting.gatk.executive; +import net.sf.picard.reference.IndexedFastaSequenceFile; import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.datasources.reads.Shard; import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategy; +import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; +import org.broadinstitute.sting.gatk.io.OutputTracker; +import org.broadinstitute.sting.gatk.iterators.NullSAMIterator; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; import org.broadinstitute.sting.gatk.traversals.*; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.io.OutputTracker; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import org.broadinstitute.sting.gatk.iterators.NullSAMIterator; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.gatk.ReadMetrics; - -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.PrintStream; -import java.lang.management.ManagementFactory; -import java.util.*; - -import net.sf.picard.reference.IndexedFastaSequenceFile; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.threading.*; @@ -52,6 +44,11 @@ import org.broadinstitute.sting.utils.threading.*; import javax.management.JMException; import javax.management.MBeanServer; import javax.management.ObjectName; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.lang.management.ManagementFactory; +import java.util.Collection; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/OutputMergeTask.java b/public/java/src/org/broadinstitute/sting/gatk/executive/OutputMergeTask.java index 76e0c1c8a..7be37a616 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/OutputMergeTask.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/OutputMergeTask.java @@ -1,10 +1,9 @@ package org.broadinstitute.sting.gatk.executive; import org.broadinstitute.sting.gatk.io.storage.Storage; -import org.broadinstitute.sting.gatk.io.OutputTracker; -import java.util.Collection; import java.util.ArrayList; +import java.util.Collection; /** * User: hanna diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/ReduceTree.java b/public/java/src/org/broadinstitute/sting/gatk/executive/ReduceTree.java index 151a1ba26..7aac70b47 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/ReduceTree.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/ReduceTree.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.executive; -import java.util.Queue; -import java.util.List; import java.util.ArrayList; import java.util.LinkedList; +import java.util.List; +import java.util.Queue; import java.util.concurrent.Future; /** * User: hanna diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/ShardTraverser.java b/public/java/src/org/broadinstitute/sting/gatk/executive/ShardTraverser.java index b78a4edc9..6136bd68d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/ShardTraverser.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/ShardTraverser.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.executive; import org.apache.log4j.Logger; -import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; import org.broadinstitute.sting.gatk.datasources.providers.LocusShardDataProvider; +import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.broadinstitute.sting.gatk.traversals.TraversalEngine; import org.broadinstitute.sting.gatk.io.ThreadLocalOutputTracker; -import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.gatk.traversals.TraversalEngine; import org.broadinstitute.sting.gatk.walkers.LocusWalker; +import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.concurrent.Callable; diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/TreeReducer.java b/public/java/src/org/broadinstitute/sting/gatk/executive/TreeReducer.java index 8fb4adb5d..d36a3b576 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/TreeReducer.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/TreeReducer.java @@ -4,8 +4,8 @@ import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.concurrent.Callable; -import java.util.concurrent.Future; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; /** * User: hanna * Date: Apr 29, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/WindowMaker.java b/public/java/src/org/broadinstitute/sting/gatk/executive/WindowMaker.java index 5c341bb02..cfbce58ee 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/WindowMaker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/WindowMaker.java @@ -1,17 +1,20 @@ package org.broadinstitute.sting.gatk.executive; -import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.gatk.iterators.*; +import net.sf.picard.util.PeekableIterator; import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; - -import java.util.*; - -import net.sf.picard.util.PeekableIterator; +import org.broadinstitute.sting.gatk.datasources.reads.Shard; +import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; +import org.broadinstitute.sting.gatk.iterators.LocusIterator; +import org.broadinstitute.sting.gatk.iterators.LocusIteratorByState; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + /** * Buffer shards of data which may or may not contain multiple loci into * iterators of all data which cover an interval. Its existence is an homage diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java index b8a3ee977..0987c5d74 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java @@ -24,8 +24,10 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; -import net.sf.samtools.*; +import net.sf.samtools.Cigar; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; /** * Filter out reads with wonky cigar strings. diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java index 3b988c8fb..8596e18eb 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java b/public/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java index 84390c173..03fc2063b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java @@ -23,17 +23,16 @@ */ package org.broadinstitute.sting.gatk.filters; -import net.sf.samtools.util.CloserUtil; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Collection; - +import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import net.sf.samtools.util.CloseableIterator; -import net.sf.picard.filter.SamRecordFilter; +import net.sf.samtools.util.CloserUtil; import org.broadinstitute.sting.gatk.ReadMetrics; +import java.util.Collection; +import java.util.Iterator; +import java.util.NoSuchElementException; + /** * Filtering Iterator which takes a filter and an iterator and iterates * through only those records which are not rejected by the filter. diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java index fb3c38582..589910fc7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /* diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java index b7806524a..cd77a9e7e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java b/public/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java index cda08fb66..67f82235d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java @@ -25,11 +25,8 @@ package org.broadinstitute.sting.gatk.filters; -import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.classloader.PluginManager; -import net.sf.picard.filter.SamRecordFilter; - import java.util.Collection; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java index 4deeb09ee..74deace9a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java @@ -24,8 +24,8 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMSequenceRecord; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java index bcd473b15..75369b306 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java index cecbedda8..1afec36d1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityUnavailableReadFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.util.QualityUtil; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.QualityUtils; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MaxInsertSizeFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MaxInsertSizeFilter.java index 584783d34..7bcee033f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MaxInsertSizeFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MaxInsertSizeFilter.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java index 8a2fd5af3..cd31da61a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java index d5d40ec38..490a55040 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java index fc21538e8..29738e499 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /* diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java index cfbba0383..31c2144ce 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java index dcddebd55..8ad91ac1c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java @@ -25,9 +25,7 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; - import org.broadinstitute.sting.utils.sam.ReadUtils; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java index 691fd95f0..30b2f828d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java @@ -25,11 +25,9 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; - -import org.broadinstitute.sting.utils.sam.ReadUtils; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.utils.sam.ReadUtils; /** * Filter out PL matching reads. diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java index 4ef88402d..81044b888 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java @@ -1,14 +1,12 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMReadGroupRecord; - -import java.util.Set; -import java.util.HashSet; - +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.exceptions.UserException; +import java.util.HashSet; +import java.util.Set; + /** * Created by IntelliJ IDEA. * User: asivache diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java index 1d74ee20e..227637761 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.gatk.filters; import net.sf.picard.filter.SamRecordFilter; -import net.sf.samtools.SAMFileHeader; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java index 69ebc8b04..0e5e8800c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java @@ -25,17 +25,16 @@ package org.broadinstitute.sting.gatk.filters; -import java.util.*; -import java.util.Map.Entry; -import java.io.File; -import java.io.FileNotFoundException; - -import net.sf.picard.filter.SamRecordFilter; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.*; +import java.util.Map.Entry; + /** * Removes records matching the read group tag and exact match string. * For example, this filter value: diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java index 1b2a77f45..16eeed3cc 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java index 682b22b1f..99d6bc154 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java @@ -25,9 +25,8 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java index 05b472036..2f93cbcae 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java @@ -25,9 +25,8 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMReadGroupRecord; -import net.sf.picard.filter.SamRecordFilter; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java index ac4f4853a..e7ee345d2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/DirectOutputTracker.java b/public/java/src/org/broadinstitute/sting/gatk/io/DirectOutputTracker.java index 865528688..658a28fbd 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/DirectOutputTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/DirectOutputTracker.java @@ -25,9 +25,9 @@ package org.broadinstitute.sting.gatk.io; -import org.broadinstitute.sting.gatk.io.stubs.Stub; -import org.broadinstitute.sting.gatk.io.storage.StorageFactory; import org.broadinstitute.sting.gatk.io.storage.Storage; +import org.broadinstitute.sting.gatk.io.storage.StorageFactory; +import org.broadinstitute.sting.gatk.io.stubs.Stub; /** * Maps creation of storage directly to output streams in parent. diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/OutputTracker.java b/public/java/src/org/broadinstitute/sting/gatk/io/OutputTracker.java index b68013aa4..f39ba2d8d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/io/OutputTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/OutputTracker.java @@ -26,20 +26,20 @@ package org.broadinstitute.sting.gatk.io; import net.sf.samtools.SAMFileReader; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.classloader.JVMUtils; import org.broadinstitute.sting.commandline.ArgumentSource; -import org.broadinstitute.sting.utils.sam.SAMFileReaderBuilder; -import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.gatk.io.storage.Storage; +import org.broadinstitute.sting.gatk.io.storage.StorageFactory; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamStub; import org.broadinstitute.sting.gatk.io.stubs.Stub; -import org.broadinstitute.sting.gatk.io.storage.StorageFactory; -import org.broadinstitute.sting.gatk.io.storage.Storage; +import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.sam.SAMFileReaderBuilder; -import java.io.*; +import java.io.OutputStream; import java.lang.reflect.Field; -import java.util.Map; import java.util.HashMap; +import java.util.Map; /** * Manages the output and err streams that are created specifically for walker diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/StingSAMFileWriter.java b/public/java/src/org/broadinstitute/sting/gatk/io/StingSAMFileWriter.java index 8701ecf3c..a9a74925d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/StingSAMFileWriter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/StingSAMFileWriter.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.gatk.io; -import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMFileWriter; /** * A writer that will allow unsorted BAM files to be written diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/ThreadLocalOutputTracker.java b/public/java/src/org/broadinstitute/sting/gatk/io/ThreadLocalOutputTracker.java index 36960246a..999deddd1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/ThreadLocalOutputTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/ThreadLocalOutputTracker.java @@ -25,15 +25,16 @@ package org.broadinstitute.sting.gatk.io; -import org.broadinstitute.sting.gatk.io.stubs.Stub; -import org.broadinstitute.sting.gatk.io.storage.StorageFactory; -import org.broadinstitute.sting.gatk.io.storage.Storage; import org.broadinstitute.sting.gatk.executive.OutputMergeTask; +import org.broadinstitute.sting.gatk.io.storage.Storage; +import org.broadinstitute.sting.gatk.io.storage.StorageFactory; +import org.broadinstitute.sting.gatk.io.stubs.Stub; import org.broadinstitute.sting.utils.exceptions.UserException; -import java.util.*; import java.io.File; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; /** * An output tracker that can either track its output per-thread or directly, diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/storage/OutputStreamStorage.java b/public/java/src/org/broadinstitute/sting/gatk/io/storage/OutputStreamStorage.java index 4dc976289..56c9c0465 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/storage/OutputStreamStorage.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/storage/OutputStreamStorage.java @@ -25,14 +25,14 @@ package org.broadinstitute.sting.gatk.io.storage; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamStub; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.*; +import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel; -import java.nio.channels.Channels; public class OutputStreamStorage extends OutputStream implements Storage { /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/storage/SAMFileWriterStorage.java b/public/java/src/org/broadinstitute/sting/gatk/io/storage/SAMFileWriterStorage.java index 610db1d76..cb8786be1 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/storage/SAMFileWriterStorage.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/storage/SAMFileWriterStorage.java @@ -27,17 +27,16 @@ package org.broadinstitute.sting.gatk.io.storage; import net.sf.samtools.*; import net.sf.samtools.util.CloseableIterator; - -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - import net.sf.samtools.util.RuntimeIOException; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterStub; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.sam.SimplifyingSAMFileWriter; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + /** * Provides temporary storage for SAMFileWriters. * diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/storage/StorageFactory.java b/public/java/src/org/broadinstitute/sting/gatk/io/storage/StorageFactory.java index ee5c56524..66907dd6b 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/storage/StorageFactory.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/storage/StorageFactory.java @@ -25,9 +25,9 @@ package org.broadinstitute.sting.gatk.io.storage; -import org.broadinstitute.sting.gatk.io.stubs.Stub; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamStub; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterStub; +import org.broadinstitute.sting.gatk.io.stubs.Stub; import org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/storage/VCFWriterStorage.java b/public/java/src/org/broadinstitute/sting/gatk/io/storage/VCFWriterStorage.java index 74176ec35..1da03e9c2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/storage/VCFWriterStorage.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/storage/VCFWriterStorage.java @@ -1,16 +1,21 @@ package org.broadinstitute.sting.gatk.io.storage; +import net.sf.samtools.util.BlockCompressedOutputStream; import org.apache.log4j.Logger; import org.broad.tribble.source.BasicFeatureSource; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub; - -import java.io.*; - -import net.sf.samtools.util.BlockCompressedOutputStream; +import org.broadinstitute.sting.utils.codecs.vcf.StandardVCFWriter; +import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; /** * Provides temporary and permanent storage for genotypes in VCF format. diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamArgumentTypeDescriptor.java index 00e78f391..8bc97c886 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamArgumentTypeDescriptor.java @@ -30,8 +30,8 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.io.OutputStream; import java.io.File; +import java.io.OutputStream; import java.lang.reflect.Constructor; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamStub.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamStub.java index 5cf84c5a2..27bcb8a1c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamStub.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/OutputStreamStub.java @@ -27,9 +27,9 @@ package org.broadinstitute.sting.gatk.io.stubs; import org.broadinstitute.sting.gatk.io.OutputTracker; -import java.io.OutputStream; -import java.io.IOException; import java.io.File; +import java.io.IOException; +import java.io.OutputStream; /** * A stub for routing and management of anything backed by an OutputStream. diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileReaderArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileReaderArgumentTypeDescriptor.java index d847015ed..f124c2302 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileReaderArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileReaderArgumentTypeDescriptor.java @@ -24,14 +24,14 @@ package org.broadinstitute.sting.gatk.io.stubs; -import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; -import org.broadinstitute.sting.commandline.ArgumentSource; +import net.sf.samtools.SAMFileReader; import org.broadinstitute.sting.commandline.ArgumentMatches; +import org.broadinstitute.sting.commandline.ArgumentSource; +import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; import org.broadinstitute.sting.commandline.ParsingEngine; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.sam.SAMFileReaderBuilder; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import net.sf.samtools.SAMFileReader; import java.io.File; diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterArgumentTypeDescriptor.java index a9a272220..38640eda0 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterArgumentTypeDescriptor.java @@ -25,18 +25,17 @@ package org.broadinstitute.sting.gatk.io.stubs; +import net.sf.samtools.SAMFileWriter; import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; -import net.sf.samtools.SAMFileWriter; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; -import java.lang.annotation.Annotation; -import java.util.List; -import java.util.Arrays; import java.io.File; import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.util.Arrays; +import java.util.List; /** * Insert a SAMFileWriterStub instead of a full-fledged concrete OutputStream implementations. diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterStub.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterStub.java index f5c1e0efc..d8e59a3dd 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterStub.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/SAMFileWriterStub.java @@ -25,20 +25,19 @@ package org.broadinstitute.sting.gatk.io.stubs; +import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMFileHeader; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.gatk.io.OutputTracker; +import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; +import org.broadinstitute.sting.utils.baq.BAQ; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.File; import java.io.OutputStream; -import org.broadinstitute.sting.gatk.io.OutputTracker; -import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.baq.BAQ; - /** * A stub for routing and management of SAM file reading and writing. * diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterArgumentTypeDescriptor.java index 7521e754d..615841f02 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterArgumentTypeDescriptor.java @@ -25,14 +25,17 @@ package org.broadinstitute.sting.gatk.io.stubs; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; import java.io.OutputStream; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; /** * Injects new command-line arguments into the system providing support for the genotype writer. diff --git a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterStub.java b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterStub.java index 1a79d2785..bb84f9457 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterStub.java +++ b/public/java/src/org/broadinstitute/sting/gatk/io/stubs/VCFWriterStub.java @@ -25,19 +25,19 @@ package org.broadinstitute.sting.gatk.io.stubs; -import java.io.File; -import java.io.PrintStream; -import java.io.OutputStream; -import java.util.Collection; - -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.gatk.CommandLineExecutable; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.io.OutputTracker; import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.io.File; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.Collection; /** * A stub for routing and management of genotype reading and writing. diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/BoundedReadIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/BoundedReadIterator.java index b5643f834..478675f9d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/BoundedReadIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/BoundedReadIterator.java @@ -1,13 +1,11 @@ package org.broadinstitute.sting.gatk.iterators; +import net.sf.picard.sam.MergingSamRecordIterator; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMRecord; -import net.sf.picard.sam.MergingSamRecordIterator; import java.util.Iterator; -import org.broadinstitute.sting.gatk.ReadProperties; - /* * Copyright (c) 2009 The Broad Institute * diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/BufferingReadIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/BufferingReadIterator.java index f3a060be1..7eaf4be41 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/BufferingReadIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/BufferingReadIterator.java @@ -26,12 +26,11 @@ package org.broadinstitute.sting.gatk.iterators; import net.sf.samtools.SAMRecord; import net.sf.samtools.util.CloseableIterator; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.Queue; import java.util.LinkedList; import java.util.NoSuchElementException; - -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import java.util.Queue; /** * Buffers access to a large stream of reads, replenishing the buffer only when the reads diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/DownsampleIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/DownsampleIterator.java index 1342f11fd..835748ff0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/DownsampleIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/DownsampleIterator.java @@ -1,11 +1,10 @@ package org.broadinstitute.sting.gatk.iterators; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import java.util.Iterator; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; - public class DownsampleIterator implements StingSAMIterator { diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/GenomeLocusIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/GenomeLocusIterator.java index aa376a12a..240564d34 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/GenomeLocusIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/GenomeLocusIterator.java @@ -3,8 +3,8 @@ package org.broadinstitute.sting.gatk.iterators; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; -import java.util.NoSuchElementException; import java.util.Iterator; +import java.util.NoSuchElementException; /** * User: hanna * Date: May 12, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIterator.java index 30c1cf512..e177984ca 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIterator.java @@ -1,11 +1,10 @@ package org.broadinstitute.sting.gatk.iterators; import net.sf.samtools.util.CloseableIterator; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import java.util.Iterator; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; - /** * Iterator that traverses a SAM File, accumulating information on a per-locus basis */ diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIteratorByState.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIteratorByState.java index 4e58813f5..e13c5a764 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIteratorByState.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/LocusIteratorByState.java @@ -25,19 +25,27 @@ package org.broadinstitute.sting.gatk.iterators; -import net.sf.samtools.*; import net.sf.picard.util.PeekableIterator; +import net.sf.samtools.Cigar; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; -import org.broadinstitute.sting.gatk.ReadProperties; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.gatk.DownsamplingMethod; import org.broadinstitute.sting.gatk.DownsampleType; +import org.broadinstitute.sting.gatk.DownsamplingMethod; +import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.ReservoirDownsampler; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.pileup.*; +import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileupImpl; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; import org.broadinstitute.sting.utils.sam.ReadUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/NullSAMIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/NullSAMIterator.java index ff458467f..21b71c9e6 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/NullSAMIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/NullSAMIterator.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.iterators; -import org.broadinstitute.sting.gatk.ReadProperties; import net.sf.samtools.SAMRecord; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/PositionTrackingIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/PositionTrackingIterator.java index c2d3976ea..cc499b247 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/PositionTrackingIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/PositionTrackingIterator.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.gatk.iterators; -import org.broadinstitute.sting.gatk.ReadProperties; import net.sf.samtools.SAMRecord; import net.sf.samtools.util.CloseableIterator; diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/ReadFormattingIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/ReadFormattingIterator.java index 239392eec..2f30d12a8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/ReadFormattingIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/ReadFormattingIterator.java @@ -1,13 +1,8 @@ package org.broadinstitute.sting.gatk.iterators; import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMTag; -import net.sf.samtools.SAMReadGroupRecord; -import org.broadinstitute.sting.gatk.ReadProperties; -import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.apache.log4j.Logger; - -import java.util.List; +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; /** * An iterator which does post-processing of a read, including potentially wrapping diff --git a/public/java/src/org/broadinstitute/sting/gatk/iterators/StingSAMIterator.java b/public/java/src/org/broadinstitute/sting/gatk/iterators/StingSAMIterator.java index d294993d4..1b248d097 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/iterators/StingSAMIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/iterators/StingSAMIterator.java @@ -2,7 +2,6 @@ package org.broadinstitute.sting.gatk.iterators; import net.sf.samtools.SAMRecord; import net.sf.samtools.util.CloseableIterator; -import org.broadinstitute.sting.gatk.ReadProperties; /** * * User: aaron diff --git a/public/java/src/org/broadinstitute/sting/gatk/phonehome/GATKRunReport.java b/public/java/src/org/broadinstitute/sting/gatk/phonehome/GATKRunReport.java index a51ca9292..69c0b3e0a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/phonehome/GATKRunReport.java +++ b/public/java/src/org/broadinstitute/sting/gatk/phonehome/GATKRunReport.java @@ -26,19 +26,16 @@ package org.broadinstitute.sting.gatk.phonehome; import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.broadinstitute.sting.commandline.CommandLineUtils; import org.broadinstitute.sting.gatk.CommandLineGATK; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.jets3t.service.S3Service; import org.jets3t.service.S3ServiceException; import org.jets3t.service.impl.rest.httpclient.RestS3Service; -import org.jets3t.service.model.S3Bucket; import org.jets3t.service.model.S3Object; import org.jets3t.service.security.AWSCredentials; import org.simpleframework.xml.Element; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordIterator.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordIterator.java index fa0c323b5..ce924fd87 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordIterator.java @@ -25,17 +25,17 @@ package org.broadinstitute.sting.gatk.refdata; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.gatk.iterators.PushbackIterator; +import java.io.File; +import java.io.FileNotFoundException; +import java.lang.reflect.Constructor; import java.util.Iterator; import java.util.regex.Pattern; -import java.io.FileNotFoundException; -import java.io.File; -import java.lang.reflect.Constructor; /** * This is a low-level iterator designed to provide system-wide generic support for reading record-oriented data diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordListImpl.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordListImpl.java index cff97e4ee..59b273d38 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordListImpl.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/RODRecordListImpl.java @@ -2,9 +2,9 @@ package org.broadinstitute.sting.gatk.refdata; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.HasGenomeLocation; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.GenomeLoc; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java index 43bf6f8e0..d03b122e2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.refdata; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/SeekableRODIterator.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/SeekableRODIterator.java index b3cb22a03..b7437e6e8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/SeekableRODIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/SeekableRODIterator.java @@ -6,9 +6,9 @@ import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java index c7c0468e7..1d622e2c7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/VariantContextAdaptors.java @@ -3,17 +3,13 @@ package org.broadinstitute.sting.gatk.refdata; import org.broad.tribble.Feature; import org.broad.tribble.dbsnp.DbSNPFeature; import org.broad.tribble.gelitext.GeliTextFeature; -import org.broadinstitute.sting.utils.codecs.hapmap.HapMapFeature; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.MutableGenotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.utils.classloader.PluginManager; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.codecs.hapmap.HapMapFeature; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.*; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java index 59cd14a22..6bba754be 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java @@ -25,12 +25,6 @@ package org.broadinstitute.sting.gatk.refdata.features.annotator; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.StringTokenizer; - import org.apache.log4j.Logger; import org.broad.tribble.Feature; import org.broad.tribble.exception.CodecLineParsingException; @@ -41,6 +35,12 @@ import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.Utils; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + public class AnnotatorInputTableCodec implements ReferenceDependentFeatureCodec { private static Logger logger = Logger.getLogger(AnnotatorInputTableCodec.class); diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableFeature.java index d97e378fb..d12badd28 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableFeature.java @@ -25,13 +25,13 @@ package org.broadinstitute.sting.gatk.refdata.features.annotator; +import org.broad.tribble.Feature; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.broad.tribble.Feature; - /** * This class represents a single record in an AnnotatorInputTable. */ diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleCodec.java index 7f97451cf..5e536d4c1 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleCodec.java @@ -26,19 +26,19 @@ package org.broadinstitute.sting.gatk.refdata.features.beagle; import org.broad.tribble.Feature; +import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.readers.AsciiLineReader; import org.broad.tribble.readers.LineReader; +import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; -import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.broad.tribble.exception.CodecLineParsingException; -import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; public class BeagleCodec implements ReferenceDependentFeatureCodec { private String[] header; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleFeature.java index c7bf86569..e6832754d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/beagle/BeagleFeature.java @@ -25,14 +25,11 @@ package org.broadinstitute.sting.gatk.refdata.features.beagle; import org.broad.tribble.Feature; - +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.util.ArrayList; import java.util.Map; -import net.sf.samtools.util.StringUtil; -import org.broadinstitute.sting.utils.variantcontext.Allele; - public class BeagleFeature implements Feature { private String chr; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/refseq/RefSeqFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/refseq/RefSeqFeature.java index 4648efd1e..d12114f9a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/refseq/RefSeqFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/refseq/RefSeqFeature.java @@ -4,9 +4,8 @@ import org.broad.tribble.Feature; import org.broadinstitute.sting.gatk.refdata.Transcript; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.ArrayList; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java index 00b7c45d9..43e2c3ff5 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java @@ -25,15 +25,15 @@ package org.broadinstitute.sting.gatk.refdata.features.sampileup; -import org.broad.tribble.FeatureCodec; import org.broad.tribble.Feature; +import org.broad.tribble.FeatureCodec; import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.readers.LineReader; import org.broad.tribble.util.ParsingUtils; import java.util.ArrayList; -import java.util.regex.Pattern; import java.util.regex.Matcher; +import java.util.regex.Pattern; import static org.broadinstitute.sting.gatk.refdata.features.sampileup.SAMPileupFeature.VariantType; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupFeature.java index a794c2704..378f26934 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupFeature.java @@ -25,12 +25,11 @@ package org.broadinstitute.sting.gatk.refdata.features.sampileup; +import net.sf.samtools.util.StringUtil; import org.broad.tribble.Feature; import java.util.List; -import net.sf.samtools.util.StringUtil; - /** * A tribble feature representing a SAM pileup. * diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java index 15f559d46..039b8adde 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java @@ -24,14 +24,14 @@ package org.broadinstitute.sting.gatk.refdata.features.samread; +import net.sf.samtools.Cigar; +import net.sf.samtools.TextCigarCodec; +import net.sf.samtools.util.StringUtil; import org.broad.tribble.Feature; import org.broad.tribble.FeatureCodec; import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.readers.LineReader; import org.broad.tribble.util.ParsingUtils; -import net.sf.samtools.util.StringUtil; -import net.sf.samtools.TextCigarCodec; -import net.sf.samtools.Cigar; /** * Decodes a simple SAM text string. diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/BedTableCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/BedTableCodec.java index b831606a3..745ccdd9f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/BedTableCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/BedTableCodec.java @@ -1,13 +1,8 @@ package org.broadinstitute.sting.gatk.refdata.features.table; import org.broad.tribble.Feature; -import org.broad.tribble.readers.LineReader; import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.exceptions.UserException; -import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java index 6f0a712bf..ab1ac59d8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableCodec.java @@ -1,16 +1,14 @@ package org.broadinstitute.sting.gatk.refdata.features.table; import org.broad.tribble.Feature; -import org.broad.tribble.FeatureCodec; import org.broad.tribble.readers.LineReader; import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.interval.IntervalUtils; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; /** * implementation of a simple table (tab or comma delimited format) input files diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java index 4b4ebe450..ca73ee960 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/table/TableFeature.java @@ -3,7 +3,7 @@ package org.broadinstitute.sting.gatk.refdata.features.table; import org.broad.tribble.Feature; import org.broadinstitute.sting.utils.GenomeLoc; -import java.util.*; +import java.util.List; /** * A feature representing a single row out of a text table diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/indexer/RMDIndexer.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/indexer/RMDIndexer.java index 5bb65f9a2..085d6b5b3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/indexer/RMDIndexer.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/indexer/RMDIndexer.java @@ -10,7 +10,6 @@ import org.broad.tribble.util.LittleEndianOutputStream; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.commandline.Input; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.refdata.ReferenceDependentFeatureCodec; import org.broadinstitute.sting.gatk.refdata.tracks.builders.RMDTrackBuilder; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/QueryableTrack.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/QueryableTrack.java index 19050ae11..731df997d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/QueryableTrack.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/QueryableTrack.java @@ -28,7 +28,6 @@ import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.utils.GenomeLoc; import java.io.IOException; -import java.util.Iterator; /** * @author aaron diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/RMDTrack.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/RMDTrack.java index 3b9f8243f..ba1ca674e 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/RMDTrack.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/RMDTrack.java @@ -35,8 +35,6 @@ import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; -import java.util.Iterator; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/builders/RMDTrackBuilder.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/builders/RMDTrackBuilder.java index c2057ad5e..19c91be1b 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/builders/RMDTrackBuilder.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/tracks/builders/RMDTrackBuilder.java @@ -42,15 +42,17 @@ import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet.RMDStorageType; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.SequenceDictionaryUtils; -import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.classloader.PluginManager; -import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.file.FSLockWithShared; import org.broadinstitute.sting.utils.file.FileSystemInabilityToLockException; import org.broadinstitute.sting.utils.instrumentation.Sizeof; -import java.io.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/FeatureToGATKFeatureIterator.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/FeatureToGATKFeatureIterator.java index 462bf98df..104ba87b5 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/FeatureToGATKFeatureIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/FeatureToGATKFeatureIterator.java @@ -28,8 +28,6 @@ import org.broad.tribble.Feature; import org.broad.tribble.iterators.CloseableTribbleIterator; import org.broadinstitute.sting.utils.GenomeLocParser; -import java.util.Iterator; - /** * diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java index 1553402a5..59e8471a3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/GATKFeature.java @@ -28,8 +28,6 @@ import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.HasGenomeLocation; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/LocationAwareSeekableRODIterator.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/LocationAwareSeekableRODIterator.java index 83aa5f056..96086598a 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/LocationAwareSeekableRODIterator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/LocationAwareSeekableRODIterator.java @@ -2,12 +2,8 @@ package org.broadinstitute.sting.gatk.refdata.utils; import net.sf.samtools.SAMSequenceDictionary; import net.sf.samtools.util.CloseableIterator; -import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.utils.GenomeLoc; -import java.util.Iterator; -import java.util.List; - /** * @author aaron *

diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/StringToGenomeLocIteratorAdapter.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/StringToGenomeLocIteratorAdapter.java index 101784d97..fc7f7c58f 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/StringToGenomeLocIteratorAdapter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/StringToGenomeLocIteratorAdapter.java @@ -25,10 +25,10 @@ package org.broadinstitute.sting.gatk.refdata.utils; +import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.bed.BedParser; -import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java index 75e7c1a32..3201769e0 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/utils/helpers/DbSNPHelper.java @@ -3,8 +3,8 @@ package org.broadinstitute.sting.gatk.refdata.utils.helpers; import net.sf.samtools.util.SequenceUtil; import org.broad.tribble.annotation.Strand; import org.broad.tribble.dbsnp.DbSNPFeature; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Arrays; diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java index e1085c6b2..89a179d0e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraversalEngine.java @@ -25,11 +25,11 @@ package org.broadinstitute.sting.gatk.traversals; import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.gatk.ReadMetrics; import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; import org.broadinstitute.sting.gatk.datasources.reads.Shard; import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.gatk.ReadMetrics; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; @@ -38,7 +38,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; -import java.util.*; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; public abstract class TraversalEngine,ProviderType extends ShardDataProvider> { // Time in milliseconds since we initialized this engine diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java index 89ff688a7..1ba48ca5f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseDuplicates.java @@ -28,12 +28,11 @@ package org.broadinstitute.sting.gatk.traversals; import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.datasources.providers.ReadView; import org.broadinstitute.sting.gatk.datasources.providers.ReadShardDataProvider; +import org.broadinstitute.sting.gatk.datasources.providers.ReadView; import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import org.broadinstitute.sting.gatk.walkers.DuplicateWalker; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java index 240176f2f..232989fb0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java @@ -10,7 +10,6 @@ import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReadPairs.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReadPairs.java index f15a20cd3..196d54036 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReadPairs.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReadPairs.java @@ -1,16 +1,18 @@ package org.broadinstitute.sting.gatk.traversals; -import org.broadinstitute.sting.gatk.walkers.Requires; -import org.broadinstitute.sting.gatk.walkers.DataSource; -import org.broadinstitute.sting.gatk.walkers.ReadPairWalker; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMRecordCoordinateComparator; +import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.datasources.providers.ReadShardDataProvider; import org.broadinstitute.sting.gatk.datasources.providers.ReadView; import org.broadinstitute.sting.gatk.datasources.reads.Shard; -import org.apache.log4j.Logger; -import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMRecordCoordinateComparator; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.ReadPairWalker; +import org.broadinstitute.sting.gatk.walkers.Requires; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Traverse over a collection of read pairs, assuming that a given shard will contain all pairs. diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java index 670676b48..06e4539c4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseReads.java @@ -2,14 +2,16 @@ package org.broadinstitute.sting.gatk.traversals; import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; -import org.broadinstitute.sting.gatk.WalkerManager; import org.broadinstitute.sting.gatk.ReadMetrics; +import org.broadinstitute.sting.gatk.WalkerManager; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.datasources.providers.*; +import org.broadinstitute.sting.gatk.datasources.providers.ReadBasedReferenceOrderedView; +import org.broadinstitute.sting.gatk.datasources.providers.ReadReferenceView; +import org.broadinstitute.sting.gatk.datasources.providers.ReadShardDataProvider; +import org.broadinstitute.sting.gatk.datasources.providers.ReadView; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.GenomeLoc; /* diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/Allows.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/Allows.java index a29e51189..2541921e9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/Allows.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/Allows.java @@ -1,11 +1,6 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.Documented; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.annotation.ElementType; +import java.lang.annotation.*; /** * User: hanna * Date: May 19, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/BAQMode.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/BAQMode.java index 99dd46cbe..03097887d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/BAQMode.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/BAQMode.java @@ -1,11 +1,6 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.Documented; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.annotation.ElementType; +import java.lang.annotation.*; /** * User: hanna diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/By.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/By.java index 25455b587..8fa6a4c1b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/By.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/By.java @@ -1,11 +1,6 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.Documented; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.annotation.ElementType; +import java.lang.annotation.*; /** * User: hanna * Date: May 14, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java index 1a3f87a7a..ca4e3f5e3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/ClipReadsWalker.java @@ -25,29 +25,29 @@ package org.broadinstitute.sting.gatk.walkers; -import net.sf.samtools.*; -import net.sf.picard.reference.ReferenceSequenceFileFactory; -import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.picard.reference.ReferenceSequence; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import net.sf.picard.reference.ReferenceSequenceFile; +import net.sf.picard.reference.ReferenceSequenceFileFactory; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.util.StringUtil; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.clipreads.ClippingOp; import org.broadinstitute.sting.utils.clipreads.ClippingRepresentation; import org.broadinstitute.sting.utils.clipreads.ReadClipper; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.utils.sam.ReadUtils; -import java.util.*; -import java.util.regex.Pattern; -import java.util.regex.Matcher; import java.io.File; import java.io.PrintStream; - -import net.sf.samtools.util.StringUtil; -import org.broadinstitute.sting.utils.sam.ReadUtils; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * This ReadWalker provides simple, yet powerful read clipping capabilities. It allows the user to clip bases in reads diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/DuplicateWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/DuplicateWalker.java index 1fc606f07..4bfedb672 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/DuplicateWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/DuplicateWalker.java @@ -1,16 +1,13 @@ package org.broadinstitute.sting.gatk.walkers; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.filters.UnmappedReadFilter; import org.broadinstitute.sting.gatk.filters.NotPrimaryAlignmentReadFilter; +import org.broadinstitute.sting.gatk.filters.UnmappedReadFilter; import org.broadinstitute.sting.utils.GenomeLoc; import java.util.List; import java.util.Set; -import java.util.Arrays; - -import net.sf.samtools.SAMRecord; -import net.sf.picard.filter.SamRecordFilter; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/FindReadsWithNamesWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/FindReadsWithNamesWalker.java index a272150c7..56287df31 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/FindReadsWithNamesWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/FindReadsWithNamesWalker.java @@ -26,7 +26,6 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMFileWriter; -import net.sf.samtools.SAMReadGroupRecord; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java index 13a55eaac..fcfcb81b5 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/FlagStatWalker.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import java.io.PrintStream; import java.text.DecimalFormat; import java.text.NumberFormat; -import java.io.PrintStream; /* diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/GCContentByIntervalWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/GCContentByIntervalWalker.java index c0f469973..68bea4dba 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/GCContentByIntervalWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/GCContentByIntervalWalker.java @@ -28,13 +28,12 @@ import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; import java.io.PrintStream; -import java.util.*; +import java.util.List; /** * Walks along reference and calculates the GC content for each interval. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/LocusWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/LocusWalker.java index fc4b403c5..b0b2687f4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/LocusWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/LocusWalker.java @@ -1,9 +1,12 @@ package org.broadinstitute.sting.gatk.walkers; -import org.broadinstitute.sting.gatk.filters.*; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.filters.DuplicateReadFilter; +import org.broadinstitute.sting.gatk.filters.FailsVendorQualityCheckReadFilter; +import org.broadinstitute.sting.gatk.filters.NotPrimaryAlignmentReadFilter; +import org.broadinstitute.sting.gatk.filters.UnmappedReadFilter; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java index 84d868c1a..508d1f6ee 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java @@ -26,22 +26,22 @@ package org.broadinstitute.sting.gatk.walkers; import org.broad.tribble.dbsnp.DbSNPFeature; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; -import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import java.io.PrintStream; import java.util.ArrayList; import java.util.List; -import java.io.PrintStream; /** * Prints the alignment in the pileup format. In the pileup format, each line represents a genomic position, diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java index 9ac3fc0e6..158992a22 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintRODsWalker.java @@ -25,15 +25,15 @@ package org.broadinstitute.sting.gatk.walkers; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; -import org.broadinstitute.sting.commandline.Output; -import java.util.Iterator; import java.io.PrintStream; +import java.util.Iterator; /** * Prints out all of the RODs in the input data set. Data is rendered using the toString() method diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java index 07938d322..a189c00b5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/PrintReadsWalker.java @@ -28,14 +28,12 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMReadGroupRecord; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.utils.baq.BAQ; -import java.io.PrintStream; - /** * Renders, in SAM/BAM format, all reads from the input data set in the order in which they appear * in the input file. It can dynamically merge the contents of multiple input BAM files, resulting diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java index a5486fd9a..db2038aa3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/ReadWalker.java @@ -1,8 +1,8 @@ package org.broadinstitute.sting.gatk.walkers; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/Requires.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/Requires.java index 6c1e64c4e..e9a381a85 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/Requires.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/Requires.java @@ -1,11 +1,6 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.Documented; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.annotation.ElementType; +import java.lang.annotation.*; /** * User: hanna * Date: May 19, 2009 diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/SplitSamFileWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/SplitSamFileWalker.java index 014acff9c..486d233b7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/SplitSamFileWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/SplitSamFileWalker.java @@ -25,14 +25,20 @@ package org.broadinstitute.sting.gatk.walkers; -import net.sf.samtools.*; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.utils.sam.ReadUtils; +import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMFileWriter; +import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.utils.sam.ReadUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Divides the input data set into separate BAM files, one for each sample in the input data set. The split diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/Walker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/Walker.java index f0ba8bb46..384742302 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/Walker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/Walker.java @@ -25,14 +25,14 @@ package org.broadinstitute.sting.gatk.walkers; -import java.util.List; - +import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.filters.MalformedReadFilter; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.collections.Pair; -import org.apache.log4j.Logger; + +import java.util.List; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/WalkerName.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/WalkerName.java index 0e4d40675..4d46607e5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/WalkerName.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/WalkerName.java @@ -1,10 +1,6 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/Window.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/Window.java index 0b718071d..9827fdf09 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/Window.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/Window.java @@ -25,7 +25,10 @@ package org.broadinstitute.sting.gatk.walkers; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** * Describes the size of the window into the genome. Has differing semantics based on diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalance.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalance.java index b02dcd8e2..3144098a8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalance.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalance.java @@ -25,21 +25,21 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class AlleleBalance implements InfoFieldAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java index 51d290763..a99f87a70 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AlleleBalanceBySample.java @@ -1,12 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; +import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.gatk.contexts.*; -import org.broadinstitute.sting.utils.variantcontext.*; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AnnotationByDepth.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AnnotationByDepth.java index 51b5381dc..6c14e7445 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AnnotationByDepth.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/AnnotationByDepth.java @@ -1,8 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.variantcontext.Genotype; + import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseCounts.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseCounts.java index 244627154..66416ce11 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseCounts.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseCounts.java @@ -31,19 +31,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class BaseCounts implements InfoFieldAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseQualityRankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseQualityRankSumTest.java index ff916bedd..2a5c996f7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseQualityRankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/BaseQualityRankSumTest.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; -import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; -import java.util.Arrays; public class BaseQualityRankSumTest extends RankSumTest { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java index f3ec2b1df..74f7f9d80 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ChromosomeCounts.java @@ -25,18 +25,22 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ChromosomeCounts implements InfoFieldAnnotation, StandardAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthOfCoverage.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthOfCoverage.java index e56825dbe..c384e0d09 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthOfCoverage.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthOfCoverage.java @@ -1,18 +1,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class DepthOfCoverage implements InfoFieldAnnotation, StandardAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java index ee66b50ee..e3e8bc258 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/DepthPerAlleleBySample.java @@ -1,21 +1,20 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFCompoundHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; -import org.broadinstitute.sting.utils.pileup.PileupElement; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; +import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/FisherStrand.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/FisherStrand.java index 2115526a6..97ed221e7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/FisherStrand.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/FisherStrand.java @@ -24,20 +24,20 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import cern.jet.math.Arithmetic; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.utils.pileup.PileupElement; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import cern.jet.math.Arithmetic; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GCContent.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GCContent.java index 5eaa30bf3..48677bbe5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GCContent.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GCContent.java @@ -1,18 +1,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class GCContent implements InfoFieldAnnotation, ExperimentalAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GLstats.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GLstats.java index 3a5db2884..cca0ad4bc 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GLstats.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/GLstats.java @@ -1,19 +1,20 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; /** * Created by IntelliJ IDEA. 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 bd8c51a41..b175579f1 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 @@ -24,25 +24,29 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.QualityUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.genotype.Haplotype; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.sam.AlignmentUtils; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; -import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.genotype.Haplotype; -import org.broadinstitute.sting.utils.pileup.*; import java.util.*; -import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.sam.AlignmentUtils; public class HaplotypeScore implements InfoFieldAnnotation, StandardAnnotation { private final static boolean DEBUG = false; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HardyWeinberg.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HardyWeinberg.java index ecebfbbd2..d86728d5e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HardyWeinberg.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HardyWeinberg.java @@ -1,20 +1,21 @@ package org.broadinstitute.sting.gatk.walkers.annotator; import org.broad.tribble.util.popgen.HardyWeinbergCalculation; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.WorkInProgressAnnotation; import org.broadinstitute.sting.utils.QualityUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class HardyWeinberg implements InfoFieldAnnotation, WorkInProgressAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HomopolymerRun.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HomopolymerRun.java index 099780fa7..02efd854c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HomopolymerRun.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/HomopolymerRun.java @@ -1,19 +1,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class HomopolymerRun implements InfoFieldAnnotation, StandardAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/IndelType.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/IndelType.java index ee8b01d7d..12b48473d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/IndelType.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/IndelType.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.utils.IndelUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java index f23433bb5..1d999c531 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/LowMQ.java @@ -1,19 +1,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class LowMQ implements InfoFieldAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java index 8260a5a81..cc62580a9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityRankSumTest.java @@ -1,17 +1,17 @@ package org.broadinstitute.sting.gatk.walkers.annotator; +import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; import org.broadinstitute.sting.utils.QualityUtils; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; -import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; -import java.util.Arrays; public class MappingQualityRankSumTest extends RankSumTest { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZero.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZero.java index 25a7b286d..f240d02bc 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZero.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZero.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroBySample.java index 00cc30309..0ca53adf2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroBySample.java @@ -25,22 +25,22 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import org.broadinstitute.sting.utils.pileup.PileupElement; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroFraction.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroFraction.java index dc4934ade..08a25a7e3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroFraction.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/MappingQualityZeroFraction.java @@ -1,15 +1,15 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java index 3b64abfff..1c70a1b33 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/NBaseCount.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/QualByDepth.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/QualByDepth.java index 720984835..2175d39e6 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/QualByDepth.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/QualByDepth.java @@ -1,19 +1,19 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; public class QualByDepth extends AnnotationByDepth implements InfoFieldAnnotation, StandardAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java index 1ef7ccd0b..d52f07b58 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RMSMappingQuality.java @@ -1,20 +1,23 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.QualityUtils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.QualityUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class RMSMappingQuality implements InfoFieldAnnotation, StandardAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java index f00abd6a1..5466828f6 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/RankSumTest.java @@ -1,22 +1,23 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.MannWhitneyU; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.List; import java.util.ArrayList; -import java.util.Map; import java.util.HashMap; +import java.util.List; +import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java index a670532af..c56e2622d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadDepthAndAllelicFractionBySample.java @@ -26,25 +26,24 @@ package org.broadinstitute.sting.gatk.walkers.annotator; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; -import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFCompoundHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Arrays; +import java.util.Map; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadPosRankSumTest.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadPosRankSumTest.java index 727904a3b..aabfb2970 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadPosRankSumTest.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/ReadPosRankSumTest.java @@ -1,14 +1,17 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import net.sf.samtools.Cigar; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.walkers.genotyper.IndelGenotypeLikelihoodsCalculationModel; import org.broadinstitute.sting.gatk.walkers.indels.PairHMMIndelErrorModel; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import net.sf.samtools.*; +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SBByDepth.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SBByDepth.java index fc769ac54..a5ebd8db2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SBByDepth.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SBByDepth.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java index e2fd2a3d4..ff9092a71 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SampleList.java @@ -25,15 +25,15 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineCount; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SpanningDeletions.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SpanningDeletions.java index 0b6cbcc2e..a4668eeb6 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SpanningDeletions.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SpanningDeletions.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Arrays; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java index 351117809..b46d82d8b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/TechnologyComposition.java @@ -5,7 +5,6 @@ import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; -import org.broadinstitute.sting.utils.IndelUtils; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.pileup.PileupElement; @@ -13,7 +12,10 @@ import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.sam.ReadUtils; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java index cd5b6694b..acbeee3b2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotator.java @@ -25,24 +25,23 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotationType; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.classloader.PluginManager; +import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java index 54c8be73a..fdf498a3d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorEngine.java @@ -25,30 +25,27 @@ package org.broadinstitute.sting.gatk.walkers.annotator; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; -import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*; -import org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator.*; +import org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator.GenomicAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator.JoinTable; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotationInterfaceManager; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation; +import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.util.*; +import java.util.Map.Entry; public class VariantAnnotatorEngine { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java index e02c62baf..05c1b3c52 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotation.java @@ -25,13 +25,6 @@ package org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator; -import java.util.*; -import java.util.Map.Entry; - -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -39,7 +32,14 @@ import org.broadinstitute.sting.gatk.refdata.features.annotator.AnnotatorInputTa import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine; import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.InfoFieldAnnotation; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.util.*; +import java.util.Map.Entry; /** * This plugin for {@link VariantAnnotatorEngine} serves as the core diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotator.java index 69a35a584..b42310780 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/GenomicAnnotator.java @@ -26,28 +26,28 @@ package org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator; -import java.io.File; -import java.io.IOException; -import java.util.*; -import java.util.Map.Entry; - -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.features.annotator.AnnotatorInputTableCodec; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.Map.Entry; /** * Annotates variant calls with information from user-specified tabular files. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTable.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTable.java index c57aacb5b..714f374cf 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTable.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTable.java @@ -25,6 +25,9 @@ package org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; + import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -33,9 +36,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; - /** * This is a container that holds all data corresponding to a single join table as specified by one -J arg (ex: -J bindingName1,/path/to/file,bindingName1.columnName=bindingName2.columnName2). * Some terminology: diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTableParser.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTableParser.java index d3fcfd42a..3b6c87f90 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTableParser.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/JoinTableParser.java @@ -25,16 +25,16 @@ package org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; + import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.utils.exceptions.UserException; - /** * Used to parse files passed to the GenomicAnnotator via the -J arg. * The files must be tab-delimited, and the first non-empty/non-commented line diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java index 0ed61fc48..0bbfa51b4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/genomicannotator/TranscriptToGenomicInfo.java @@ -24,9 +24,6 @@ package org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator; -import java.io.*; -import java.util.*; - import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -36,17 +33,15 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.features.annotator.AnnotatorInputTableCodec; import org.broadinstitute.sting.gatk.refdata.features.annotator.AnnotatorInputTableFeature; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.gatk.walkers.By; -import org.broadinstitute.sting.gatk.walkers.DataSource; -import org.broadinstitute.sting.gatk.walkers.RMD; -import org.broadinstitute.sting.gatk.walkers.Reference; -import org.broadinstitute.sting.gatk.walkers.Requires; -import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.gatk.walkers.Window; +import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import java.io.IOException; +import java.io.PrintStream; +import java.util.*; + /** * Takes a table of transcripts (eg. UCSC refGene, knownGene, and CCDS tables) and generates the big table which contains * annotations for each possible variant at each transcript position (eg. 4 variants at each genomic position). diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/GenotypeAnnotation.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/GenotypeAnnotation.java index 29b256479..57bc44ab8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/GenotypeAnnotation.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/GenotypeAnnotation.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.annotator.interfaces; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import java.util.Map; import java.util.List; +import java.util.Map; public interface GenotypeAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/InfoFieldAnnotation.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/InfoFieldAnnotation.java index 5b33395b5..4e850d01b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/InfoFieldAnnotation.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/interfaces/InfoFieldAnnotation.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.annotator.interfaces; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.codecs.vcf.VCFInfoHeaderLine; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.Map; import java.util.List; +import java.util.Map; public interface InfoFieldAnnotation { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java index aa23abc67..21c8ec430 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/BeagleOutputToVCFWalker.java @@ -25,26 +25,26 @@ package org.broadinstitute.sting.gatk.walkers.beagle; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.RodWalker; +import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature; import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; + import static java.lang.Math.log10; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/ProduceBeagleInputWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/ProduceBeagleInputWalker.java index 93ee0b085..3eed12992 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/ProduceBeagleInputWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/ProduceBeagleInputWalker.java @@ -25,10 +25,6 @@ package org.broadinstitute.sting.gatk.walkers.beagle; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Input; @@ -36,17 +32,20 @@ import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.VQSRCalibrationCurve; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.StingException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.File; import java.io.PrintStream; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/VariantsToBeagleUnphasedWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/VariantsToBeagleUnphasedWalker.java index 18aa3e257..f6cd1d636 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/VariantsToBeagleUnphasedWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/beagle/VariantsToBeagleUnphasedWalker.java @@ -25,28 +25,29 @@ package org.broadinstitute.sting.gatk.walkers.beagle; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.PrintStream; -import java.util.*; +import java.util.Arrays; +import java.util.Set; /** * Produces an input file to Beagle imputation engine, listing unphased, hard-called genotypes for a single sample diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CallableLociWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CallableLociWalker.java index 2c67265d6..90e6fcd77 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CallableLociWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CallableLociWalker.java @@ -22,6 +22,8 @@ package org.broadinstitute.sting.gatk.walkers.coverage; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -31,12 +33,10 @@ import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.PileupElement; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import java.io.File; -import java.io.PrintStream; import java.io.FileNotFoundException; +import java.io.PrintStream; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java index ae947eac1..405a44c29 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoarseCoverageWalker.java @@ -26,12 +26,11 @@ package org.broadinstitute.sting.gatk.walkers.coverage; import net.sf.samtools.SAMRecord; - -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; import java.io.PrintStream; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java index 5a9c62b7f..6b91b0198 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CompareCallableLociWalker.java @@ -22,19 +22,19 @@ package org.broadinstitute.sting.gatk.walkers.coverage; +import org.broad.tribble.bed.FullBEDFeature; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; -import org.broad.tribble.bed.FullBEDFeature; import org.broadinstitute.sting.utils.exceptions.UserException; -import java.util.*; import java.io.PrintStream; +import java.util.Arrays; +import java.util.List; /** * Test routine for new VariantContext object diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoverageUtils.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoverageUtils.java index 298aa90b9..a41e55166 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoverageUtils.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/CoverageUtils.java @@ -8,7 +8,9 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.PileupElement; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * IF THERE IS NO JAVADOC RIGHT HERE, YELL AT chartl diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/DepthOfCoverageWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/DepthOfCoverageWalker.java index 91ae81cd5..c1956f1d7 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/DepthOfCoverageWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/coverage/DepthOfCoverageWalker.java @@ -26,6 +26,8 @@ package org.broadinstitute.sting.gatk.walkers.coverage; import net.sf.samtools.SAMReadGroupRecord; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -34,12 +36,13 @@ import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqCodec; import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqFeature; import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack; import org.broadinstitute.sting.gatk.refdata.tracks.builders.RMDTrackBuilder; -import org.broadinstitute.sting.gatk.refdata.utils.*; +import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; +import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; +import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java index a5ebf27bb..15b16ca6b 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/BAMDiffableReader.java @@ -24,22 +24,15 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -import net.sf.samtools.*; +import net.sf.samtools.SAMFileReader; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMRecordIterator; import net.sf.samtools.util.BlockCompressedInputStream; -import org.broad.tribble.readers.AsciiLineReader; -import org.broad.tribble.readers.LineReader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; -import java.util.Map; -import java.util.zip.GZIPInputStream; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java index 4c3f7bd95..eb8a71c2c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffElement.java @@ -24,7 +24,9 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -import com.google.java.contract.*; +import com.google.java.contract.Ensures; +import com.google.java.contract.Invariant; +import com.google.java.contract.Requires; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java index 3750496a1..963191446 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/DiffValue.java @@ -24,8 +24,6 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; -import org.broadinstitute.sting.utils.Utils; - /** * Created by IntelliJ IDEA. * User: depristo diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java index a812babaf..4e44578c7 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -30,7 +30,10 @@ import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java index 828d39717..efc101618 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaAlternateReferenceWalker.java @@ -25,13 +25,13 @@ package org.broadinstitute.sting.gatk.walkers.fasta; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Collection; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaReferenceWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaReferenceWalker.java index 6be2336c0..2dbfc76ff 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaReferenceWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/fasta/FastaReferenceWalker.java @@ -25,16 +25,15 @@ package org.broadinstitute.sting.gatk.walkers.fasta; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RefWalker; import org.broadinstitute.sting.gatk.walkers.WalkerName; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import java.io.PrintStream; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/ClusteredSnps.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/ClusteredSnps.java index b31526987..2c009f7f2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/ClusteredSnps.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/ClusteredSnps.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.filters; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; public class ClusteredSnps { private GenomeLocParser genomeLocParser; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContext.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContext.java index c3849e240..ede19746a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContext.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContext.java @@ -25,8 +25,8 @@ package org.broadinstitute.sting.gatk.walkers.filters; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; public class FiltrationContext { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContextWindow.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContextWindow.java index 225cdecc3..d7c0dd4d5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContextWindow.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/FiltrationContextWindow.java @@ -27,7 +27,9 @@ package org.broadinstitute.sting.gatk.walkers.filters; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; /** * A window of variants surrounding the current variant being investigated diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java index 884d0ac24..6c023573a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/filters/VariantFiltrationWalker.java @@ -25,21 +25,20 @@ package org.broadinstitute.sting.gatk.walkers.filters; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/AlleleFrequencyCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/AlleleFrequencyCalculationModel.java index 47be7e6fe..83a8ce7d7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/AlleleFrequencyCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/AlleleFrequencyCalculationModel.java @@ -26,14 +26,15 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.PrintStream; -import java.util.*; +import java.util.Map; +import java.util.Set; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidIndelGenotypePriors.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidIndelGenotypePriors.java index 22c9dcf91..696a74de8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidIndelGenotypePriors.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidIndelGenotypePriors.java @@ -4,8 +4,6 @@ import org.broadinstitute.sting.gatk.walkers.indels.HaplotypeIndelErrorModel; import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.genotype.DiploidGenotype; -import java.util.Arrays; - /** * Created by IntelliJ IDEA. * User: delangel diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java index ab075eaf2..2014801e4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java @@ -26,13 +26,14 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import net.sf.samtools.SAMUtils; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.pileup.FragmentPileup; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.genotype.DiploidGenotype; -import org.broadinstitute.sting.utils.sam.ReadUtils; +import org.broadinstitute.sting.utils.pileup.FragmentPileup; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import static java.lang.Math.log10; import static java.lang.Math.pow; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/ExactAFCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/ExactAFCalculationModel.java index 89504b371..5c27bc943 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/ExactAFCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/ExactAFCalculationModel.java @@ -26,17 +26,22 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.SimpleTimer; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.exceptions.UserException; import sun.reflect.generics.reflectiveObjects.NotImplementedException; -import java.util.*; import java.io.PrintStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; public class ExactAFCalculationModel extends AlleleFrequencyCalculationModel { // diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java index 3902a0b7f..8261cd588 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java @@ -30,11 +30,11 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GridSearchAFEstimation.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GridSearchAFEstimation.java index c4e315f68..10b646d63 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GridSearchAFEstimation.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GridSearchAFEstimation.java @@ -26,18 +26,18 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; import java.io.PrintStream; +import java.util.*; public class GridSearchAFEstimation extends AlleleFrequencyCalculationModel { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index 1f430548b..be2039780 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -25,16 +25,14 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import net.sf.samtools.SAMRecord; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.indels.HaplotypeIndelErrorModel; import org.broadinstitute.sting.gatk.walkers.indels.PairHMMIndelErrorModel; -import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.genotype.Haplotype; @@ -42,11 +40,10 @@ import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.broadinstitute.sting.utils.sam.ReadUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/MultiallelicGenotypeLikelihoods.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/MultiallelicGenotypeLikelihoods.java index 2cf149fd0..3652763de 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/MultiallelicGenotypeLikelihoods.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/MultiallelicGenotypeLikelihoods.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.util.ArrayList; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java index 9f4d4182f..3e3cd128b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java @@ -25,23 +25,25 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.genotype.DiploidGenotype; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.PileupElement; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsCalculationModel { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCalcLikelihoods.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCalcLikelihoods.java index cf1c57a05..22c3081a3 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCalcLikelihoods.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCalcLikelihoods.java @@ -25,8 +25,6 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.commandline.ArgumentCollection; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.DownsampleType; @@ -36,8 +34,12 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.baq.BAQ; +import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.HashSet; +import java.util.Set; +import java.util.TreeSet; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCallVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCallVariants.java index 1533e8777..68d8f9b54 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCallVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UGCallVariants.java @@ -24,19 +24,19 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.commandline.ArgumentCollection; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java index 055eb0b97..2b25df4aa 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java @@ -27,7 +27,6 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; -import org.broadinstitute.sting.commandline.Input; import java.io.File; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java index fc8a5819a..2a0338bca 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java @@ -25,22 +25,25 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.gatk.contexts.*; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.ArgumentCollection; +import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.DownsampleType; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.filters.BadMateFilter; +import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine; -import org.broadinstitute.sting.gatk.DownsampleType; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.baq.BAQ; -import org.broadinstitute.sting.commandline.*; +import org.broadinstitute.sting.utils.codecs.vcf.*; -import java.util.*; import java.io.PrintStream; +import java.util.*; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 6fc972b5d..a10897172 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -25,22 +25,24 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; +import com.google.java.contract.Requires; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.GenotypeLikelihoods; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.baq.BAQ; -import org.broadinstitute.sting.utils.pileup.*; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import com.google.java.contract.*; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.GenotypeLikelihoods; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.PrintStream; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java index df1f4f908..adb7c4c38 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/ConstrainedMateFixingManager.java @@ -1,11 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.indels; import net.sf.picard.sam.SamPairUtil; -import net.sf.samtools.*; +import net.sf.samtools.SAMFileWriter; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMRecordComparator; +import net.sf.samtools.SAMRecordCoordinateComparator; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/HaplotypeIndelErrorModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/HaplotypeIndelErrorModel.java index 7617aa9de..e68aa31e0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/HaplotypeIndelErrorModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/HaplotypeIndelErrorModel.java @@ -25,21 +25,16 @@ package org.broadinstitute.sting.gatk.walkers.indels; -import net.sf.samtools.AlignmentBlock; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.walkers.genotyper.ExactAFCalculationModel; import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.QualityUtils; -import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.genotype.Haplotype; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.sam.ReadUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.util.Arrays; import java.util.HashMap; -import java.util.List; public class HaplotypeIndelErrorModel { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java index a53665d64..61f21c488 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java @@ -25,39 +25,41 @@ package org.broadinstitute.sting.gatk.walkers.indels; +import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.samtools.*; import net.sf.samtools.util.RuntimeIOException; -import net.sf.samtools.util.StringUtil; import net.sf.samtools.util.SequenceUtil; -import net.sf.picard.reference.IndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.commandline.*; +import net.sf.samtools.util.StringUtil; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Input; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; -import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; -import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterStub; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.exceptions.StingException; -import org.broadinstitute.sting.utils.interval.IntervalMergingRule; -import org.broadinstitute.sting.utils.interval.IntervalUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.*; -import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; -import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.walkers.BAQMode; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors; +import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; +import org.broadinstitute.sting.gatk.walkers.BAQMode; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.baq.BAQ; +import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; import org.broadinstitute.sting.utils.interval.IntervalFileMergingIterator; +import org.broadinstitute.sting.utils.interval.IntervalMergingRule; +import org.broadinstitute.sting.utils.interval.IntervalUtils; import org.broadinstitute.sting.utils.interval.NwayIntervalMergingIterator; +import org.broadinstitute.sting.utils.sam.AlignmentUtils; import org.broadinstitute.sting.utils.sam.NWaySAMFileWriter; +import org.broadinstitute.sting.utils.sam.ReadUtils; import org.broadinstitute.sting.utils.text.TextFormattingUtils; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import org.broadinstitute.sting.utils.sam.ReadUtils; -import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; import java.io.FileNotFoundException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/LeftAlignIndels.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/LeftAlignIndels.java index 010e0cf6f..af8051334 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/LeftAlignIndels.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/LeftAlignIndels.java @@ -25,8 +25,10 @@ package org.broadinstitute.sting.gatk.walkers.indels; -import net.sf.samtools.*; -import org.broadinstitute.sting.commandline.*; +import net.sf.samtools.Cigar; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java index ab7ae4184..60262d6f4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java @@ -28,30 +28,25 @@ package org.broadinstitute.sting.gatk.walkers.indels; import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; -import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -/*import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.Covariate; -import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalDataManager; -import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalDatum; -import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalibrationArgumentCollection; -*/import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.QualityUtils; -import org.broadinstitute.sting.utils.classloader.PluginManager; -import org.broadinstitute.sting.utils.collections.NestedHashMap; -import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; -import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.genotype.Haplotype; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.broadinstitute.sting.utils.sam.ReadUtils; -import org.broadinstitute.sting.utils.text.XReadLines; +import org.broadinstitute.sting.utils.variantcontext.Allele; import java.io.File; -import java.io.FileNotFoundException; -import java.util.*; -import java.util.regex.Pattern; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; + +/*import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.Covariate; +import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalDataManager; +import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalDatum; +import org.broadinstitute.sting.oneoffprojects.walkers.IndelCountCovariates.RecalibrationArgumentCollection; +*/ public class PairHMMIndelErrorModel { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignedReadCounter.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignedReadCounter.java index fc196e712..2c89b907b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignedReadCounter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignedReadCounter.java @@ -25,19 +25,23 @@ package org.broadinstitute.sting.gatk.walkers.indels; -import net.sf.samtools.*; -import org.broadinstitute.sting.utils.interval.IntervalMergingRule; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.*; -import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.filters.BadMateFilter; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.utils.interval.IntervalFileMergingIterator; -import org.broadinstitute.sting.utils.sam.ReadUtils; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.filters.BadMateFilter; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.By; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.interval.IntervalFileMergingIterator; +import org.broadinstitute.sting.utils.interval.IntervalMergingRule; +import org.broadinstitute.sting.utils.sam.ReadUtils; import java.io.File; -import java.util.*; +import java.util.Iterator; @By(DataSource.READS) // walker to count realigned reads diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java index 3b94989aa..488e37f26 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/RealignerTargetCreator.java @@ -25,27 +25,27 @@ package org.broadinstitute.sting.gatk.walkers.indels; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.filters.BadCigarFilter; -import org.broadinstitute.sting.gatk.filters.Platform454Filter; -import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; import org.broadinstitute.sting.gatk.filters.BadMateFilter; +import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; +import org.broadinstitute.sting.gatk.filters.Platform454Filter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.baq.BAQ; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.ArrayList; import java.io.PrintStream; +import java.util.ArrayList; /** * Emits intervals for the Local Indel Realigner to target for cleaning. Ignores 454 reads, MQ0 reads, and reads with consecutive indel operators in the CIGAR string. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SAMRecordCoordinateComparatorWithUnmappedReads.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SAMRecordCoordinateComparatorWithUnmappedReads.java index 1fe3fdd04..3854a4a8c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SAMRecordCoordinateComparatorWithUnmappedReads.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SAMRecordCoordinateComparatorWithUnmappedReads.java @@ -23,7 +23,8 @@ */ package org.broadinstitute.sting.gatk.walkers.indels; -import net.sf.samtools.*; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMRecordCoordinateComparator; /** * Extends Picard's Comparator for sorting SAMRecords by coordinate. This one actually deals with unmapped reads diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SomaticIndelDetectorWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SomaticIndelDetectorWalker.java index 1f05ddaf0..443e6e9f2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SomaticIndelDetectorWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/SomaticIndelDetectorWalker.java @@ -25,15 +25,21 @@ package org.broadinstitute.sting.gatk.walkers.indels; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import net.sf.samtools.*; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.commandline.Tags; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.gatk.datasources.reference.ReferenceDataSource; -import org.broadinstitute.sting.gatk.filters.*; -import org.broadinstitute.sting.gatk.refdata.*; +import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; +import org.broadinstitute.sting.gatk.filters.Platform454Filter; +import org.broadinstitute.sting.gatk.filters.PlatformUnitFilter; +import org.broadinstitute.sting.gatk.filters.PlatformUnitFilterHelper; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator; +import org.broadinstitute.sting.gatk.refdata.Transcript; import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqCodec; import org.broadinstitute.sting.gatk.refdata.features.refseq.RefSeqFeature; import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack; @@ -42,22 +48,22 @@ import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODItera import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; import org.broadinstitute.sting.gatk.walkers.ReadFilters; import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.utils.interval.IntervalUtils; -import org.broadinstitute.sting.utils.interval.IntervalFileMergingIterator; -import org.broadinstitute.sting.utils.interval.IntervalMergingRule; -import org.broadinstitute.sting.utils.interval.OverlappingIntervalIterator; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.exceptions.StingException; -import org.broadinstitute.sting.utils.sam.AlignmentUtils; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocSortedSet; +import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.collections.CircularArray; import org.broadinstitute.sting.utils.collections.PrimitivePair; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.commandline.Hidden; - -import net.sf.samtools.*; +import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.interval.IntervalFileMergingIterator; +import org.broadinstitute.sting.utils.interval.IntervalMergingRule; +import org.broadinstitute.sting.utils.interval.IntervalUtils; +import org.broadinstitute.sting.utils.interval.OverlappingIntervalIterator; +import org.broadinstitute.sting.utils.sam.AlignmentUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.*; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AllelePair.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AllelePair.java index 869edf784..cb123c868 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AllelePair.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AllelePair.java @@ -23,9 +23,9 @@ */ package org.broadinstitute.sting.gatk.walkers.phasing; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.ArrayList; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java index 81d9b4ddb..9aa370d3f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/AnnotateMNPsWalker.java @@ -24,14 +24,10 @@ package org.broadinstitute.sting.gatk.walkers.phasing; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.refdata.features.annotator.AnnotatorInputTableFeature; @@ -41,9 +37,12 @@ import org.broadinstitute.sting.gatk.walkers.annotator.genomicannotator.AminoAci import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsWalker.java index 709bc44ce..5bd438605 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeMNPsWalker.java @@ -24,10 +24,6 @@ package org.broadinstitute.sting.gatk.walkers.phasing; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -35,7 +31,11 @@ import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java index abced442e..b0491a281 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java @@ -24,20 +24,19 @@ package org.broadinstitute.sting.gatk.walkers.phasing; -import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.picard.reference.ReferenceSequenceFile; import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; import java.io.FileNotFoundException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesWalker.java index ec6f5c648..be15d4541 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesWalker.java @@ -24,20 +24,22 @@ package org.broadinstitute.sting.gatk.walkers.phasing; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java index fbe6e5b5a..9702fd18c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/ReadBackedPhasingWalker.java @@ -23,27 +23,28 @@ */ package org.broadinstitute.sting.gatk.walkers.phasing; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.DisjointSet; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.HasGenomeLocation; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.codecs.vcf.SortingVCFWriter; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.*; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/SNPallelePair.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/SNPallelePair.java index db1f888a1..153c4a23f 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/SNPallelePair.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/SNPallelePair.java @@ -23,10 +23,10 @@ */ package org.broadinstitute.sting.gatk.walkers.phasing; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; public class SNPallelePair extends AllelePair { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/WriteVCF.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/WriteVCF.java index f82e48abd..2851ace0d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/WriteVCF.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/WriteVCF.java @@ -24,9 +24,9 @@ package org.broadinstitute.sting.gatk.walkers.phasing; import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; public class WriteVCF { public static void writeVCF(VariantContext vc, VCFWriter writer, Logger logger) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java index feb5f62af..2bdd4558f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountIntervals.java @@ -6,14 +6,12 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; -import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.walkers.RefWalker; -import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; -import java.util.List; import java.io.PrintStream; +import java.util.List; /** * Counts the number of contiguous regions the walker traverses over. Slower than it needs to be, but diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountLociWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountLociWalker.java index ef6ff04f2..0d68c8493 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountLociWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountLociWalker.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.walkers.qc; -import net.sf.samtools.SAMFileWriter; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountPairsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountPairsWalker.java index cece04fcf..df89efe6d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountPairsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountPairsWalker.java @@ -25,14 +25,14 @@ package org.broadinstitute.sting.gatk.walkers.qc; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.walkers.ReadPairWalker; import org.broadinstitute.sting.utils.collections.ExpandingArrayList; -import org.broadinstitute.sting.commandline.Output; -import net.sf.samtools.SAMRecord; +import java.io.PrintStream; import java.util.Collection; import java.util.List; -import java.io.PrintStream; /** * Counts the number of read pairs encountered in a file sorted in diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountReadsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountReadsWalker.java index 74f63aa2f..87c0409b9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountReadsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountReadsWalker.java @@ -1,11 +1,11 @@ package org.broadinstitute.sting.gatk.walkers.qc; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.DataSource; import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.walkers.Requires; /** * Walks over the input data set, calculating the number of reads seen for diagnostic purposes. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodByRefWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodByRefWalker.java index a4e80138f..d1545f159 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodByRefWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodByRefWalker.java @@ -25,13 +25,13 @@ package org.broadinstitute.sting.gatk.walkers.qc; +import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RefWalker; import org.broadinstitute.sting.utils.collections.ExpandingArrayList; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.commandline.Argument; /** * Prints out counts of the number of reference ordered data objects are diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodWalker.java index 92867e1a9..8a03dea44 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CountRodWalker.java @@ -27,23 +27,24 @@ package org.broadinstitute.sting.gatk.walkers.qc; import net.sf.samtools.SAMSequenceDictionary; import net.sf.samtools.SAMSequenceRecord; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.TreeReducible; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.collections.ExpandingArrayList; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import java.io.PrintStream; import java.util.ArrayList; -import java.util.List; import java.util.Collection; import java.util.LinkedList; -import java.io.PrintStream; +import java.util.List; /** * Prints out counts of the number of reference ordered data objects are diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java index 5ae35416a..b5f5442cd 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/CycleQualityWalker.java @@ -25,22 +25,22 @@ package org.broadinstitute.sting.gatk.walkers.qc; -import org.broadinstitute.sting.gatk.walkers.Requires; -import org.broadinstitute.sting.gatk.walkers.DataSource; -import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.collections.PrimitivePair; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.sam.AlignmentUtils; +import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; -import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMReadGroupRecord; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.utils.collections.PrimitivePair; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import java.util.*; import java.io.*; +import java.util.*; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java index 39b69ba29..d3b992cb5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/PrintLocusContextWalker.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.qc; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.walkers.LocusWalker; +import org.broadinstitute.sting.gatk.walkers.TreeReducible; -import java.util.List; -import java.util.Arrays; import java.io.PrintStream; - -import net.sf.samtools.SAMRecord; +import java.util.Arrays; +import java.util.List; /** * At each locus in the input data set, prints the reference base, genomic location, and diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java index 2f1773d01..908e389a8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadClippingStatsWalker.java @@ -22,21 +22,24 @@ package org.broadinstitute.sting.gatk.walkers.qc; -import org.broadinstitute.sting.gatk.walkers.Requires; -import org.broadinstitute.sting.gatk.walkers.DataSource; -import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.sam.AlignmentUtils; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; -import net.sf.samtools.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import java.util.*; -import java.io.*; +import java.io.PrintStream; +import java.util.Arrays; /** * User: depristo diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadValidationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadValidationWalker.java index 6ad0340a4..fa1bb4d55 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadValidationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ReadValidationWalker.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.qc; +import net.sf.samtools.SAMFileWriter; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMFileWriter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.List; import java.util.ArrayList; +import java.util.List; /* diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java index 9cb715507..170630b77 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/RodSystemValidationWalker.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.walkers.qc; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -8,8 +7,11 @@ import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; -import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.gatk.walkers.Reference; +import org.broadinstitute.sting.gatk.walkers.RodWalker; +import org.broadinstitute.sting.gatk.walkers.Window; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.*; import java.math.BigInteger; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java index bc68be592..e1e6c4b69 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/qc/ValidatingPileupWalker.java @@ -25,20 +25,20 @@ package org.broadinstitute.sting.gatk.walkers.qc; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.features.sampileup.SAMPileupFeature; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; -import java.util.Arrays; import java.io.PrintStream; +import java.util.Arrays; /** * At every locus in the input set, compares the pileup data (reference base, aligned base from diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesGatherer.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesGatherer.java index 568e1b638..fc6b3daee 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesGatherer.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesGatherer.java @@ -7,7 +7,6 @@ import org.broadinstitute.sting.utils.text.XReadLines; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Pattern; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java index c21f548b3..8c6539f8d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CountCovariatesWalker.java @@ -27,24 +27,25 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; import org.broad.tribble.bed.BEDCodec; import org.broad.tribble.dbsnp.DbSNPCodec; -import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; -import org.broadinstitute.sting.utils.codecs.vcf.VCF3Codec; -import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.ArgumentCollection; import org.broadinstitute.sting.commandline.Gather; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; +import org.broadinstitute.sting.gatk.filters.MappingQualityUnavailableReadFilter; import org.broadinstitute.sting.gatk.filters.MappingQualityZeroReadFilter; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.classloader.PluginManager; +import org.broadinstitute.sting.utils.codecs.vcf.VCF3Codec; +import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec; import org.broadinstitute.sting.utils.collections.NestedHashMap; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.ArgumentCollection; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.pileup.PileupElement; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CycleCovariate.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CycleCovariate.java index 64e0864c0..945d02837 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CycleCovariate.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/CycleCovariate.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; import net.sf.samtools.SAMRecord; - import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.exceptions.UserException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/DinucCovariate.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/DinucCovariate.java index 0de6897d0..a7717161a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/DinucCovariate.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/DinucCovariate.java @@ -1,11 +1,10 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; -import java.util.HashMap; - import net.sf.samtools.SAMRecord; - import org.broadinstitute.sting.utils.BaseUtils; +import java.util.HashMap; + /* * Copyright (c) 2009 The Broad Institute * diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDataManager.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDataManager.java index fdbeb6a31..e6d0b306c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDataManager.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDataManager.java @@ -25,19 +25,21 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; +import net.sf.samtools.SAMReadGroupRecord; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMUtils; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.collections.NestedHashMap; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import org.broadinstitute.sting.utils.*; -import org.broadinstitute.sting.utils.collections.NestedHashMap; +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; -import java.util.*; - -import net.sf.samtools.SAMRecord; -import net.sf.samtools.SAMReadGroupRecord; -import net.sf.samtools.SAMUtils; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDatumOptimized.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDatumOptimized.java index 7ba441ccc..f04989fa5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDatumOptimized.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/RecalDatumOptimized.java @@ -3,7 +3,7 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.QualityUtils; -import java.util.*; +import java.util.List; /* * Copyright (c) 2010 The Broad Institute diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java index 0eaa1245e..0277fda0d 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java @@ -25,31 +25,33 @@ package org.broadinstitute.sting.gatk.walkers.recalibration; -import java.io.File; -import java.io.FileNotFoundException; -import java.util.*; -import java.util.regex.Pattern; - import net.sf.samtools.*; import net.sf.samtools.util.SequenceUtil; - +import org.broadinstitute.sting.commandline.*; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.classloader.PluginManager; -import org.broadinstitute.sting.utils.collections.NestedHashMap; import org.broadinstitute.sting.utils.QualityUtils; -import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.text.TextFormattingUtils; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.baq.BAQ; -import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.commandline.*; +import org.broadinstitute.sting.utils.classloader.PluginManager; +import org.broadinstitute.sting.utils.collections.NestedHashMap; +import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; +import org.broadinstitute.sting.utils.text.TextFormattingUtils; +import org.broadinstitute.sting.utils.text.XReadLines; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.regex.Pattern; /** * This walker is designed to work as the second pass in a two-pass processing step, doing a by-read traversal. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/CreateSequenomMask.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/CreateSequenomMask.java index c1c17bda5..b3b63bb96 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/CreateSequenomMask.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/CreateSequenomMask.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.sequenom; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.PrintStream; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/PickSequenomProbes.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/PickSequenomProbes.java index fde233b5d..b877ff70b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/PickSequenomProbes.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/sequenom/PickSequenomProbes.java @@ -25,29 +25,27 @@ package org.broadinstitute.sting.gatk.walkers.sequenom; -import net.sf.samtools.util.CloseableIterator; import org.broad.tribble.bed.BEDCodec; -import org.broad.tribble.dbsnp.DbSNPCodec; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.*; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData; +import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator; import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack; import org.broadinstitute.sting.gatk.refdata.tracks.builders.RMDTrackBuilder; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; -import java.util.*; import java.io.PrintStream; +import java.util.*; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java index c9c5e09a8..fe3173506 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java @@ -1,14 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval; +import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.samtools.SAMSequenceRecord; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; @@ -20,22 +18,21 @@ import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.gatk.walkers.Window; import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.VariantEvaluator; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.Tranche; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibrator; import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; -import net.sf.picard.reference.IndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - -import java.io.FileNotFoundException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.File; +import java.io.FileNotFoundException; import java.io.PrintStream; import java.lang.reflect.Field; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompEvalGenotypes.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompEvalGenotypes.java index 787dbe9af..925bff9c0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompEvalGenotypes.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompEvalGenotypes.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.variantcontext.Genotype; class NewCompEvalGenotypes { private GenomeLoc loc; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java index 85373baa8..255a54737 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CompOverlap.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; /** * The Broad Institute diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java index befb2ff13..8c281b2f8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; @Analysis(description = "Counts different classes of variants in the sample") public class CountVariants extends VariantEvaluator implements StandardEval { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java index 58803c9d0..bbd3f5f54 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypeConcordance.java @@ -1,18 +1,18 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; import org.apache.log4j.Logger; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java index 407b71893..a476a2680 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/GenotypePhasingEvaluator.java @@ -1,9 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; import org.apache.log4j.Logger; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -12,8 +9,12 @@ import org.broadinstitute.sting.gatk.walkers.phasing.ReadBackedPhasingWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.NewEvaluationContext; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.HashMap; import java.util.HashSet; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java index f7f9fce0c..77def0f30 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelLengthHistogram.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; /** * IF THERE IS NO JAVADOC RIGHT HERE, YELL AT chartl diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java index dd4bb492e..6e1b76acd 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelMetricsByAC.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java index 1bd420e0a..d99196ecf 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/IndelStatistics.java @@ -1,15 +1,15 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.IndelUtils; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java index 16ec74433..a0cc393d9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/MendelianViolationEvaluator.java @@ -1,15 +1,15 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.MendelianViolation; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; /** * Mendelian violation detection and counting diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java index e83914ef8..b209ee13d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/PrintMissingComp.java @@ -24,12 +24,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; @Analysis(name = "PrintMissingComp", description = "the overlap between eval and comp sites") public class PrintMissingComp extends VariantEvaluator { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SamplePreviousGenotypes.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SamplePreviousGenotypes.java index 5f3e6b0fa..751f61a97 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SamplePreviousGenotypes.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SamplePreviousGenotypes.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.variantcontext.Genotype; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java index 395309975..d466645ea 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java @@ -1,17 +1,18 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.*; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.Degeneracy; import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.Sample; import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.StateKey; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.ArrayList; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java index f9cda5e0b..ec43cbd55 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ThetaVariantEvaluator.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java index deeafd851..be957abd7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/TiTvVariantEvaluator.java @@ -1,13 +1,13 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; @Analysis(description = "Ti/Tv Variant Evaluator") public class TiTvVariantEvaluator extends VariantEvaluator implements StandardEval { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java index 756427581..9c331b577 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/ValidationReport.java @@ -1,16 +1,16 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.Set; /** * The Broad Institute diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantEvaluator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantEvaluator.java index 6017ecca3..e29e7ed50 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantEvaluator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantEvaluator.java @@ -1,12 +1,12 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.NewEvaluationContext; import org.broadinstitute.sting.gatk.walkers.varianteval.util.StateKey; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; public abstract class VariantEvaluator { public void initialize(VariantEvalWalker walker) {} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java index 29a61e27a..b6ad55b18 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantQualityScore.java @@ -25,16 +25,16 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; -import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis; +import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint; import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType; import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.ArrayList; import java.util.HashMap; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java index 2cbc66e31..411493d4f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleCount.java @@ -1,12 +1,11 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; -import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleFrequency.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleFrequency.java index 48b4ffa91..2ffc7716c 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleFrequency.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/AlleleFrequency.java @@ -1,10 +1,10 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java index 9942ba8d6..c6975808f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Contig.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Contig.java index 1a9d31085..c14355035 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Contig.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Contig.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java index 15b1d41c1..3e8a6ed17 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java index 65af6090c..155a66186 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java @@ -1,14 +1,14 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.HashMap; -import java.util.Set; import java.util.HashSet; +import java.util.Set; public class Degeneracy extends VariantStratifier { private ArrayList states; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java index 7bd15a974..40f952fd2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java index 8d8782ab7..3b7a419f2 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java index fd724d6d1..c6c094f8e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java index a7ccd3182..76efedbf4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java @@ -1,10 +1,10 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java index 39d2e6b4d..a0973a088 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Collection; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java index f909de4f3..a2a3eb3fb 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java index 218cb23ca..2c4b8bc46 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java @@ -1,11 +1,10 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; import org.broadinstitute.sting.gatk.walkers.varianteval.util.SortableJexlVCMatchExp; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/NewEvaluationContext.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/NewEvaluationContext.java index 3208c26bb..8112ae97f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/NewEvaluationContext.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/NewEvaluationContext.java @@ -1,6 +1,5 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.util; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; @@ -9,6 +8,7 @@ import org.broadinstitute.sting.gatk.walkers.varianteval.evaluators.VariantEvalu import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.VariantStratifier; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.HashMap; import java.util.Set; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/SortableJexlVCMatchExp.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/SortableJexlVCMatchExp.java index 0281653af..38f7a7f40 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/SortableJexlVCMatchExp.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/SortableJexlVCMatchExp.java @@ -1,6 +1,6 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.util; -import org.apache.commons.jexl2.*; +import org.apache.commons.jexl2.Expression; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; public class SortableJexlVCMatchExp extends VariantContextUtils.JexlVCMatchExp implements Comparable { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java index eabd2e588..0a915db37 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java @@ -1,9 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.util; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.report.GATKReport; import org.broadinstitute.sting.gatk.report.GATKReportTable; @@ -16,6 +14,8 @@ import org.broadinstitute.sting.gatk.walkers.varianteval.stratifications.Variant import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.lang.reflect.Field; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java index d4e07dccf..403c67d3e 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java @@ -25,23 +25,23 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.commandline.*; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Input; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.collections.NestedHashMap; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; import java.io.FileNotFoundException; -import java.lang.Double; import java.util.*; /** 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 64fe36637..15424f0f7 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 @@ -25,11 +25,14 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; -import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintStream; import java.util.*; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java index 5deb5d8c2..bc7252ec2 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VQSRCalibrationCurve.java @@ -26,10 +26,10 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; import java.io.FileNotFoundException; 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 ddeda1699..67d54a408 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 @@ -26,7 +26,6 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; @@ -34,9 +33,12 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.collections.ExpandingArrayList; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.PrintStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java index 2d0355d7d..8179463eb 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrator.java @@ -25,14 +25,12 @@ package org.broadinstitute.sting.gatk.walkers.variantrecalibration; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.ArgumentCollection; import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RodWalker; @@ -42,6 +40,8 @@ import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.collections.ExpandingArrayList; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.File; import java.io.FileNotFoundException; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariants.java index 597a54dc1..837f352f8 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/CombineVariants.java @@ -25,12 +25,12 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; +import org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.Reference; import org.broadinstitute.sting.gatk.walkers.Requires; @@ -38,11 +38,10 @@ import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.Window; import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; -import org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java index ba6f5e513..b45ee1b67 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java @@ -24,18 +24,21 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; -import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Map; +import java.util.Set; /** * Filters a lifted-over VCF file for ref bases that have been changed. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java index d9dd85f0c..2ebd183f4 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java @@ -28,21 +28,17 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.SortingVCFWriter; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.sam.AlignmentUtils; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java index 7eda54387..4f05c8aac 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java @@ -24,27 +24,27 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; -import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; - -import java.io.File; -import java.util.*; - import net.sf.picard.PicardException; import net.sf.picard.liftover.LiftOver; import net.sf.picard.util.Interval; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileReader; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.RMD; +import org.broadinstitute.sting.gatk.walkers.Requires; +import org.broadinstitute.sting.gatk.walkers.RodWalker; +import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; + +import java.io.File; +import java.util.*; /** * Lifts a VCF file over from one build to another. Note that the resulting VCF could be mis-sorted. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/RandomlySplitVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/RandomlySplitVariants.java index 0c41a9728..f0756d884 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/RandomlySplitVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/RandomlySplitVariants.java @@ -24,11 +24,6 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.StandardVCFWriter; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; @@ -39,11 +34,15 @@ import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; /** * Takes a VCF file, randomly splits variants into two different sets, and outputs 2 new VCFs with the results. diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java index cbac54326..1db692e9f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariants.java @@ -24,27 +24,26 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.commandline.Hidden; -import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.utils.variantcontext.*; -import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.utils.MendelianViolation; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.RMD; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.RodWalker; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.utils.MendelianViolation; import org.broadinstitute.sting.utils.SampleUtils; -import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.File; -import java.lang.annotation.AnnotationFormatError; import java.util.*; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java index 1bd73414c..0644c669b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/ValidateVariants.java @@ -25,22 +25,25 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broad.tribble.dbsnp.DbSNPFeature; import org.broad.tribble.TribbleException; +import org.broad.tribble.dbsnp.DbSNPFeature; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; import java.io.File; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantValidationAssessor.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantValidationAssessor.java index 482679593..86bb3b0e8 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantValidationAssessor.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantValidationAssessor.java @@ -25,20 +25,19 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.SampleUtils; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToTable.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToTable.java index 71dd5df3f..8d90af65a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToTable.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToTable.java @@ -24,18 +24,17 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.Requires; import org.broadinstitute.sting.gatk.walkers.RodWalker; -import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.PrintStream; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java index 79134b553..aa0e5987f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/VariantsToVCF.java @@ -28,26 +28,26 @@ package org.broadinstitute.sting.gatk.walkers.variantutils; import net.sf.samtools.util.CloseableIterator; import org.broad.tribble.dbsnp.DbSNPCodec; import org.broad.tribble.dbsnp.DbSNPFeature; -import org.broadinstitute.sting.utils.codecs.hapmap.HapMapFeature; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.codecs.vcf.*; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.gatk.refdata.*; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.VariantContextAdaptors; import org.broadinstitute.sting.gatk.refdata.tracks.builders.RMDTrackBuilder; import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; -import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.codecs.hapmap.HapMapFeature; +import org.broadinstitute.sting.utils.codecs.vcf.*; +import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/jna/clibrary/LibC.java b/public/java/src/org/broadinstitute/sting/jna/clibrary/LibC.java index b01533ee6..b5efcc153 100644 --- a/public/java/src/org/broadinstitute/sting/jna/clibrary/LibC.java +++ b/public/java/src/org/broadinstitute/sting/jna/clibrary/LibC.java @@ -24,7 +24,10 @@ package org.broadinstitute.sting.jna.clibrary; -import com.sun.jna.*; +import com.sun.jna.LastErrorException; +import com.sun.jna.Native; +import com.sun.jna.NativeLong; +import com.sun.jna.Structure; import com.sun.jna.ptr.NativeLongByReference; /** diff --git a/public/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibLsf.java b/public/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibLsf.java index 0c0579d6f..c7b3de6cf 100644 --- a/public/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibLsf.java +++ b/public/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibLsf.java @@ -29,7 +29,7 @@ import com.sun.jna.ptr.FloatByReference; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; import org.broadinstitute.sting.jna.clibrary.JNAUtils; -import org.broadinstitute.sting.jna.clibrary.LibC.*; +import org.broadinstitute.sting.jna.clibrary.LibC.timeval; /* NOTE: This library uses Pointer for some Struct.ByReference members going diff --git a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentDefinitionField.java b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentDefinitionField.java index fe6758e76..c09c4037e 100644 --- a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentDefinitionField.java +++ b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentDefinitionField.java @@ -27,13 +27,16 @@ package org.broadinstitute.sting.queue.extensions.gatk; import net.sf.samtools.BAMIndex; import net.sf.samtools.SAMFileWriter; import org.broad.tribble.Tribble; -import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor; +import org.broadinstitute.sting.utils.codecs.vcf.VCFWriter; import java.io.File; import java.lang.annotation.Annotation; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; public abstract class ArgumentDefinitionField extends ArgumentField { diff --git a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentField.java b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentField.java index 2da427d44..e90933504 100644 --- a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentField.java +++ b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/ArgumentField.java @@ -35,7 +35,10 @@ import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; public abstract class ArgumentField { diff --git a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java index 21fb44733..5095bd6e5 100644 --- a/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java +++ b/public/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java @@ -27,17 +27,20 @@ package org.broadinstitute.sting.queue.extensions.gatk; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.broadinstitute.sting.commandline.*; +import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; +import org.broadinstitute.sting.commandline.CommandLineProgram; +import org.broadinstitute.sting.commandline.Output; +import org.broadinstitute.sting.commandline.ParsingEngine; import org.broadinstitute.sting.gatk.CommandLineGATK; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.WalkerManager; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.filters.FilterManager; import org.broadinstitute.sting.gatk.filters.ReadFilter; -import org.broadinstitute.sting.gatk.io.stubs.VCFWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor; +import org.broadinstitute.sting.gatk.io.stubs.VCFWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.refdata.tracks.builders.RMDTrackBuilder; import org.broadinstitute.sting.gatk.walkers.PartitionBy; import org.broadinstitute.sting.gatk.walkers.PartitionType; diff --git a/public/java/src/org/broadinstitute/sting/utils/DisjointSet.java b/public/java/src/org/broadinstitute/sting/utils/DisjointSet.java index 5f68d3414..52c18e6d6 100644 --- a/public/java/src/org/broadinstitute/sting/utils/DisjointSet.java +++ b/public/java/src/org/broadinstitute/sting/utils/DisjointSet.java @@ -23,7 +23,9 @@ */ package org.broadinstitute.sting.utils; -import java.util.*; +import java.util.Collection; +import java.util.Set; +import java.util.TreeSet; public class DisjointSet { private ItemNode[] nodes; diff --git a/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java b/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java index 1f8800542..b96923589 100644 --- a/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java +++ b/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java @@ -2,7 +2,6 @@ package org.broadinstitute.sting.utils; import com.google.java.contract.Ensures; import com.google.java.contract.Requires; -import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.Serializable; diff --git a/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java b/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java index 18a1e7ffd..a5c6e0537 100644 --- a/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java +++ b/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java @@ -25,12 +25,14 @@ package org.broadinstitute.sting.utils; -import com.google.java.contract.*; +import com.google.java.contract.Ensures; +import com.google.java.contract.Invariant; +import com.google.java.contract.Requires; +import com.google.java.contract.ThrowEnsures; import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMSequenceDictionary; import net.sf.samtools.SAMSequenceRecord; - import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; diff --git a/public/java/src/org/broadinstitute/sting/utils/IndelUtils.java b/public/java/src/org/broadinstitute/sting/utils/IndelUtils.java index 30e1a3f5b..af69ebca6 100755 --- a/public/java/src/org/broadinstitute/sting/utils/IndelUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/IndelUtils.java @@ -1,8 +1,8 @@ package org.broadinstitute.sting.utils; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.Arrays; diff --git a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java index 50aa0f707..36ed506aa 100755 --- a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java @@ -25,17 +25,14 @@ package org.broadinstitute.sting.utils; -import cern.jet.math.Arithmetic; - -import java.math.BigDecimal; -import java.util.*; - import com.google.java.contract.Requires; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.utils.collections.PrimitivePair; import org.broadinstitute.sting.utils.exceptions.UserException; +import java.math.BigDecimal; +import java.util.*; + /** * MathUtils is a static class (no instantiation allowed!) with some useful math methods. * diff --git a/public/java/src/org/broadinstitute/sting/utils/MendelianViolation.java b/public/java/src/org/broadinstitute/sting/utils/MendelianViolation.java index a8089ffe8..c6a07b5ce 100755 --- a/public/java/src/org/broadinstitute/sting/utils/MendelianViolation.java +++ b/public/java/src/org/broadinstitute/sting/utils/MendelianViolation.java @@ -1,12 +1,13 @@ package org.broadinstitute.sting.utils; -import org.broadinstitute.sting.utils.variantcontext.Genotype; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.utils.exceptions.UserException; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.util.*; +import java.util.Collection; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/public/java/src/org/broadinstitute/sting/utils/PathUtils.java b/public/java/src/org/broadinstitute/sting/utils/PathUtils.java index 47466be20..822d04dfd 100755 --- a/public/java/src/org/broadinstitute/sting/utils/PathUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/PathUtils.java @@ -2,10 +2,10 @@ package org.broadinstitute.sting.utils; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.List; -import java.util.ArrayList; import java.io.File; import java.io.FilenameFilter; +import java.util.ArrayList; +import java.util.List; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/ReservoirDownsampler.java b/public/java/src/org/broadinstitute/sting/utils/ReservoirDownsampler.java index 30257d967..a758df431 100644 --- a/public/java/src/org/broadinstitute/sting/utils/ReservoirDownsampler.java +++ b/public/java/src/org/broadinstitute/sting/utils/ReservoirDownsampler.java @@ -3,7 +3,9 @@ package org.broadinstitute.sting.utils; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; /** * Randomly downsample from a stream of elements. This algorithm is a direct, diff --git a/public/java/src/org/broadinstitute/sting/utils/SWPairwiseAlignment.java b/public/java/src/org/broadinstitute/sting/utils/SWPairwiseAlignment.java index 4b7fa3e41..92d73a5ce 100755 --- a/public/java/src/org/broadinstitute/sting/utils/SWPairwiseAlignment.java +++ b/public/java/src/org/broadinstitute/sting/utils/SWPairwiseAlignment.java @@ -24,15 +24,14 @@ package org.broadinstitute.sting.utils; +import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; -import net.sf.samtools.Cigar; - -import java.util.*; - import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.StingException; +import java.util.*; + /** * Created by IntelliJ IDEA. * User: asivache diff --git a/public/java/src/org/broadinstitute/sting/utils/SampleUtils.java b/public/java/src/org/broadinstitute/sting/utils/SampleUtils.java index c0370064d..f9997bfd8 100755 --- a/public/java/src/org/broadinstitute/sting/utils/SampleUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/SampleUtils.java @@ -27,12 +27,12 @@ package org.broadinstitute.sting.utils; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMReadGroupRecord; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; +import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.utils.codecs.vcf.VCFUtils; +import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import java.io.File; import java.io.FileNotFoundException; diff --git a/public/java/src/org/broadinstitute/sting/utils/SimpleTimer.java b/public/java/src/org/broadinstitute/sting/utils/SimpleTimer.java index a59c5134a..342087b41 100644 --- a/public/java/src/org/broadinstitute/sting/utils/SimpleTimer.java +++ b/public/java/src/org/broadinstitute/sting/utils/SimpleTimer.java @@ -1,7 +1,10 @@ package org.broadinstitute.sting.utils; +import com.google.java.contract.Ensures; +import com.google.java.contract.Invariant; +import com.google.java.contract.Requires; + import java.io.PrintStream; -import com.google.java.contract.*; /** * A useful simple system for timing code. This code is not thread safe! diff --git a/public/java/src/org/broadinstitute/sting/utils/Utils.java b/public/java/src/org/broadinstitute/sting/utils/Utils.java index 4c13d8b18..6a50badce 100755 --- a/public/java/src/org/broadinstitute/sting/utils/Utils.java +++ b/public/java/src/org/broadinstitute/sting/utils/Utils.java @@ -25,13 +25,12 @@ package org.broadinstitute.sting.utils; -import java.util.*; - import net.sf.samtools.util.StringUtil; - import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.collections.Pair; +import java.util.*; + /** * Created by IntelliJ IDEA. * User: depristo diff --git a/public/java/src/org/broadinstitute/sting/utils/baq/BAQ.java b/public/java/src/org/broadinstitute/sting/utils/baq/BAQ.java index 456f0fa0f..ef7cf751e 100644 --- a/public/java/src/org/broadinstitute/sting/utils/baq/BAQ.java +++ b/public/java/src/org/broadinstitute/sting/utils/baq/BAQ.java @@ -1,10 +1,10 @@ package org.broadinstitute.sting.utils.baq; -import net.sf.samtools.SAMRecord; -import net.sf.samtools.CigarElement; -import net.sf.samtools.CigarOperator; import net.sf.picard.reference.IndexedFastaSequenceFile; import net.sf.picard.reference.ReferenceSequence; +import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; diff --git a/public/java/src/org/broadinstitute/sting/utils/baq/BAQSamIterator.java b/public/java/src/org/broadinstitute/sting/utils/baq/BAQSamIterator.java index 24d4152a5..26356a4a4 100644 --- a/public/java/src/org/broadinstitute/sting/utils/baq/BAQSamIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/baq/BAQSamIterator.java @@ -2,11 +2,10 @@ package org.broadinstitute.sting.utils.baq; import com.google.java.contract.Ensures; import com.google.java.contract.Requires; -import net.sf.samtools.SAMRecord; import net.sf.picard.reference.IndexedFastaSequenceFile; -import org.broadinstitute.sting.utils.baq.BAQ; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/utils/bed/BedParser.java b/public/java/src/org/broadinstitute/sting/utils/bed/BedParser.java index abcae066f..b95165841 100644 --- a/public/java/src/org/broadinstitute/sting/utils/bed/BedParser.java +++ b/public/java/src/org/broadinstitute/sting/utils/bed/BedParser.java @@ -1,11 +1,12 @@ package org.broadinstitute.sting.utils.bed; -import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.List; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/classloader/JVMUtils.java b/public/java/src/org/broadinstitute/sting/utils/classloader/JVMUtils.java index 404bd80b6..e65b8f921 100755 --- a/public/java/src/org/broadinstitute/sting/utils/classloader/JVMUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/classloader/JVMUtils.java @@ -29,9 +29,9 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.StingException; import org.reflections.util.ClasspathHelper; -import java.lang.reflect.*; import java.io.File; import java.io.IOException; +import java.lang.reflect.*; import java.net.URL; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/utils/clipreads/ClippingOp.java b/public/java/src/org/broadinstitute/sting/utils/clipreads/ClippingOp.java index 95f3e160c..5449906b2 100644 --- a/public/java/src/org/broadinstitute/sting/utils/clipreads/ClippingOp.java +++ b/public/java/src/org/broadinstitute/sting/utils/clipreads/ClippingOp.java @@ -4,9 +4,6 @@ import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.walkers.ClipReadsWalker; -import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.sam.ReadUtils; import java.util.Vector; diff --git a/public/java/src/org/broadinstitute/sting/utils/clipreads/ReadClipper.java b/public/java/src/org/broadinstitute/sting/utils/clipreads/ReadClipper.java index 031467ed9..988d297f6 100644 --- a/public/java/src/org/broadinstitute/sting/utils/clipreads/ReadClipper.java +++ b/public/java/src/org/broadinstitute/sting/utils/clipreads/ReadClipper.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.utils.clipreads; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.walkers.ClipReadsWalker; import java.util.ArrayList; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/completegenomics/CGVarCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/completegenomics/CGVarCodec.java index a286ce789..fef6c4ea0 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/completegenomics/CGVarCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/completegenomics/CGVarCodec.java @@ -30,7 +30,6 @@ import org.broad.tribble.readers.LineReader; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.regex.Matcher; diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/soapsnp/SoapSNPCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/soapsnp/SoapSNPCodec.java index 618d9ce79..e169dbdfc 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/soapsnp/SoapSNPCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/soapsnp/SoapSNPCodec.java @@ -4,11 +4,11 @@ import org.broad.tribble.Feature; import org.broad.tribble.FeatureCodec; import org.broad.tribble.NameAwareCodec; import org.broad.tribble.TribbleException; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.readers.LineReader; +import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java index e7ddac185..b7f4be39a 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/StandardVCFWriter.java @@ -33,13 +33,13 @@ import org.broad.tribble.util.LittleEndianOutputStream; import org.broad.tribble.util.ParsingUtils; import org.broad.tribble.util.PositionalStream; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.*; -import java.util.*; import java.lang.reflect.Array; +import java.util.*; /** * this class writes VCF files diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFParser.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFParser.java index dac996494..1dba351e2 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFParser.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFParser.java @@ -2,7 +2,9 @@ package org.broadinstitute.sting.utils.codecs.vcf; import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Genotype; -import java.util.*; + +import java.util.List; +import java.util.Map; /** diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java index 4037f75b9..f43891e77 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java @@ -25,10 +25,10 @@ package org.broadinstitute.sting.utils.codecs.vcf; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; +import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/utils/collections/NestedHashMap.java b/public/java/src/org/broadinstitute/sting/utils/collections/NestedHashMap.java index a36ed9ac6..d280ac804 100755 --- a/public/java/src/org/broadinstitute/sting/utils/collections/NestedHashMap.java +++ b/public/java/src/org/broadinstitute/sting/utils/collections/NestedHashMap.java @@ -25,7 +25,8 @@ package org.broadinstitute.sting.utils.collections; -import java.util.*; +import java.util.HashMap; +import java.util.Map; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/collections/RODMergingIterator.java b/public/java/src/org/broadinstitute/sting/utils/collections/RODMergingIterator.java index 3a731c2fd..6d6cb8272 100644 --- a/public/java/src/org/broadinstitute/sting/utils/collections/RODMergingIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/collections/RODMergingIterator.java @@ -27,10 +27,13 @@ package org.broadinstitute.sting.utils.collections; import org.broadinstitute.sting.gatk.refdata.utils.LocationAwareSeekableRODIterator; import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.PriorityQueue; public class RODMergingIterator implements Iterator, Iterable { PriorityQueue queue = new PriorityQueue(); diff --git a/public/java/src/org/broadinstitute/sting/utils/duplicates/DupUtils.java b/public/java/src/org/broadinstitute/sting/utils/duplicates/DupUtils.java index 41de5ef96..bba47c76c 100644 --- a/public/java/src/org/broadinstitute/sting/utils/duplicates/DupUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/duplicates/DupUtils.java @@ -26,15 +26,18 @@ package org.broadinstitute.sting.utils.duplicates; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; -import java.util.List; import java.util.Arrays; +import java.util.List; public class DupUtils { private static SAMRecord tmpCopyRead(SAMRecord read) { diff --git a/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java b/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java index 17c4a7df4..7eab6f6c9 100755 --- a/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java +++ b/public/java/src/org/broadinstitute/sting/utils/exceptions/UserException.java @@ -28,9 +28,8 @@ import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMSequenceDictionary; import net.sf.samtools.SAMSequenceRecord; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; -import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; import java.util.Arrays; diff --git a/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java b/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java index 0c5085cc7..43ef4aa74 100644 --- a/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java +++ b/public/java/src/org/broadinstitute/sting/utils/fasta/CachingIndexedFastaSequenceFile.java @@ -25,15 +25,16 @@ package org.broadinstitute.sting.utils.fasta; import net.sf.picard.PicardException; -import net.sf.picard.reference.*; +import net.sf.picard.reference.FastaSequenceIndex; +import net.sf.picard.reference.IndexedFastaSequenceFile; +import net.sf.picard.reference.ReferenceSequence; import net.sf.samtools.SAMSequenceRecord; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; import java.io.FileNotFoundException; import java.util.Arrays; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - /** * A caching version of the IndexedFastaSequenceFile that avoids going to disk as often as the raw indexer. * diff --git a/public/java/src/org/broadinstitute/sting/utils/genotype/DiploidGenotype.java b/public/java/src/org/broadinstitute/sting/utils/genotype/DiploidGenotype.java index cbfba848c..1c2cfe2e1 100755 --- a/public/java/src/org/broadinstitute/sting/utils/genotype/DiploidGenotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/genotype/DiploidGenotype.java @@ -26,7 +26,6 @@ package org.broadinstitute.sting.utils.genotype; import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.utils.MathUtils; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java index 31791e805..a17e81461 100755 --- a/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/genotype/Haplotype.java @@ -24,14 +24,14 @@ package org.broadinstitute.sting.utils.genotype; -import org.broadinstitute.sting.utils.variantcontext.Allele; -import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.variantcontext.Allele; -import java.util.*; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; public class Haplotype { protected byte[] bases = null; diff --git a/public/java/src/org/broadinstitute/sting/utils/help/ApplicationDetails.java b/public/java/src/org/broadinstitute/sting/utils/help/ApplicationDetails.java index d9e74640f..483c874dc 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/ApplicationDetails.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/ApplicationDetails.java @@ -25,13 +25,13 @@ package org.broadinstitute.sting.utils.help; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.classloader.JVMUtils; import org.broadinstitute.sting.commandline.CommandLineProgram; +import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.List; -import java.util.Collections; import java.io.IOException; +import java.util.Collections; +import java.util.List; /** * Contains details additional details that the program can diff --git a/public/java/src/org/broadinstitute/sting/utils/help/DescriptionTaglet.java b/public/java/src/org/broadinstitute/sting/utils/help/DescriptionTaglet.java index 68633a2b3..65c332048 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/DescriptionTaglet.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/DescriptionTaglet.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.utils.help; import com.sun.tools.doclets.Taglet; -import com.sun.javadoc.Tag; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/utils/help/DisplayNameTaglet.java b/public/java/src/org/broadinstitute/sting/utils/help/DisplayNameTaglet.java index be6f7f3eb..6c6dad736 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/DisplayNameTaglet.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/DisplayNameTaglet.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.utils.help; import com.sun.tools.doclets.Taglet; -import com.sun.javadoc.Tag; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/utils/help/HelpFormatter.java b/public/java/src/org/broadinstitute/sting/utils/help/HelpFormatter.java index 493f26e76..a9d71ef98 100755 --- a/public/java/src/org/broadinstitute/sting/utils/help/HelpFormatter.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/HelpFormatter.java @@ -25,22 +25,16 @@ package org.broadinstitute.sting.utils.help; +import org.apache.log4j.Logger; import org.broadinstitute.sting.commandline.ArgumentDefinition; import org.broadinstitute.sting.commandline.ArgumentDefinitionGroup; import org.broadinstitute.sting.commandline.ArgumentDefinitions; -import org.broadinstitute.sting.utils.text.TextFormattingUtils; import org.broadinstitute.sting.utils.Utils; -import org.apache.log4j.Logger; +import org.broadinstitute.sting.utils.text.TextFormattingUtils; -import java.util.Formatter; -import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Comparator; -import java.util.Collection; -import java.util.Collections; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.*; /** * Print out help for Sting command-line applications. */ diff --git a/public/java/src/org/broadinstitute/sting/utils/help/HelpTaglet.java b/public/java/src/org/broadinstitute/sting/utils/help/HelpTaglet.java index b962664eb..b350b1a29 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/HelpTaglet.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/HelpTaglet.java @@ -1,9 +1,7 @@ package org.broadinstitute.sting.utils.help; -import com.sun.tools.doclets.Taglet; import com.sun.javadoc.Tag; - -import java.util.Map; +import com.sun.tools.doclets.Taglet; /** * Basic functionality for the help taglet. diff --git a/public/java/src/org/broadinstitute/sting/utils/help/ResourceBundleExtractorDoclet.java b/public/java/src/org/broadinstitute/sting/utils/help/ResourceBundleExtractorDoclet.java index 4afac69c3..6ee12d42e 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/ResourceBundleExtractorDoclet.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/ResourceBundleExtractorDoclet.java @@ -26,14 +26,16 @@ package org.broadinstitute.sting.utils.help; import com.sun.javadoc.*; +import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.classloader.JVMUtils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.*; -import java.util.*; - -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.classloader.JVMUtils; -import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.gatk.walkers.Walker; +import java.util.HashSet; +import java.util.Properties; +import java.util.Scanner; +import java.util.Set; /** * Extracts certain types of javadoc (specifically package and class descriptions) and makes them available diff --git a/public/java/src/org/broadinstitute/sting/utils/help/SummaryTaglet.java b/public/java/src/org/broadinstitute/sting/utils/help/SummaryTaglet.java index 036bbec4f..db8b55940 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/SummaryTaglet.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/SummaryTaglet.java @@ -1,7 +1,6 @@ package org.broadinstitute.sting.utils.help; import com.sun.tools.doclets.Taglet; -import com.sun.javadoc.Tag; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/utils/instrumentation/Sizeof.java b/public/java/src/org/broadinstitute/sting/utils/instrumentation/Sizeof.java index 3420c9876..73a29ba4f 100644 --- a/public/java/src/org/broadinstitute/sting/utils/instrumentation/Sizeof.java +++ b/public/java/src/org/broadinstitute/sting/utils/instrumentation/Sizeof.java @@ -27,9 +27,9 @@ package org.broadinstitute.sting.utils.instrumentation; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.lang.instrument.Instrumentation; +import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.lang.reflect.Array; import java.util.IdentityHashMap; /** diff --git a/public/java/src/org/broadinstitute/sting/utils/interval/IntervalFileMergingIterator.java b/public/java/src/org/broadinstitute/sting/utils/interval/IntervalFileMergingIterator.java index e722ac196..988240ef9 100644 --- a/public/java/src/org/broadinstitute/sting/utils/interval/IntervalFileMergingIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/interval/IntervalFileMergingIterator.java @@ -25,16 +25,16 @@ package org.broadinstitute.sting.utils.interval; +import org.broadinstitute.sting.gatk.iterators.PushbackIterator; +import org.broadinstitute.sting.gatk.refdata.utils.StringToGenomeLocIteratorAdapter; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import org.broadinstitute.sting.gatk.iterators.PushbackIterator; -import org.broadinstitute.sting.gatk.refdata.utils.StringToGenomeLocIteratorAdapter; -import java.util.Iterator; import java.io.File; import java.io.FileNotFoundException; +import java.util.Iterator; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/interval/IntervalUtils.java b/public/java/src/org/broadinstitute/sting/utils/interval/IntervalUtils.java index 80dc35455..f551e1368 100644 --- a/public/java/src/org/broadinstitute/sting/utils/interval/IntervalUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/interval/IntervalUtils.java @@ -5,17 +5,17 @@ import net.sf.picard.util.IntervalList; import net.sf.samtools.SAMFileHeader; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.datasources.reference.ReferenceDataSource; -import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.utils.bed.BedParser; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; +import java.io.File; import java.io.IOException; import java.util.*; -import java.io.File; /** * Parse text representations of interval strings that diff --git a/public/java/src/org/broadinstitute/sting/utils/interval/NwayIntervalMergingIterator.java b/public/java/src/org/broadinstitute/sting/utils/interval/NwayIntervalMergingIterator.java index 31a2f41fb..7e87ce8b5 100644 --- a/public/java/src/org/broadinstitute/sting/utils/interval/NwayIntervalMergingIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/interval/NwayIntervalMergingIterator.java @@ -26,11 +26,10 @@ package org.broadinstitute.sting.utils.interval; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import java.util.PriorityQueue; import java.util.Iterator; +import java.util.PriorityQueue; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/interval/OverlappingIntervalIterator.java b/public/java/src/org/broadinstitute/sting/utils/interval/OverlappingIntervalIterator.java index 0b63d582e..29ffb13e4 100755 --- a/public/java/src/org/broadinstitute/sting/utils/interval/OverlappingIntervalIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/interval/OverlappingIntervalIterator.java @@ -25,9 +25,8 @@ package org.broadinstitute.sting.utils.interval; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.gatk.iterators.PushbackIterator; +import org.broadinstitute.sting.utils.GenomeLoc; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java index 543302446..3821c9c8a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java @@ -24,19 +24,16 @@ package org.broadinstitute.sting.utils.pileup; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.utils.HasGenomeLocation; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.gatk.iterators.IterableIterator; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.exceptions.StingException; import java.util.*; -import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.exceptions.StingException; - /** * A generic implementation of read-backed pileups. * diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ExtendedEventPileupElement.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ExtendedEventPileupElement.java index b6f3e9f09..26e66014c 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ExtendedEventPileupElement.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ExtendedEventPileupElement.java @@ -1,8 +1,5 @@ package org.broadinstitute.sting.utils.pileup; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.BaseUtils; import net.sf.samtools.SAMRecord; import java.util.Arrays; diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/FragmentPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/FragmentPileup.java index 6c855c1c7..f7d237401 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/FragmentPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/FragmentPileup.java @@ -1,6 +1,9 @@ package org.broadinstitute.sting.utils.pileup; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * An easy to access fragment-based pileup, which contains two separate pileups. The first diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/MergingPileupElementIterator.java b/public/java/src/org/broadinstitute/sting/utils/pileup/MergingPileupElementIterator.java index d8af2ea8f..7005cf869 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/MergingPileupElementIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/MergingPileupElementIterator.java @@ -27,9 +27,9 @@ package org.broadinstitute.sting.utils.pileup; import net.sf.picard.util.PeekableIterator; import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import java.util.PriorityQueue; import java.util.Comparator; import java.util.Iterator; +import java.util.PriorityQueue; /** * Merges multiple pileups broken down by sample. diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/PileupElement.java b/public/java/src/org/broadinstitute/sting/utils/pileup/PileupElement.java index 51e02bf74..66e1afecb 100755 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/PileupElement.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/PileupElement.java @@ -1,9 +1,10 @@ package org.broadinstitute.sting.utils.pileup; -import org.broadinstitute.sting.utils.*; +import com.google.java.contract.Ensures; +import com.google.java.contract.Requires; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.sam.ReadUtils; -import com.google.java.contract.*; /** * Created by IntelliJ IDEA. diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java index a32aa5645..8d43a368a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java @@ -24,15 +24,13 @@ package org.broadinstitute.sting.utils.pileup; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; -import java.util.Iterator; -import java.util.List; import java.util.Collection; - -import net.sf.samtools.SAMRecord; +import java.util.List; /** * A clean interface for working with extended event pileups. diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileupImpl.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileupImpl.java index a1a08c95f..31d29430a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileupImpl.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileupImpl.java @@ -23,15 +23,14 @@ */ package org.broadinstitute.sting.utils.pileup; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.*; -import net.sf.samtools.SAMRecord; - public class ReadBackedExtendedEventPileupImpl extends AbstractReadBackedPileup implements ReadBackedExtendedEventPileup { private int nInsertions; private int maxDeletionLength; // cached value of the length of the longest deletion observed at the site diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java index c52cc0b52..36b8a8c65 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java @@ -24,14 +24,13 @@ package org.broadinstitute.sting.utils.pileup; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.gatk.iterators.IterableIterator; -import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.utils.HasGenomeLocation; -import java.util.List; import java.util.Collection; +import java.util.List; /** * A data retrieval interface for accessing parts of the pileup. diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileupImpl.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileupImpl.java index 70eba577c..e5b054961 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileupImpl.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileupImpl.java @@ -23,9 +23,9 @@ */ package org.broadinstitute.sting.utils.pileup; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.utils.GenomeLoc; -import net.sf.samtools.SAMRecord; import java.util.List; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/AlignmentUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/AlignmentUtils.java index 4e4294b20..344eccb83 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/AlignmentUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/AlignmentUtils.java @@ -25,15 +25,16 @@ package org.broadinstitute.sting.utils.sam; -import net.sf.samtools.CigarOperator; -import net.sf.samtools.SAMRecord; import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; +import net.sf.samtools.CigarOperator; +import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.pileup.*; import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import java.util.ArrayList; import java.util.Arrays; diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java index 5812c9aec..5f7db458a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialReadsTraversal.java @@ -1,15 +1,13 @@ package org.broadinstitute.sting.utils.sam; -import org.broadinstitute.sting.gatk.traversals.TraversalEngine; -import org.broadinstitute.sting.gatk.walkers.Walker; -import org.broadinstitute.sting.gatk.walkers.ReadWalker; -import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.apache.log4j.Logger; - -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMRecord; +import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.datasources.providers.ShardDataProvider; +import org.broadinstitute.sting.gatk.traversals.TraversalEngine; +import org.broadinstitute.sting.gatk.walkers.ReadWalker; +import org.broadinstitute.sting.gatk.walkers.Walker; /* diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileReader.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileReader.java index ce6ca570c..adf60b16b 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileReader.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileReader.java @@ -1,15 +1,17 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.*; - -import java.io.InputStream; -import java.io.ByteArrayInputStream; -import java.io.UnsupportedEncodingException; -import java.util.*; - -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; /** * User: hanna * Date: Jun 11, 2009 diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMIterator.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMIterator.java index b683f5247..62e371bc0 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMIterator.java @@ -1,9 +1,8 @@ package org.broadinstitute.sting.utils.sam; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import org.broadinstitute.sting.gatk.ReadProperties; -import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; import java.util.Iterator; diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMQueryIterator.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMQueryIterator.java index 4f5dcca61..2b359fe6a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMQueryIterator.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMQueryIterator.java @@ -1,13 +1,12 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.SAMFileHeader; -import net.sf.samtools.SAMSequenceRecord; import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMSequenceRecord; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.util.List; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - /* * Copyright (c) 2009 The Broad Institute diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ComparableSAMRecord.java b/public/java/src/org/broadinstitute/sting/utils/sam/ComparableSAMRecord.java index 01f1dfe96..31deb7535 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ComparableSAMRecord.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ComparableSAMRecord.java @@ -26,8 +26,6 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; public class ComparableSAMRecord implements Comparable { diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMReadGroupRecord.java b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMReadGroupRecord.java index 2b8ac387c..c7ffcab0c 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMReadGroupRecord.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMReadGroupRecord.java @@ -1,6 +1,6 @@ package org.broadinstitute.sting.utils.sam; -import net.sf.samtools.*; +import net.sf.samtools.SAMReadGroupRecord; /** * @author ebanks diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java index f3d9edab9..517f9f75d 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java @@ -1,12 +1,14 @@ package org.broadinstitute.sting.utils.sam; -import java.lang.reflect.Method; -import java.util.*; - import net.sf.samtools.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @author ebanks * GATKSAMRecord diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java index 080762039..6c15910b1 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java @@ -25,13 +25,14 @@ package org.broadinstitute.sting.utils.sam; -import com.google.java.contract.*; +import com.google.java.contract.Ensures; +import com.google.java.contract.Requires; import net.sf.samtools.*; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; import java.io.File; +import java.util.*; /** * A miscellaneous collection of utilities for working with SAM files, headers, etc. diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/SAMFileReaderBuilder.java b/public/java/src/org/broadinstitute/sting/utils/sam/SAMFileReaderBuilder.java index f8a0ca6a7..bb9db5d98 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/SAMFileReaderBuilder.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/SAMFileReaderBuilder.java @@ -26,11 +26,10 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.SAMFileReader; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - /** * Allows the user to steadily accumulate information about what * components go into a SAM file writer, ultimately using this diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/SimplifyingSAMFileWriter.java b/public/java/src/org/broadinstitute/sting/utils/sam/SimplifyingSAMFileWriter.java index df2010e8b..60e1d9948 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/SimplifyingSAMFileWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/SimplifyingSAMFileWriter.java @@ -3,13 +3,6 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMRecord; -import org.broadinstitute.sting.gatk.iterators.StingSAMIterator; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.GenomeLocParser; -import org.broadinstitute.sting.utils.exceptions.UserException; - -import java.util.Iterator; -import java.util.NoSuchElementException; /** * XXX diff --git a/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java b/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java index 9beb7895b..f6aa882ad 100644 --- a/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java @@ -26,7 +26,6 @@ package org.broadinstitute.sting.utils.text; import org.broadinstitute.sting.commandline.ParsingEngine; import org.broadinstitute.sting.commandline.Tags; -import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; import org.broadinstitute.sting.gatk.refdata.utils.helpers.DbSNPHelper; diff --git a/public/java/src/org/broadinstitute/sting/utils/text/TextFormattingUtils.java b/public/java/src/org/broadinstitute/sting/utils/text/TextFormattingUtils.java index 803d6ac0f..1d4251542 100644 --- a/public/java/src/org/broadinstitute/sting/utils/text/TextFormattingUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/text/TextFormattingUtils.java @@ -28,11 +28,11 @@ package org.broadinstitute.sting.utils.text; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import java.util.*; -import java.util.regex.Pattern; -import java.util.regex.Matcher; -import java.io.StringReader; import java.io.IOException; +import java.io.StringReader; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Common utilities for dealing with text formatting. diff --git a/public/java/src/org/broadinstitute/sting/utils/text/XReadLines.java b/public/java/src/org/broadinstitute/sting/utils/text/XReadLines.java index 064256388..52b6f3b01 100644 --- a/public/java/src/org/broadinstitute/sting/utils/text/XReadLines.java +++ b/public/java/src/org/broadinstitute/sting/utils/text/XReadLines.java @@ -25,10 +25,10 @@ package org.broadinstitute.sting.utils.text; -import java.util.Iterator; -import java.util.List; -import java.util.LinkedList; import java.io.*; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; /** * Support for Python-like xreadlines() function as a class. This is an iterator and iterable over diff --git a/public/java/src/org/broadinstitute/sting/utils/threading/FileBackedGenomeLocProcessingTracker.java b/public/java/src/org/broadinstitute/sting/utils/threading/FileBackedGenomeLocProcessingTracker.java index cae099eeb..3763ec67d 100644 --- a/public/java/src/org/broadinstitute/sting/utils/threading/FileBackedGenomeLocProcessingTracker.java +++ b/public/java/src/org/broadinstitute/sting/utils/threading/FileBackedGenomeLocProcessingTracker.java @@ -1,18 +1,14 @@ package org.broadinstitute.sting.utils.threading; import org.apache.log4j.Logger; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.*; -import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.concurrent.locks.ReentrantLock; /** * Keeps a copy of the processing locks in a file diff --git a/public/java/src/org/broadinstitute/sting/utils/threading/NoOpGenomeLocProcessingTracker.java b/public/java/src/org/broadinstitute/sting/utils/threading/NoOpGenomeLocProcessingTracker.java index 4e61ef9e1..ad2a6d31b 100644 --- a/public/java/src/org/broadinstitute/sting/utils/threading/NoOpGenomeLocProcessingTracker.java +++ b/public/java/src/org/broadinstitute/sting/utils/threading/NoOpGenomeLocProcessingTracker.java @@ -1,9 +1,5 @@ package org.broadinstitute.sting.utils.threading; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; - -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; diff --git a/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileLock.java b/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileLock.java index 3eb2be96b..0f47da413 100644 --- a/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileLock.java +++ b/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileLock.java @@ -6,10 +6,7 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.channels.*; /** * User: depristo diff --git a/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileThreadSafeLock.java b/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileThreadSafeLock.java index dec69f7c2..d70879a0a 100644 --- a/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileThreadSafeLock.java +++ b/public/java/src/org/broadinstitute/sting/utils/threading/SharedFileThreadSafeLock.java @@ -2,13 +2,8 @@ package org.broadinstitute.sting.utils.threading; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.channels.*; /** * User: depristo diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java index 901de6fae..c3f437f11 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/Allele.java @@ -1,9 +1,9 @@ package org.broadinstitute.sting.utils.variantcontext; -import java.util.Arrays; -import java.util.List; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.List; /** * Immutable representation of an allele diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypeLikelihoods.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypeLikelihoods.java index 3feaf5e1c..dba16cf86 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypeLikelihoods.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypeLikelihoods.java @@ -24,8 +24,8 @@ package org.broadinstitute.sting.utils.variantcontext; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broad.tribble.TribbleException; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; public class GenotypeLikelihoods { public static final boolean CAP_PLS = false; diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/MutableVariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/MutableVariantContext.java index 4efba8825..a191670a4 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/MutableVariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/MutableVariantContext.java @@ -1,7 +1,10 @@ package org.broadinstitute.sting.utils.variantcontext; -import java.util.*; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; /** * Mutable version of VariantContext diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java index 92c5d648b..eab392c4d 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java @@ -2,8 +2,8 @@ package org.broadinstitute.sting.utils.variantcontext; import org.broad.tribble.Feature; import org.broad.tribble.TribbleException; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broad.tribble.util.ParsingUtils; +import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.codecs.vcf.VCFParser; import java.util.*; diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextUtils.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextUtils.java index 5d58954aa..5a5671056 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextUtils.java @@ -23,21 +23,26 @@ package org.broadinstitute.sting.utils.variantcontext; -import java.io.Serializable; -import java.util.*; - -import com.google.java.contract.*; +import com.google.java.contract.Ensures; +import com.google.java.contract.Requires; import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.samtools.util.StringUtil; -import org.apache.commons.jexl2.*; +import org.apache.commons.jexl2.Expression; +import org.apache.commons.jexl2.JexlEngine; import org.broad.tribble.util.popgen.HardyWeinbergCalculation; -import org.broadinstitute.sting.utils.codecs.vcf.AbstractVCFCodec; import org.broadinstitute.sting.gatk.walkers.phasing.ReadBackedPhasingWalker; -import org.broadinstitute.sting.utils.*; +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.codecs.vcf.AbstractVCFCodec; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; +import java.io.Serializable; +import java.util.*; + public class VariantContextUtils { final public static JexlEngine engine = new JexlEngine(); static { diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java index c5a3b6f2a..a59ed7abe 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java @@ -29,7 +29,10 @@ import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.exceptions.UserException; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; /** * diff --git a/public/java/src/org/broadinstitute/sting/utils/wiggle/WiggleWriter.java b/public/java/src/org/broadinstitute/sting/utils/wiggle/WiggleWriter.java index ab91d0e2e..5782c2704 100755 --- a/public/java/src/org/broadinstitute/sting/utils/wiggle/WiggleWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/wiggle/WiggleWriter.java @@ -1,7 +1,7 @@ package org.broadinstitute.sting.utils.wiggle; -import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import java.io.*; From 0a0363aef23e25f876034928eae7e4b3fff08623 Mon Sep 17 00:00:00 2001 From: Matt Hanna Date: Sun, 17 Jul 2011 20:43:35 -0400 Subject: [PATCH 160/161] Revving Picard to get a parser that works with the latest metrics file formats we're starting to see. --- ...1941.jar => picard-private-parts-1954.jar} | Bin 36047 -> 36047 bytes .../picard-private-parts-1954.xml | 3 +++ ...941.xml => picard-private-parts-1954.xml~} | 0 ...icard-1.47.869.jar => picard-1.48.889.jar} | Bin 1084255 -> 1106870 bytes .../repository/net.sf/picard-1.48.889.xml | 3 +++ ...card-1.47.869.xml => picard-1.48.889.xml~} | 0 settings/repository/net.sf/sam-1.47.869.xml | 3 --- .../{sam-1.47.869.jar => sam-1.48.889.jar} | Bin 535562 -> 536180 bytes settings/repository/net.sf/sam-1.48.889.xml | 3 +++ 9 files changed, 9 insertions(+), 3 deletions(-) rename settings/repository/edu.mit.broad/{picard-private-parts-1941.jar => picard-private-parts-1954.jar} (88%) create mode 100644 settings/repository/edu.mit.broad/picard-private-parts-1954.xml rename settings/repository/edu.mit.broad/{picard-private-parts-1941.xml => picard-private-parts-1954.xml~} (100%) rename settings/repository/net.sf/{picard-1.47.869.jar => picard-1.48.889.jar} (87%) create mode 100644 settings/repository/net.sf/picard-1.48.889.xml rename settings/repository/net.sf/{picard-1.47.869.xml => picard-1.48.889.xml~} (100%) delete mode 100644 settings/repository/net.sf/sam-1.47.869.xml rename settings/repository/net.sf/{sam-1.47.869.jar => sam-1.48.889.jar} (91%) create mode 100644 settings/repository/net.sf/sam-1.48.889.xml diff --git a/settings/repository/edu.mit.broad/picard-private-parts-1941.jar b/settings/repository/edu.mit.broad/picard-private-parts-1954.jar similarity index 88% rename from settings/repository/edu.mit.broad/picard-private-parts-1941.jar rename to settings/repository/edu.mit.broad/picard-private-parts-1954.jar index 760db5cb8e7fbcd12b9cd90049ff2ff9ba037b11..67637d3d9311d10767c5758006471a628c5a8a88 100644 GIT binary patch delta 633 zcmX>qR2NBc{P{|ft1A@W_2KST^>yRR0dI#r^ zWqet|GSW&tEMSpUYVX*=jM;jtI6;iblAQXJ_gnBFxfJAz2^Jn;Ww$NuzXyj1DIae=mm1j_aoAl(vO;#ZG zq~;v3lKkc*Fny&t6Rgys#Sg4>Vhcq4TT3FCAJrNIrgyd`foZw6P_X*4wg@o)Vp|oM z_G?cA)7#tQ!L(!tM1O5ZI@q4)9mQbr*v>?-{)3&aU~$f_FtB)1R~(o=+y!x;QFjKI SKesy?O#kjq0jp2y$prxRP5Jr& delta 633 zcmX>|n-hy;Ynb#$-uO{mJ_+c#vEQa>WD-53sV^7Jng@+_n;B28(>Q z-NgoGY;e(mNZogR53&DZ&<=>2p0HVrV25Z%n1a8}U*`}6+Hbe8 zf@h^5GXp~b8v}#wWJWus$pzhVn+po0Ax8BT-(Ui3$SjM8Sa-TSpMx0~nv-oCEWnmj zG}wbwOy1R?52oKV7=vl0MoX}KT%!Y+UfAdb7Jt{64d%x*d4l70E2e^Pyhe` diff --git a/settings/repository/edu.mit.broad/picard-private-parts-1954.xml b/settings/repository/edu.mit.broad/picard-private-parts-1954.xml new file mode 100644 index 000000000..c702fd6e5 --- /dev/null +++ b/settings/repository/edu.mit.broad/picard-private-parts-1954.xml @@ -0,0 +1,3 @@ + + + diff --git a/settings/repository/edu.mit.broad/picard-private-parts-1941.xml b/settings/repository/edu.mit.broad/picard-private-parts-1954.xml~ similarity index 100% rename from settings/repository/edu.mit.broad/picard-private-parts-1941.xml rename to settings/repository/edu.mit.broad/picard-private-parts-1954.xml~ diff --git a/settings/repository/net.sf/picard-1.47.869.jar b/settings/repository/net.sf/picard-1.48.889.jar similarity index 87% rename from settings/repository/net.sf/picard-1.47.869.jar rename to settings/repository/net.sf/picard-1.48.889.jar index d277fd2177e994cf602f728bfad82c7abc7f885e..1b725dde5da26bac05010bc371775cdb890c323c 100644 GIT binary patch delta 67365 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 b()RE^J#5(jz^qfUl(%Ow_T^Nt&Dj3~hZON% delta 52367 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 diff --git a/settings/repository/net.sf/picard-1.48.889.xml b/settings/repository/net.sf/picard-1.48.889.xml new file mode 100644 index 000000000..877687930 --- /dev/null +++ b/settings/repository/net.sf/picard-1.48.889.xml @@ -0,0 +1,3 @@ + + + diff --git a/settings/repository/net.sf/picard-1.47.869.xml b/settings/repository/net.sf/picard-1.48.889.xml~ similarity index 100% rename from settings/repository/net.sf/picard-1.47.869.xml rename to settings/repository/net.sf/picard-1.48.889.xml~ diff --git a/settings/repository/net.sf/sam-1.47.869.xml b/settings/repository/net.sf/sam-1.47.869.xml deleted file mode 100644 index 1b76fe2f9..000000000 --- a/settings/repository/net.sf/sam-1.47.869.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/settings/repository/net.sf/sam-1.47.869.jar b/settings/repository/net.sf/sam-1.48.889.jar similarity index 91% rename from settings/repository/net.sf/sam-1.47.869.jar rename to settings/repository/net.sf/sam-1.48.889.jar index 933b9cfd6f7ee1a55835939e49239a384d38dd98..33ae4aa7d2e0652c767092e89fef9e93c92887f2 100644 GIT binary patch delta 19247 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 F{{SlKLgWAd diff --git a/settings/repository/net.sf/sam-1.48.889.xml b/settings/repository/net.sf/sam-1.48.889.xml new file mode 100644 index 000000000..8046a0c02 --- /dev/null +++ b/settings/repository/net.sf/sam-1.48.889.xml @@ -0,0 +1,3 @@ + + + From 00b650a35dad72cc79ce962ba6e1f6f01299cf3f Mon Sep 17 00:00:00 2001 From: Matt Hanna Date: Sun, 17 Jul 2011 20:52:46 -0400 Subject: [PATCH 161/161] Get rid of accidental commit of emacs backup '~' file. --- settings/repository/net.sf/picard-1.48.889.xml~ | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 settings/repository/net.sf/picard-1.48.889.xml~ diff --git a/settings/repository/net.sf/picard-1.48.889.xml~ b/settings/repository/net.sf/picard-1.48.889.xml~ deleted file mode 100644 index 86d07d4fa..000000000 --- a/settings/repository/net.sf/picard-1.48.889.xml~ +++ /dev/null @@ -1,3 +0,0 @@ - - -