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 5ea63504b..7a9eaa748 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalWalker.java @@ -83,6 +83,9 @@ public class VariantEvalWalker extends RodWalker implements Tr protected Boolean NO_STANDARD_MODULES = false; // Other arguments + @Argument(fullName="numSamples", shortName="ns", doc="Number of samples (used if no samples are available in the VCF file", required=false) + protected Integer NUM_SAMPLES = 0; + @Argument(fullName="minPhaseQuality", shortName="mpq", doc="Minimum phasing quality", required=false) protected double MIN_PHASE_QUALITY = 10.0; @@ -376,7 +379,7 @@ public class VariantEvalWalker extends RodWalker implements Tr // Load the sample list sampleNamesForEvaluation.addAll(SampleUtils.getSamplesFromCommandLineInput(vcfSamples, SAMPLE_EXPRESSIONS)); - numSamples = sampleNamesForEvaluation.size(); + numSamples = NUM_SAMPLES > 0 ? NUM_SAMPLES : sampleNamesForEvaluation.size(); if (Arrays.asList(STRATIFICATIONS_TO_USE).contains("Sample")) { sampleNamesForStratification.addAll(sampleNamesForEvaluation); @@ -507,7 +510,7 @@ public class VariantEvalWalker extends RodWalker implements Tr if ( vc != null ) { VariantContext vcsub = vc; - if (vc.hasGenotypes(sampleNamesForEvaluation)) { + if (vc.hasGenotypes() && vc.hasGenotypes(sampleNamesForEvaluation)) { vcsub = getSubsetOfVariantContext(vc, sampleNamesForEvaluation); } @@ -516,7 +519,7 @@ public class VariantEvalWalker extends RodWalker implements Tr } // Now, if stratifying, split the subsetted vc per sample and add each as a new context - if ( trackPerSample ) { + if ( vc.hasGenotypes() && trackPerSample ) { for ( String sampleName : sampleNamesForEvaluation ) { VariantContext samplevc = getSubsetOfVariantContext(vc, sampleName); @@ -669,7 +672,7 @@ public class VariantEvalWalker extends RodWalker implements Tr HashMap> stateMap = new HashMap>(); for ( VariantStratifier vs : stratificationObjects ) { - ArrayList states = vs.getRelevantStates(ref, comp, compName, eval, sampleName); + ArrayList states = vs.getRelevantStates(ref, comp, compName, eval, evalName, sampleName); stateMap.put(vs, states); } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java index bf1c54c3b..b7e965ead 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/SimpleMetricsByAC.java @@ -123,8 +123,9 @@ public class SimpleMetricsByAC extends VariantEvaluator implements StandardEval ac = Integer.valueOf(eval.getAttributeAsString("AC")); } - if ( ac != -1 ) + if ( ac != -1 ) { metrics.get(ac).update(eval); + } } } @@ -150,19 +151,22 @@ public class SimpleMetricsByAC extends VariantEvaluator implements StandardEval } public String update1(VariantContext eval, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { + if (numSamples == 0) { + return null; + } + final String interesting = null; - if (eval != null ) { + if (eval != null) { if ( metrics == null ) { int nSamples = numSamples; - if ( nSamples != -1 ) + if ( nSamples != -1 ) { metrics = new MetricsByAc(2 * nSamples); + } } - if ( eval.isSNP() && - eval.isBiallelic() && - metrics != null ) { + if ( eval.isSNP() && eval.isBiallelic() && metrics != null ) { metrics.incrValue(eval); } } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java index ab423bc86..cf3b70432 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CompRod.java @@ -24,7 +24,7 @@ public class CompRod extends VariantStratifier implements RequiredStratification return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add(compName); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java index 98da6a3b9..20f3de1ad 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/CpG.java @@ -22,7 +22,7 @@ public class CpG extends VariantStratifier implements StandardStratification { return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { boolean isCpG = false; if (ref != null && ref.getBases() != null) { String fwRefBases = new String(ref.getBases()); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java index 0cc7b91ae..dbe2262dc 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Degeneracy.java @@ -52,7 +52,7 @@ public class Degeneracy extends VariantStratifier { return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add("all"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java index 16e4aa8cc..1f475bb28 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/EvalRod.java @@ -17,17 +17,17 @@ public class EvalRod extends VariantStratifier implements RequiredStratification this.evalNames = evalNames; states = new ArrayList(); - states.add("eval"); + states.addAll(evalNames); } public ArrayList getAllStates() { return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); - relevantStates.add("eval"); + relevantStates.add(evalName); return relevantStates; } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java index 718f73831..35c97c704 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Filter.java @@ -23,7 +23,7 @@ public class Filter extends VariantStratifier { return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add("raw"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java index a86bdf861..4db03e1ee 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/FunctionalClass.java @@ -24,7 +24,7 @@ public class FunctionalClass extends VariantStratifier { return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add("all"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java index 842b2a1eb..4e94ef03e 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/JexlExpression.java @@ -27,7 +27,7 @@ public class JexlExpression extends VariantStratifier implements StandardStratif return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add("none"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java index 5d0422a39..a4a1822ce 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Novelty.java @@ -26,7 +26,7 @@ public class Novelty extends VariantStratifier implements StandardStratification return states; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add("all"); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java index 6820eddb8..4c73031d8 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/Sample.java @@ -22,7 +22,7 @@ public class Sample extends VariantStratifier { return samples; } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { ArrayList relevantStates = new ArrayList(); relevantStates.add(sampleName); diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java index c3fccd1b8..5717958de 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/stratifications/VariantStratifier.java @@ -15,7 +15,7 @@ public abstract class VariantStratifier implements Comparable { return new ArrayList(); } - public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String sampleName) { + public ArrayList getRelevantStates(ReferenceContext ref, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) { return null; } diff --git a/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java b/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java index 972dcf22e..0a5768a5f 100755 --- a/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java +++ b/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java @@ -133,7 +133,7 @@ public class VariantEvalIntegrationTest extends WalkerTest { @Test public void testCompVsEvalAC() { String extraArgs = "-T VariantEval -R "+b36KGReference+" -o %s -EV GenotypeConcordance -B:evalYRI,VCF /humgen/gsa-hpprojects/GATK/data/Validation_Data/yri.trio.gatk.ug.very.few.lines.vcf -B:compYRI,VCF /humgen/gsa-hpprojects/GATK/data/Validation_Data/yri.trio.gatk.fake.genotypes.ac.test.vcf"; - WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("113228ffa35e0f67b8e067860c04171f")); + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("d8d59ec86ec9e00abad4ec44741de22f")); executeTestParallel("testCompVsEvalAC",spec); //executeTest("testCompVsEvalAC",spec); } @@ -158,6 +158,36 @@ public class VariantEvalIntegrationTest extends WalkerTest { //executeTest("testCompOverlap",spec); } + @Test + public void testEvalTrackWithoutGenotypes() { + String dbsnp = GATKDataLocation + "dbsnp_129_b37.rod"; + + String extraArgs = "-T VariantEval -R " + + b37KGReference + + " -L 20" + + " -D " + dbsnp + + " -B:evalBI,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + + " -noST -ST Novelty -o %s"; + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("2e2c24b49f699506b967befbde5a6fa8")); + executeTestParallel("testEvalTrackWithoutGenotypes",spec); + } + + @Test + public void testMultipleEvalTracksWithoutGenotypes() { + String dbsnp = GATKDataLocation + "dbsnp_129_b37.rod"; + + String extraArgs = "-T VariantEval -R " + + b37KGReference + + " -L 20" + + " -D " + dbsnp + + " -B:evalBI,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + + " -B:evalBC,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bc.sites.vcf" + + " -noST -ST Novelty -o %s"; + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("144053b8bef5a79b23d0abd17b561294")); + executeTestParallel("testMultipleEvalTracksWithoutGenotypes",spec); + } + + // @Test // public void testVEValidatePass() { // String extraArgs = "-L 1:1-10,000,000";