diff --git a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalIntegrationTest.java b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalIntegrationTest.java
index 82acc98b2..16f7cf5d4 100644
--- a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalIntegrationTest.java
+++ b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalIntegrationTest.java
@@ -350,6 +350,17 @@ public class VariantEvalIntegrationTest extends WalkerTest {
executeTestParallel("testVEMendelianViolationEvaluator" + vcfFile, spec);
}
+ @Test
+ public void testMVEvalFamilyStrat() {
+ String vcfFile = "/PhaseByTransmission/PhaseByTransmission.IntegrationTest.TP.vcf";
+ String pedFile = "/PhaseByTransmission/PhaseByTransmission.IntegrationTest.goodFamilies.ped";
+
+ WalkerTestSpec spec = new WalkerTestSpec("-R "+b37KGReference+ " -T VariantEval -ped " + privateTestDir + pedFile + " -eval " + privateTestDir + vcfFile + " -noEV -noST -ST Family -EV MendelianViolationEvaluator -o %s",
+ 1,
+ Arrays.asList("d599d3e6b308ac06b2c2e003cf596328"));
+ executeTestParallel("testMVEvalFamilyStrat", spec);
+ }
+
private static String withSelect(String cmd, String select, String name) {
return String.format("%s -select '%s' -selectName %s", cmd, select, name);
diff --git a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalWalkerUnitTest.java b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalWalkerUnitTest.java
index d862de991..11b34a0c0 100644
--- a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalWalkerUnitTest.java
+++ b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/varianteval/VariantEvalWalkerUnitTest.java
@@ -140,7 +140,7 @@ public class VariantEvalWalkerUnitTest extends BaseTest {
}
@Override
- public List
*
- * Usage example
+ * Usage examples
*
* java -jar GenomeAnalysisTK.jar \
* -T VariantEval \
@@ -116,6 +118,18 @@ import java.util.*;
* [--comp comp.vcf]
*
*
+ * Count Mendelian violations for each family in a callset with multiple families (and provided pedigree)
+ *
+ * Java -jar GenomeAnalysisTK.jar \
+ * -T VariantEval \
+ * -R reference.fasta \
+ * -o output.MVs.byFamily.table \
+ * --eval multiFamilyCallset.vcf \
+ * -noEV -noST \
+ * -ST Family \
+ * -EV MendelianViolationEvaluator
+ *
+ *
* Caveat
*
* Some stratifications and evaluators are incompatible with each other due to their respective memory requirements,
@@ -249,14 +263,18 @@ public class VariantEval extends RodWalker implements TreeRedu
private boolean isSubsettingSamples;
private Set sampleNamesForEvaluation = new LinkedHashSet();
+ private Set familyNamesForEvaluation = new LinkedHashSet();
private Set sampleNamesForStratification = new LinkedHashSet();
+ private Set familyNamesForStratification = new LinkedHashSet();
// important stratifications
private boolean byFilterIsEnabled = false;
private boolean perSampleIsEnabled = false;
+ private boolean perFamilyIsEnabled = false;
// Public constants
- private static String ALL_SAMPLE_NAME = "all";
+ final private static String ALL_SAMPLE_NAME = "all";
+ final private static String ALL_FAMILY_NAME = "all";
// the number of processed bp for this walker
long nProcessedLoci = 0;
@@ -303,12 +321,22 @@ public class VariantEval extends RodWalker implements TreeRedu
final Set allSampleNames = SampleUtils.getSamplesFromCommandLineInput(vcfSamples);
sampleNamesForEvaluation.addAll(new TreeSet(SampleUtils.getSamplesFromCommandLineInput(vcfSamples, SAMPLE_EXPRESSIONS)));
isSubsettingSamples = ! sampleNamesForEvaluation.containsAll(allSampleNames);
+ familyNamesForEvaluation.addAll(getSampleDB().getFamilyIDs());
- if (Arrays.asList(STRATIFICATIONS_TO_USE).contains("Sample")) {
+ //If stratifying by sample name, assign a stratification for each sample we're evaluating (based on commandline args)...
+ if (Arrays.asList(STRATIFICATIONS_TO_USE).contains("Sample") ) {
sampleNamesForStratification.addAll(sampleNamesForEvaluation);
}
+ //...and also a stratification for the sum over all samples
sampleNamesForStratification.add(ALL_SAMPLE_NAME);
+ //If stratifying by sample name, assign a stratification for each family...
+ if ( Arrays.asList(STRATIFICATIONS_TO_USE).contains("Family") ) {
+ familyNamesForStratification.addAll(familyNamesForEvaluation);
+ }
+ //...and also a stratification for the sum over all families
+ familyNamesForStratification.add(ALL_FAMILY_NAME);
+
// Initialize select expressions
for (VariantContextUtils.JexlVCMatchExp jexl : VariantContextUtils.initializeMatchExps(SELECT_NAMES, SELECT_EXPS)) {
SortableJexlVCMatchExp sjexl = new SortableJexlVCMatchExp(jexl.name, jexl.exp);
@@ -327,8 +355,17 @@ public class VariantEval extends RodWalker implements TreeRedu
byFilterIsEnabled = true;
else if ( vs.getName().equals("Sample") )
perSampleIsEnabled = true;
+ else if ( vs.getName().equals("Family"))
+ perFamilyIsEnabled = true;
}
+ if (perSampleIsEnabled && perFamilyIsEnabled)
+ throw new UserException.BadArgumentValue("ST", "Variants cannot be stratified by sample and family at the same time");
+
+ if (perFamilyIsEnabled && getSampleDB().getTrios().isEmpty())
+ throw new UserException.BadArgumentValue("ST", "Cannot stratify by family without *.ped file");
+
+
if ( intervalsFile != null ) {
boolean fail = true;
for ( final VariantStratifier vs : stratificationObjects ) {
@@ -420,17 +457,24 @@ public class VariantEval extends RodWalker implements TreeRedu
// }
// --------- track --------- sample - VariantContexts -
- HashMap, HashMap>> evalVCs = variantEvalUtils.bindVariantContexts(tracker, ref, evals, byFilterIsEnabled, true, perSampleIsEnabled, mergeEvals);
- HashMap, HashMap>> compVCs = variantEvalUtils.bindVariantContexts(tracker, ref, comps, byFilterIsEnabled, false, false, false);
+ HashMap, HashMap>> evalVCs = variantEvalUtils.bindVariantContexts(tracker, ref, evals, byFilterIsEnabled, true, perSampleIsEnabled, perFamilyIsEnabled, mergeEvals);
+ HashMap, HashMap>> compVCs = variantEvalUtils.bindVariantContexts(tracker, ref, comps, byFilterIsEnabled, false, false, false, false);
// for each eval track
for ( final RodBinding evalRod : evals ) {
final Map> emptyEvalMap = Collections.emptyMap();
final Map> evalSet = evalVCs.containsKey(evalRod) ? evalVCs.get(evalRod) : emptyEvalMap;
+ Set statificationLevels;
+
// for each sample stratifier
- for ( final String sampleName : sampleNamesForStratification ) {
- Collection evalSetBySample = evalSet.get(sampleName);
+ if (perFamilyIsEnabled)
+ statificationLevels = familyNamesForStratification;
+ else
+ statificationLevels = sampleNamesForStratification;
+ for ( final String stratLevelName : statificationLevels ) {
+ Collection evalSetBySample = evalSet.get(stratLevelName);
+
if ( evalSetBySample == null ) {
evalSetBySample = new HashSet(1);
evalSetBySample.add(null);
@@ -452,7 +496,18 @@ public class VariantEval extends RodWalker implements TreeRedu
// find the comp
final VariantContext comp = findMatchingComp(eval, compSet);
- for ( EvaluationContext nec : getEvaluationContexts(tracker, ref, eval, evalRod.getName(), comp, compRod.getName(), sampleName) ) {
+ Collection contextsForStratification;
+ if (perFamilyIsEnabled)
+ contextsForStratification = getEvaluationContexts(tracker, ref, eval, evalRod.getName(), comp, compRod.getName(), null, stratLevelName);
+ else {
+ String familyID;
+ if (stratLevelName.equals("all"))
+ familyID = "all";
+ else
+ familyID = getSampleDB().getSample(stratLevelName).getFamilyID();
+ contextsForStratification = getEvaluationContexts(tracker, ref, eval, evalRod.getName(), comp, compRod.getName(), stratLevelName, familyID);
+ }
+ for ( EvaluationContext nec : contextsForStratification ) {
// eval against the comp
synchronized (nec) {
@@ -521,10 +576,11 @@ public class VariantEval extends RodWalker implements TreeRedu
final String evalName,
final VariantContext comp,
final String compName,
- final String sampleName ) {
+ final String sampleName,
+ final String familyName) {
final List> states = new LinkedList>();
for ( final VariantStratifier vs : stratManager.getStratifiers() ) {
- states.add(vs.getRelevantStates(ref, tracker, comp, compName, eval, evalName, sampleName));
+ states.add(vs.getRelevantStates(ref, tracker, comp, compName, eval, evalName, sampleName, familyName));
}
return stratManager.values(states);
}
@@ -649,6 +705,7 @@ public class VariantEval extends RodWalker implements TreeRedu
public double getMendelianViolationQualThreshold() { return MENDELIAN_VIOLATION_QUAL_THRESHOLD; }
public static String getAllSampleName() { return ALL_SAMPLE_NAME; }
+ public static String getAllFamilyName() { return ALL_FAMILY_NAME; }
public List> getKnowns() { return knowns; }
@@ -657,6 +714,8 @@ public class VariantEval extends RodWalker implements TreeRedu
public boolean isSubsettingToSpecificSamples() { return isSubsettingSamples; }
public Set getSampleNamesForEvaluation() { return sampleNamesForEvaluation; }
+ public Set getFamilyNamesForEvaluation() { return familyNamesForEvaluation; }
+
public int getNumberOfSamplesForEvaluation() {
if (sampleNamesForEvaluation!= null && !sampleNamesForEvaluation.isEmpty())
return sampleNamesForEvaluation.size();
@@ -667,6 +726,8 @@ public class VariantEval extends RodWalker implements TreeRedu
}
public Set getSampleNamesForStratification() { return sampleNamesForStratification; }
+ public Set getFamilyNamesForStratification() { return familyNamesForStratification; }
+
public List> getComps() { return comps; }
public Set getJexlExpressions() { return jexlExpressions; }
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/evaluators/MendelianViolationEvaluator.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/evaluators/MendelianViolationEvaluator.java
index b78ef2ddf..29d81ce96 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/evaluators/MendelianViolationEvaluator.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/evaluators/MendelianViolationEvaluator.java
@@ -172,7 +172,7 @@ public class MendelianViolationEvaluator extends VariantEvaluator {
HomVarHet_inheritedRef += mv.getParentsVarHetInheritedRef();
HomVarHet_inheritedVar += mv.getParentsVarHetInheritedVar();
- if(mv.getFamilyCalledCount()>0){
+ if(mv.getFamilyCalledCount()>0 || mv.getFamilyLowQualsCount()>0 || mv.getFamilyCalledCount()>0){
nVariants++;
nFamCalled += mv.getFamilyCalledCount();
nLowQual += mv.getFamilyLowQualsCount();
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleCount.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleCount.java
index 9b3a94eae..2ab005ae2 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleCount.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleCount.java
@@ -67,7 +67,7 @@ public class AlleleCount extends VariantStratifier {
getVariantEvalWalker().getLogger().info("AlleleCount using " + nchrom + " chromosomes");
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String familyName) {
if (eval != null) {
int AC = 0; // by default, the site is considered monomorphic
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleFrequency.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleFrequency.java
index 50597067f..d52ea8f41 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleFrequency.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/AlleleFrequency.java
@@ -47,7 +47,7 @@ public class AlleleFrequency extends VariantStratifier {
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (eval != null) {
try {
return Collections.singletonList((Object)String.format("%.3f", (5.0 * MathUtils.round(eval.getAttributeAsDouble("AF", 0.0) / 5.0, 3))));
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CompRod.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CompRod.java
index 7eb781d1b..72006196b 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CompRod.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CompRod.java
@@ -45,7 +45,7 @@ public class CompRod extends VariantStratifier implements RequiredStratification
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
return Collections.singletonList((Object)compName);
}
}
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Contig.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Contig.java
index 6bcd06856..0645fd53f 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Contig.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Contig.java
@@ -44,7 +44,7 @@ public class Contig extends VariantStratifier {
}
@Override
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (eval != null) {
return Arrays.asList((Object)"all", eval.getChr());
} else {
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CpG.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CpG.java
index 2566ceea5..f4c31a5d1 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CpG.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/CpG.java
@@ -53,7 +53,7 @@ public class CpG extends VariantStratifier {
}
@Override
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
boolean isCpG = false;
if (ref != null && ref.getBases() != null) {
String fwRefBases = new String(ref.getBases());
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Degeneracy.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Degeneracy.java
index ddfdef600..1e8368f91 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Degeneracy.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Degeneracy.java
@@ -103,7 +103,7 @@ public class Degeneracy extends VariantStratifier {
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
ArrayList relevantStates = new ArrayList();
relevantStates.add("all");
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/EvalRod.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/EvalRod.java
index 695d48c87..dddb20197 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/EvalRod.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/EvalRod.java
@@ -46,7 +46,7 @@ public class EvalRod extends VariantStratifier implements RequiredStratification
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
return Arrays.asList((Object)evalName);
}
}
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Family.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Family.java
new file mode 100644
index 000000000..e4acb9ea1
--- /dev/null
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Family.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2012-2015 Broad Institute, Inc.
+*
+* Permission is hereby granted, free of charge, to any person
+* obtaining a copy of this software and associated documentation
+* files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use,
+* copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following
+* conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+package org.broadinstitute.gatk.tools.walkers.varianteval.stratifications;
+
+import org.broadinstitute.gatk.utils.contexts.ReferenceContext;
+import org.broadinstitute.gatk.utils.refdata.RefMetaDataTracker;
+import org.broadinstitute.gatk.tools.walkers.varianteval.evaluators.VariantEvaluator;
+import org.broadinstitute.gatk.tools.walkers.varianteval.evaluators.VariantSummary;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.util.*;
+
+/**
+ * Stratifies the eval RODs by each family in the eval ROD, as described by the pedigree.
+ *
+ * This allows the system to analyze each family separately. This is particularly useful for the MendelianViolationEvaluator module.
+ */
+public class Family extends VariantStratifier {
+ @Override
+ public void initialize() {
+ states.addAll(getVariantEvalWalker().getFamilyNamesForStratification());
+ }
+
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String familyName) {
+ return Collections.singletonList((Object) familyName);
+ }
+
+ @Override
+ public Set> getIncompatibleEvaluators() {
+ return new HashSet>(Arrays.asList(VariantSummary.class));
+ }
+}
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Filter.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Filter.java
index ddeb2e75a..ac9b9e497 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Filter.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Filter.java
@@ -43,7 +43,7 @@ public class Filter extends VariantStratifier {
states.add("raw");
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
ArrayList relevantStates = new ArrayList();
relevantStates.add("raw");
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/FunctionalClass.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/FunctionalClass.java
index 628e938be..89ffe8691 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/FunctionalClass.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/FunctionalClass.java
@@ -53,7 +53,7 @@ public class FunctionalClass extends VariantStratifier {
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
ArrayList relevantStates = new ArrayList();
relevantStates.add("all");
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IndelSize.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IndelSize.java
index 3bff75529..48efe1ee4 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IndelSize.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IndelSize.java
@@ -48,7 +48,7 @@ public class IndelSize extends VariantStratifier {
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (eval != null && eval.isIndel() && eval.isBiallelic()) {
try {
int eventLength = 0;
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IntervalStratification.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IntervalStratification.java
index d00783f70..57ba0e7bb 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IntervalStratification.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/IntervalStratification.java
@@ -75,7 +75,7 @@ public class IntervalStratification extends VariantStratifier {
states.addAll(Arrays.asList("all", "overlaps.intervals", "outside.intervals"));
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (eval != null) {
final GenomeLoc loc = getVariantEvalWalker().getToolkit().getGenomeLocParser().createGenomeLoc(eval);
IntervalTree intervalTree = intervalTreeByContig.get(loc.getContig());
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/JexlExpression.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/JexlExpression.java
index 7a4a113e1..7a1106241 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/JexlExpression.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/JexlExpression.java
@@ -54,7 +54,7 @@ public class JexlExpression extends VariantStratifier implements StandardStratif
}
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
ArrayList relevantStates = new ArrayList();
relevantStates.add("none");
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Novelty.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Novelty.java
index bebebec59..1faf818f1 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Novelty.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Novelty.java
@@ -48,7 +48,7 @@ public class Novelty extends VariantStratifier implements StandardStratification
knowns = getVariantEvalWalker().getKnowns();
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (tracker != null && eval != null) {
final Collection knownComps = tracker.getValues(knowns, ref.getLocus());
for ( final VariantContext c : knownComps ) {
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/OneBPIndel.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/OneBPIndel.java
index b4f27e477..9430d9faa 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/OneBPIndel.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/OneBPIndel.java
@@ -47,7 +47,7 @@ public class OneBPIndel extends VariantStratifier {
}
@Override
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if (eval != null && eval.isIndel()) {
for ( int l : eval.getIndelLengths() )
if ( Math.abs(l) > 1 )
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Sample.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Sample.java
index c563e92c6..c052dcaa5 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Sample.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/Sample.java
@@ -46,7 +46,7 @@ public class Sample extends VariantStratifier {
states.addAll(getVariantEvalWalker().getSampleNamesForStratification());
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
return Collections.singletonList((Object) sampleName);
}
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/SnpEffPositionModifier.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/SnpEffPositionModifier.java
index 99be53fa3..a09feae98 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/SnpEffPositionModifier.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/SnpEffPositionModifier.java
@@ -64,7 +64,8 @@ public class SnpEffPositionModifier extends VariantStratifier {
final String compName,
final VariantContext eval,
final String evalName,
- final String sampleName)
+ final String sampleName,
+ final String FamilyName)
{
final List relevantStates = new ArrayList();
if (eval != null && eval.isVariant() && eval.hasAttribute(InfoFieldKey.EFFECT_KEY.getKeyName())) {
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/TandemRepeat.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/TandemRepeat.java
index 6f349851c..7349ccbfa 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/TandemRepeat.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/TandemRepeat.java
@@ -48,7 +48,7 @@ public class TandemRepeat extends VariantStratifier {
}
@Override
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
if ( eval == null || ! eval.isIndel() )
return ALL;
else if ( GATKVariantContextUtils.isTandemRepeat(eval, ref.getForwardBases()) ) {
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantStratifier.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantStratifier.java
index b5bd4aabf..5b4e6c089 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantStratifier.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantStratifier.java
@@ -54,7 +54,7 @@ public abstract class VariantStratifier implements Comparable
public abstract void initialize();
- public abstract List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName);
+ public abstract List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String familyName);
// -------------------------------------------------------------------------------------
//
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantType.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantType.java
index e3fed5de4..bc017db56 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantType.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/stratifications/VariantType.java
@@ -42,7 +42,7 @@ public class VariantType extends VariantStratifier {
states.add(t.toString());
}
- public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName) {
+ public List getRelevantStates(ReferenceContext ref, RefMetaDataTracker tracker, VariantContext comp, String compName, VariantContext eval, String evalName, String sampleName, String FamilyName) {
return eval == null ? Collections.emptyList() : Collections.singletonList((Object)eval.getType().toString());
}
diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/util/VariantEvalUtils.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/util/VariantEvalUtils.java
index 67430cbc2..15198dd53 100644
--- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/util/VariantEvalUtils.java
+++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/varianteval/util/VariantEvalUtils.java
@@ -26,6 +26,7 @@
package org.broadinstitute.gatk.tools.walkers.varianteval.util;
import org.apache.log4j.Logger;
+import org.broadinstitute.gatk.engine.samples.Sample;
import org.broadinstitute.gatk.utils.commandline.RodBinding;
import org.broadinstitute.gatk.utils.contexts.ReferenceContext;
import org.broadinstitute.gatk.utils.refdata.RefMetaDataTracker;
@@ -255,6 +256,7 @@ public class VariantEvalUtils {
boolean byFilter,
boolean subsetBySample,
boolean trackPerSample,
+ boolean trackPerFamily,
boolean mergeTracks) {
if (tracker == null)
return null;
@@ -270,9 +272,10 @@ public class VariantEvalUtils {
// First, filter the VariantContext to represent only the samples for evaluation
VariantContext vcsub = vc;
- if (subsetBySample && vc.hasGenotypes())
+ if ((subsetBySample) && vc.hasGenotypes())
vcsub = getSubsetOfVariantContext(vc, variantEvalWalker.getSampleNamesForEvaluation());
+ //always add a mapping for all samples together
if ((byFilter || !vcsub.isFiltered())) {
addMapping(mapping, VariantEval.getAllSampleName(), vcsub);
}
@@ -287,6 +290,26 @@ public class VariantEvalUtils {
}
}
}
+ else if (vc.hasGenotypes() && trackPerFamily) {
+ for (final String familyName : variantEvalWalker.getFamilyNamesForEvaluation()) {
+ Set familyMemberNames = new HashSet<>();
+ //if the current stratification family name is "all", then add all the families to the VC for evaluation here
+ if (familyName.equals(VariantEval.getAllFamilyName())) {
+ familyMemberNames = variantEvalWalker.getSampleNamesForEvaluation();
+ }
+ else {
+ Set familyMembers = variantEvalWalker.getToolkit().getSampleDB().getFamily(familyName);
+ for (final Sample s : familyMembers) {
+ familyMemberNames.add(s.getID());
+ }
+ }
+ VariantContext samplevc = getSubsetOfVariantContext(vc, familyMemberNames);
+
+ if (byFilter || !samplevc.isFiltered()) {
+ addMapping(mapping, familyName, samplevc);
+ }
+ }
+ }
}
if (mergeTracks && bindings.containsKey(firstTrack)) {