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); }