From 57a13805dace0afec3feaebb8bb69156bdbc3fd6 Mon Sep 17 00:00:00 2001 From: depristo Date: Sat, 19 Jun 2010 21:36:41 +0000 Subject: [PATCH] GATK now uses a optimized indexing scheme in Tribble. 5x or more performance gain on files with many genotypes. Updated integrationtest that was failing and was clearly wrong. DB=; isn't a valid annotation. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3596 348d0f76-0448-11de-a6fe-93d51630548a --- .../annotator/AnnotatorInputTableCodec.java | 7 ++++++- .../refdata/features/beagle/BeagleCodec.java | 5 +++++ .../features/sampileup/SAMPileupCodec.java | 4 ++++ .../features/samread/SAMReadCodec.java | 5 +++++ .../gatk/refdata/features/vcf4/VCF4Codec.java | 4 ++++ .../VariantAnnotatorIntegrationTest.java | 4 ++-- .../{tribble-104.jar => tribble-105.jar} | Bin 246382 -> 240118 bytes .../{tribble-104.xml => tribble-105.xml} | 2 +- 8 files changed, 27 insertions(+), 4 deletions(-) rename settings/repository/org.broad/{tribble-104.jar => tribble-105.jar} (82%) rename settings/repository/org.broad/{tribble-104.xml => tribble-105.xml} (64%) diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java b/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java index a50679052..66d52d1b5 100755 --- a/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/features/annotator/AnnotatorInputTableCodec.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.ArrayList; import org.apache.log4j.Logger; +import org.broad.tribble.Feature; import org.broad.tribble.FeatureCodec; import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.util.AsciiLineReader; @@ -74,7 +75,11 @@ public class AnnotatorInputTableCodec implements FeatureCodec { private static final String delimiterRegex = "\\s+"; + public Feature decodeLoc(String line) { + return decode(line); + } + public static String[] readHeader(final File source) throws IOException { FileInputStream is = new FileInputStream(source); try { diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java b/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java index f239f9dcc..28ddb28e0 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/features/sampileup/SAMPileupCodec.java @@ -76,6 +76,10 @@ public class SAMPileupCodec implements FeatureCodec { return null; // we don't have a header } + public Feature decodeLoc(String line) { + return decode(line); + } + public SAMPileupFeature decode(String line) { // 0 1 2 3 4 5 6 7 //* chrX 466 T Y 170 170 88 32 ... (piles of read bases and quals follow) diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java b/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java index 893f8a85e..242afb81e 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/features/samread/SAMReadCodec.java @@ -24,6 +24,7 @@ package org.broadinstitute.sting.gatk.refdata.features.samread; +import org.broad.tribble.Feature; import org.broad.tribble.FeatureCodec; import org.broad.tribble.exception.CodecLineParsingException; import org.broad.tribble.util.ParsingUtils; @@ -66,6 +67,10 @@ public class SAMReadCodec implements FeatureCodec { return null; // we haven't stored the header } + public Feature decodeLoc(String line) { + return decode(line); + } + /** * Decode a single line in a SAM text file. * @param line line to decode. diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/features/vcf4/VCF4Codec.java b/java/src/org/broadinstitute/sting/gatk/refdata/features/vcf4/VCF4Codec.java index 3a150e4cf..432243459 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/features/vcf4/VCF4Codec.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/features/vcf4/VCF4Codec.java @@ -135,6 +135,10 @@ public class VCF4Codec implements FeatureCodec { // a key optimization -- we need a per thread string parts array, so we don't allocate a big array over and over private String[] parts = null; + public Feature decodeLoc(String line) { + return decode(line); + } + public Feature decode(String line) { if ( parts == null ) parts = REQUIRE_HEADER ? new String[header.getColumnCount()] : new String[10000]; // todo -- remove require header diff --git a/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java b/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java index 992b36ad6..4194fd03e 100755 --- a/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java +++ b/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java @@ -122,7 +122,7 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { public void testDBTag() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString() + " -D " + GATKDataLocation + "dbsnp_129_b36.rod -G \"Standard\" -B variant,VCF," + validationDataLocation + "vcfexample3empty.vcf -BTI variant", 1, - Arrays.asList("05a9dcb87efc65e5c726c201460192d9")); + Arrays.asList("c3e0361af8e98bda1bc3a27260cb2c4a")); executeTest("getting DB tag", spec); } -} \ No newline at end of file +} diff --git a/settings/repository/org.broad/tribble-104.jar b/settings/repository/org.broad/tribble-105.jar similarity index 82% rename from settings/repository/org.broad/tribble-104.jar rename to settings/repository/org.broad/tribble-105.jar index 77a600608d66cf7ad1ec8ba0a0dc268241204e57..3a994562c1b1476c9e02b8d8672c24ccb154f283 100644 GIT binary patch delta 17997 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 - +