From 3db457ed01f7d99eaa0d62b9924cba6f1d269dad Mon Sep 17 00:00:00 2001 From: David Roazen Date: Wed, 14 Sep 2011 10:47:28 -0400 Subject: [PATCH] Revert "Modified VariantEval FunctionalClass stratification to remove hardcoded GenomicAnnotator keynames" After discussing this with Mark, it seems clear that the old version of the VariantEval FunctionalClass stratification is preferable to this version. By reverting, we maintain backwards compatibility with legacy output files from the old GenomicAnnotator, and can add SnpEff support later without breaking that backwards compatibility. This reverts commit b44acd1abd9ab6eec37111a19fa797f9e2ca3326. --- .../stratifications/FunctionalClass.java | 53 +++++++++++-------- .../VariantEvalIntegrationTest.java | 7 +-- 2 files changed, 36 insertions(+), 24 deletions(-) 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 c675b111c..193a65591 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 @@ -2,29 +2,21 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.stratifications; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.annotator.SnpEff; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.ArrayList; import java.util.List; /** - * Stratifies by low-, moderate-, and high-impact genomic effect using SnpEff annotations produced by VariantAnnotator + * Stratifies by nonsense, missense, silent, and all annotations in the input ROD, from the INFO field annotation. */ public class FunctionalClass extends VariantStratifier { - - public static final String LOW_IMPACT_STATE_NAME = "low-impact"; - public static final String MODERATE_IMPACT_STATE_NAME = "moderate-impact"; - public static final String HIGH_IMPACT_STATE_NAME = "high-impact"; - - public static final String EFFECT_IMPACT_ATTRIBUTE_KEY = SnpEff.InfoFieldKey.EFF_IMPACT.toString(); - @Override public void initialize() { states.add("all"); - states.add(LOW_IMPACT_STATE_NAME); - states.add(MODERATE_IMPACT_STATE_NAME); - states.add(HIGH_IMPACT_STATE_NAME); + states.add("silent"); + states.add("missense"); + states.add("nonsense"); } @@ -33,17 +25,36 @@ public class FunctionalClass extends VariantStratifier { relevantStates.add("all"); - if ( eval != null && eval.isVariant() && eval.hasAttribute(EFFECT_IMPACT_ATTRIBUTE_KEY) ) { - String effectImpact = eval.getAttributeAsString(EFFECT_IMPACT_ATTRIBUTE_KEY); + if (eval != null && eval.isVariant()) { + String type = null; - if ( effectImpact.equals(SnpEff.EffectImpact.LOW.toString()) ) { - relevantStates.add(LOW_IMPACT_STATE_NAME); + if (eval.hasAttribute("refseq.functionalClass")) { + type = eval.getAttributeAsString("refseq.functionalClass"); + } else if (eval.hasAttribute("refseq.functionalClass_1")) { + int annotationId = 1; + String key; + + do { + key = String.format("refseq.functionalClass_%d", annotationId); + + String newtype = eval.getAttributeAsString(key); + + if ( newtype != null && !newtype.equalsIgnoreCase("null") && + ( type == null || + ( type.equals("silent") && !newtype.equals("silent") ) || + ( type.equals("missense") && newtype.equals("nonsense") ) ) + ) { + type = newtype; + } + + annotationId++; + } while (eval.hasAttribute(key)); } - else if ( effectImpact.equals(SnpEff.EffectImpact.MODERATE.toString()) ) { - relevantStates.add(MODERATE_IMPACT_STATE_NAME); - } - else if ( effectImpact.equals(SnpEff.EffectImpact.HIGH.toString()) ) { - relevantStates.add(HIGH_IMPACT_STATE_NAME); + + if (type != null) { + if (type.equals("silent")) { relevantStates.add("silent"); } + else if (type.equals("missense")) { relevantStates.add("missense"); } + else if (type.equals("nonsense")) { relevantStates.add("nonsense"); } } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java index 00ecd5b67..e992684bc 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java @@ -123,8 +123,9 @@ public class VariantEvalIntegrationTest extends WalkerTest { WalkerTestSpec spec = new WalkerTestSpec( buildCommandLine( "-T VariantEval", - "-R " + hg19Reference, - "--eval " + validationDataLocation + "snpEff.AFR.unfiltered.VariantAnnotator.output.vcf", + "-R " + b37KGReference, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -133,7 +134,7 @@ public class VariantEvalIntegrationTest extends WalkerTest { "-o %s" ), 1, - Arrays.asList("e93b3d66a5c150cbf1ae4262ec075d2d") + Arrays.asList("e40b77e7ed6581328e373a24b93cd170") ); executeTest("testFundamentalsCountVariantsSNPsandIndelsWithFunctionalClass", spec); }