diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CompOverlap.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CompOverlap.java index b62bc40d8..ade80e0f5 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CompOverlap.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CompOverlap.java @@ -42,7 +42,7 @@ public class CompOverlap extends VariantEvaluator { double concordantRate = 0.0; public CompOverlap(VariantEvalWalker parent) { - // don't do anything + super(parent); } public String getName() { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CountVariants.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CountVariants.java index 88ebd5e72..f101050ce 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CountVariants.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/CountVariants.java @@ -65,7 +65,7 @@ public class CountVariants extends VariantEvaluator { double deletionInsertionRatio = 0; public CountVariants(VariantEvalWalker parent) { - // don't do anything + super(parent); } private double perLocusRate(long n) { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/GenotypeConcordance.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/GenotypeConcordance.java index 7fe9d5dae..bd6dd5fe9 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/GenotypeConcordance.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/GenotypeConcordance.java @@ -208,7 +208,7 @@ public class GenotypeConcordance extends VariantEvaluator { public GenotypeConcordance(VariantEvalWalker parent) { - // don't do anything + super(parent); } public String getName() { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/MendelianViolationEvaluator.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/MendelianViolationEvaluator.java index 3dda1c4df..fd51704ab 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/MendelianViolationEvaluator.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/MendelianViolationEvaluator.java @@ -59,8 +59,6 @@ public class MendelianViolationEvaluator extends VariantEvaluator { @DataPoint(name="KHV->PHR",description = "number of child hom variant calls where the parent was hom ref") long KidHomVar_ParentHomRef; - VariantEvalWalker parent; - TrioStructure trio; private static Pattern FAMILY_PATTERN = Pattern.compile("(.*)\\+(.*)=(.*)"); @@ -84,7 +82,7 @@ public class MendelianViolationEvaluator extends VariantEvaluator { } public MendelianViolationEvaluator(VariantEvalWalker parent) { - this.parent = parent; + super(parent); if (enabled()) { trio = parseTrioDescription(parent.FAMILY_STRUCTURE); @@ -94,11 +92,11 @@ public class MendelianViolationEvaluator extends VariantEvaluator { } public boolean enabled() { - return parent.FAMILY_STRUCTURE != null; + return getVEWalker().FAMILY_STRUCTURE != null; } private double getQThreshold() { - return parent.MENDELIAN_VIOLATION_QUAL_THRESHOLD / 10; // we aren't 10x scaled in the GATK a la phred + return getVEWalker().MENDELIAN_VIOLATION_QUAL_THRESHOLD / 10; // we aren't 10x scaled in the GATK a la phred } public String getName() { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/SimpleMetricsByAC.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/SimpleMetricsByAC.java index 1766badb9..fac6f60d5 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/SimpleMetricsByAC.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/SimpleMetricsByAC.java @@ -8,6 +8,8 @@ import org.broadinstitute.sting.playground.utils.report.tags.Analysis; import org.broadinstitute.sting.playground.utils.report.tags.DataPoint; import org.broadinstitute.sting.playground.utils.report.utils.TableType; import org.broadinstitute.sting.utils.StingException; +import org.broad.tribble.vcf.VCFGenotypeRecord; + import java.util.ArrayList; /* @@ -113,12 +115,21 @@ public class SimpleMetricsByAC extends VariantEvaluator { } public void incrValue( VariantContext eval ) { - int ac = eval.getChromosomeCount(eval.getAlternateAllele(0)); - metrics.get(ac).update(eval); + int ac = -1; + + if ( eval.hasGenotypes() ) + ac = eval.getChromosomeCount(eval.getAlternateAllele(0)); + else if ( eval.hasAttribute("AC") ) { + ac = Integer.valueOf(eval.getAttributeAsString("AC")); + } + + if ( ac != -1 ) + metrics.get(ac).update(eval); } } public SimpleMetricsByAC(VariantEvalWalker parent) { + super(parent); // don't do anything } @@ -141,13 +152,18 @@ public class SimpleMetricsByAC extends VariantEvaluator { public String update1(VariantContext eval, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { final String interesting = null; - if (eval != null && - eval.isSNP() && - eval.isBiallelic() && - eval.hasGenotypes()) { - if ( metrics == null ) - metrics = new MetricsByAc(2 * eval.getNSamples()); - metrics.incrValue(eval); + if (eval != null ) { + if ( metrics == null ) { + int nSamples = this.getVEWalker().getNSamplesForEval(eval); + if ( nSamples != -1 ) + metrics = new MetricsByAc(2 * nSamples); + } + + if ( eval.isSNP() && + eval.isBiallelic() && + metrics != null ) { + metrics.incrValue(eval); + } } return interesting; // This module doesn't capture any interesting sites, so return null diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/TiTvVariantEvaluator.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/TiTvVariantEvaluator.java index 74dd95464..570070c1d 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/TiTvVariantEvaluator.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/TiTvVariantEvaluator.java @@ -24,7 +24,7 @@ public class TiTvVariantEvaluator extends VariantEvaluator { double TiTvRatioStandard = 0.0; public TiTvVariantEvaluator(VariantEvalWalker parent) { - // don't do anything + super(parent); } public boolean enabled() { diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/ValidationRate.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/ValidationRate.java index 466e71802..f07cbf298 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/ValidationRate.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/ValidationRate.java @@ -63,7 +63,7 @@ public class ValidationRate extends VariantEvaluator { private SiteStats evalOverlapAtPoly = new SiteStats(); public ValidationRate(VariantEvalWalker parent) { - // don't do anything + super(parent); } public String getName() { @@ -126,7 +126,8 @@ public class ValidationRate extends VariantEvaluator { if (eval == null) overlap.nNoCall++; - else if (eval.isPolymorphic()) + //else if (eval.isPolymorphic()) // requires genotypes + else if (eval.isSNP()) overlap.nPoly++; else overlap.nMono++; diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java index 67e3ef9a9..0f2f14331 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java @@ -169,6 +169,9 @@ public class VariantEvalWalker extends RodWalker { @Argument(shortName="reportLocation", fullName="reportLocation", doc="If provided, set the base file for reports (Required for output formats with more than one file per analysis)", required=false) protected File outputLocation = null; + @Argument(shortName="nSamples", fullName="nSamples", doc="If provided, analyses that need the number of samples in an eval track that has no genotype information will receive this number as the number of samples", required=false) + protected int nSamples = -1; + Set rsIDsToExclude = null; // -------------------------------------------------------------------------------------------------------------- @@ -702,5 +705,21 @@ public class VariantEvalWalker extends RodWalker { return Arrays.asList(evalNode,compNode,jexlNode,filterNode,noveltyNode); } + // + // utility functions + // + + /** + * Takes an eval generated VariantContext and attempts to return the number of samples in the + * VC. If there are genotypes, it returns that value first. Otherwise it returns nSamples, if + * provided. Returns -1 if no sample counts can be obtained. + * + * @param eval + * @return + */ + public int getNSamplesForEval( VariantContext eval ) { + return eval.hasGenotypes() ? eval.getNSamples() : nSamples; + } + protected Logger getLogger() { return logger; } } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvaluator.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvaluator.java index 7312dfcd7..961459745 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvaluator.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvaluator.java @@ -35,6 +35,16 @@ abstract class VariantEvaluator { // System.out.printf("%40s %s%n", interestingSitePrefix, why); // } + protected VariantEvalWalker veWalker = null; + public VariantEvaluator(VariantEvalWalker parent) { + veWalker = parent; + // don't do anything + } + + protected VariantEvalWalker getVEWalker() { + return veWalker; + } + public abstract boolean enabled(); //public boolean processedAnySites() { return processedASite; } //protected void markSiteAsProcessed() { processedASite = true; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantQualityScore.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantQualityScore.java index c55a799ff..c178c877e 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantQualityScore.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantQualityScore.java @@ -208,7 +208,7 @@ public class VariantQualityScore extends VariantEvaluator { } public VariantQualityScore(VariantEvalWalker parent) { - // don't do anything + super(parent); } public String getName() {