diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ChipConcordance.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ChipConcordance.java index 1c0f31d25..45b12666b 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ChipConcordance.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ChipConcordance.java @@ -90,19 +90,19 @@ public abstract class ChipConcordance extends BasicVariantAnalysis { // don't procede if we have no truth data and no call if ( eval != null || chips.size() > 0 ) - inc(chips, eval, ref); - - return null; + return inc(chips, eval, ref); + else + return null; } - public void inc(Map chips, Variation eval, char ref) { + public String inc(Map chips, Variation eval, char ref) { // each implementing class can decide whether the Variation is valid assertVariationIsValid(eval); // This shouldn't happen, but let's check anyways to be safe if (BaseUtils.simpleBaseToBaseIndex(ref) == -1) - return; + return null; // create a hash of samples to their Genotypes List evals = (eval != null ? ((VariantBackedByGenotype)eval).getGenotypes() : new ArrayList()); @@ -124,12 +124,17 @@ public abstract class ChipConcordance extends BasicVariantAnalysis { } // now we can finally update our truth tables with the truth vs. calls data + StringBuilder s = new StringBuilder(); for (int i = 0; i < truthTables.length; i++) { if ( chipEvals[i] != null ) { ConcordanceTruthTable table = truthTables[i]; - table.addEntry(chipEvals[i], eval, ref); + String x = table.addEntry(chipEvals[i], eval, ref); + if ( x != null ) s.append(x); } } + + String toReturn = s.toString(); + return toReturn.equals("") ? null : toReturn; } public List done() { diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ConcordanceTruthTable.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ConcordanceTruthTable.java index 577da25fd..ea9ba4f2a 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ConcordanceTruthTable.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/ConcordanceTruthTable.java @@ -17,7 +17,6 @@ import java.util.*; * the Broad Institute nor MIT can be responsible for its use, misuse, or functionality. */ public class ConcordanceTruthTable { - private static final int TRUE_POSITIVE = 0; private static final int TRUE_NEGATIVE = 1; private static final int FALSE_POSITIVE = 2; @@ -83,7 +82,8 @@ public class ConcordanceTruthTable { // System.out.println("Table Size: "+table.length+" by "+table[1].length); } - public void addEntry(List> chipEvals, Variation eval, char ref) { + public String addEntry(List> chipEvals, Variation eval, char ref) { + String violation = null; // if the table represents a single sample, then we can calculate genotype stats if ( singleSampleMode ) { @@ -114,7 +114,13 @@ public class ConcordanceTruthTable { int callType = getCallIndex(eval,ref); - addFrequencyEntry( truthType,callType,poolVariant.getSecond().getFirst() ); + int numTrueSupportingAlleles = poolVariant.getSecond().getFirst(); + if ( numTrueSupportingAlleles > 0 && truthType == VARIANT && callType != VARIANT ) { + violation = String.format("False negative: %s with %d alt alleles", + chipEvals.get(0).getFirst(), numTrueSupportingAlleles); + } + + addFrequencyEntry( truthType,callType, poolVariant.getSecond().getFirst() ); } @@ -122,6 +128,7 @@ public class ConcordanceTruthTable { // TODO -- You'll want to use eval and the chips from chipEvals (these are the first members of the pair) // TODO -- You'll also need to declare (and initialize) the relevant data arrays for the data // TODO -- Indexes like TRUE_POSITIVE are defined above for you + return violation; } public Pair< Genotype , Pair > getPooledAlleleFrequency( List> chips, char ref) { diff --git a/java/src/org/broadinstitute/sting/utils/genotype/BasicGenotype.java b/java/src/org/broadinstitute/sting/utils/genotype/BasicGenotype.java index 94a44d9d7..c51fc2498 100644 --- a/java/src/org/broadinstitute/sting/utils/genotype/BasicGenotype.java +++ b/java/src/org/broadinstitute/sting/utils/genotype/BasicGenotype.java @@ -168,4 +168,7 @@ public class BasicGenotype implements Genotype { return builder.toString(); } + public String toString() { + return String.format("[%s %s]", getLocation(), getBases()); + } }