From b4babb82ebd53b38979a53458825c9d2c6faf025 Mon Sep 17 00:00:00 2001 From: chartl Date: Thu, 19 Nov 2009 17:46:10 +0000 Subject: [PATCH] adding an extra bit of data to come out of CTT (number of chips with actual data) git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2091 348d0f76-0448-11de-a6fe-93d51630548a --- .../walkers/HapmapPoolAllelicInfoWalker.java | 9 ++--- .../varianteval/ConcordanceTruthTable.java | 12 ++++--- .../walkers/ConcordanceTruthTableTest.java | 34 ++++++++++++------- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HapmapPoolAllelicInfoWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HapmapPoolAllelicInfoWalker.java index 229afd359..586af719a 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/HapmapPoolAllelicInfoWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/HapmapPoolAllelicInfoWalker.java @@ -55,7 +55,7 @@ public class HapmapPoolAllelicInfoWalker extends LocusWalker> chips = getChips(sampleNames, tracker); - Pair alleleFreqInfo = ctt.getPooledAlleleFrequency(chips,refBase); + Pair> alleleFreqInfo = ctt.getPooledAlleleFrequency(chips,refBase); char alternate; if ( alleleFreqInfo.getFirst() != null && alleleFreqInfo.getFirst().isVariant(refBase)) { //System.out.println(refBase + " " + alleleFreqInfo.getFirst().getBases()); @@ -75,7 +75,8 @@ public class HapmapPoolAllelicInfoWalker extends LocusWalker poolVariant = getPooledAlleleFrequency(chipEvals, ref); + Pair > poolVariant = getPooledAlleleFrequency(chipEvals, ref); int truthType = getGenotype(poolVariant.getFirst(),ref); // convenience method; now to interpret @@ -114,7 +114,7 @@ public class ConcordanceTruthTable { int callType = getCallIndex(eval,ref); - addFrequencyEntry( truthType,callType,poolVariant.getSecond() ); + addFrequencyEntry( truthType,callType,poolVariant.getSecond().getFirst() ); } @@ -124,16 +124,18 @@ public class ConcordanceTruthTable { // TODO -- Indexes like TRUE_POSITIVE are defined above for you } - public Pair getPooledAlleleFrequency( List> chips, char ref) { + public Pair< Genotype , Pair > getPooledAlleleFrequency( List> chips, char ref) { // TODO -- this is actually just a note that I wanted to appear in blue. This method explicitly uses // TODO --- the assumption that tri-allelic sites do not really exist, and that if they do the // TODO --- site will be marked as such by an 'N' in the reference, so we will not get to this point. Genotype variant = null; int frequency = 0; + int nChips = 0; if ( chips != null ) { for ( Pair chip : chips ) { Genotype c = chip.getFirst(); - if ( c != null ) { + if ( c != null ) { + nChips ++; if ( c.isVariant(ref) ) { if ( c.isHet() ) { frequency ++; @@ -146,7 +148,7 @@ public class ConcordanceTruthTable { } } - return new Pair(variant, frequency); + return new Pair< Genotype, Pair >(variant, new Pair(frequency,nChips)); } diff --git a/java/test/org/broadinstitute/sting/playground/gatk/walkers/ConcordanceTruthTableTest.java b/java/test/org/broadinstitute/sting/playground/gatk/walkers/ConcordanceTruthTableTest.java index 7a3585b52..e3a94a471 100755 --- a/java/test/org/broadinstitute/sting/playground/gatk/walkers/ConcordanceTruthTableTest.java +++ b/java/test/org/broadinstitute/sting/playground/gatk/walkers/ConcordanceTruthTableTest.java @@ -36,6 +36,7 @@ public class ConcordanceTruthTableTest extends BaseTest { List> oneHom = new ArrayList>(4); oneHom.add(new Pair(ref1,null)); + oneHom.add(new Pair(null,null)); oneHom.add(new Pair(ref2,null)); oneHom.add(new Pair(ref3,null)); oneHom.add(new Pair(hom2,null)); @@ -44,6 +45,7 @@ public class ConcordanceTruthTableTest extends BaseTest { oneHet.add(new Pair(ref1,null)); oneHet.add(new Pair(ref2,null)); oneHet.add(new Pair(ref3,null)); + oneHet.add(new Pair(null,null)); oneHet.add(new Pair(het1,null)); List> twoHetOneHom = new ArrayList>(5); @@ -57,6 +59,7 @@ public class ConcordanceTruthTableTest extends BaseTest { List> twoHetTwoHom = new ArrayList>(7); twoHetTwoHom.add(new Pair(ref1,null)); twoHetTwoHom.add(new Pair(ref2,null)); + twoHetTwoHom.add(new Pair(null,null)); twoHetTwoHom.add(new Pair(ref3,null)); twoHetTwoHom.add(new Pair(het1,null)); twoHetTwoHom.add(new Pair(het2,null)); @@ -70,25 +73,32 @@ public class ConcordanceTruthTableTest extends BaseTest { List> homNoRef = new ArrayList>(1); homNoRef.add(new Pair(hom1,null)); - Pair countShouldBeOne = ctt.getPooledAlleleFrequency(oneHet,'G'); - Pair countShouldBeTwo = ctt.getPooledAlleleFrequency(oneHom,'G'); - Pair countShouldBeFour = ctt.getPooledAlleleFrequency(twoHetOneHom,'G'); - Pair countShouldBeSix = ctt.getPooledAlleleFrequency(twoHetTwoHom,'G'); - Pair countShouldBeThree = ctt.getPooledAlleleFrequency(hetHomNoRef,'G'); - Pair countShouldBeTwoHereToo = ctt.getPooledAlleleFrequency(homNoRef, 'G'); + Pair> countShouldBeOne = ctt.getPooledAlleleFrequency(oneHet,'G'); + Pair> countShouldBeTwo = ctt.getPooledAlleleFrequency(oneHom,'G'); + Pair> countShouldBeFour = ctt.getPooledAlleleFrequency(twoHetOneHom,'G'); + Pair> countShouldBeSix = ctt.getPooledAlleleFrequency(twoHetTwoHom,'G'); + Pair> countShouldBeThree = ctt.getPooledAlleleFrequency(hetHomNoRef,'G'); + Pair> countShouldBeTwoHereToo = ctt.getPooledAlleleFrequency(homNoRef, 'G'); + + int expecChips = 4+4+6+7+2+1; + int numChips = countShouldBeOne.getSecond().getSecond() + countShouldBeTwo.getSecond().getSecond() + + countShouldBeFour.getSecond().getSecond() + countShouldBeSix.getSecond().getSecond() + + countShouldBeThree.getSecond().getSecond() + countShouldBeTwoHereToo.getSecond().getSecond(); logger.warn("Testing single het"); - Assert.assertTrue(countShouldBeOne.getSecond() == 1); + Assert.assertTrue(countShouldBeOne.getSecond().getFirst() == 1); logger.warn("Testing single hom"); - Assert.assertTrue(countShouldBeTwo.getSecond() == 2); + Assert.assertTrue(countShouldBeTwo.getSecond().getFirst() == 2); logger.warn("Testing two hets + hom"); - Assert.assertTrue(countShouldBeFour.getSecond() == 4); + Assert.assertTrue(countShouldBeFour.getSecond().getFirst() == 4); logger.warn("Testing two hets + two homs"); - Assert.assertTrue(countShouldBeSix.getSecond() == 6); + Assert.assertTrue(countShouldBeSix.getSecond().getFirst() == 6); logger.warn("Testing het + hom without ref"); - Assert.assertTrue(countShouldBeThree.getSecond() == 3); + Assert.assertTrue(countShouldBeThree.getSecond().getFirst() == 3); logger.warn("Testing hom without ref"); - Assert.assertTrue(countShouldBeTwoHereToo.getSecond() == 2); + Assert.assertTrue(countShouldBeTwoHereToo.getSecond().getFirst() == 2); + logger.warn("Testing chip count sum"); + Assert.assertTrue( expecChips == numChips); } }