From 05b44dd017feb1a6899b00bd93c02068f86f9029 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Fri, 27 Apr 2012 10:49:36 -0400 Subject: [PATCH] The genotypeCounts array wasn't always being initialized before it was accessed, leading to a NPE (which got caught and thrown as a JEXL expression when used in selection). Added unit test to cover all genotype count methods. --- .../utils/variantcontext/VariantContext.java | 2 ++ .../VariantContextUnitTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java index 0a3d5415e..dff214e23 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContext.java @@ -922,6 +922,7 @@ public class VariantContext implements Feature { // to enable tribble intergrati * @return number of hom var calls */ public int getHomVarCount() { + calculateGenotypeCounts(); return genotypeCounts[Genotype.Type.HOM_VAR.ordinal()]; } @@ -931,6 +932,7 @@ public class VariantContext implements Feature { // to enable tribble intergrati * @return number of mixed calls */ public int getMixedCount() { + calculateGenotypeCounts(); return genotypeCounts[Genotype.Type.MIXED.ordinal()]; } diff --git a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextUnitTest.java index 318c2ce50..0a7427df7 100755 --- a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextUnitTest.java @@ -468,6 +468,28 @@ public class VariantContextUnitTest extends BaseTest { } @Test + public void testGetGenotypeCounts() { + List alleles = Arrays.asList(Aref, T); + Genotype g1 = new Genotype("AA", Arrays.asList(Aref, Aref)); + Genotype g2 = new Genotype("AT", Arrays.asList(Aref, T)); + Genotype g3 = new Genotype("TT", Arrays.asList(T, T)); + Genotype g4 = new Genotype("A.", Arrays.asList(Aref, Allele.NO_CALL)); + Genotype g5 = new Genotype("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL)); + + // we need to create a new VariantContext each time + VariantContext vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make(); + Assert.assertEquals(1, vc.getHetCount()); + vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make(); + Assert.assertEquals(1, vc.getHomRefCount()); + vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make(); + Assert.assertEquals(1, vc.getHomVarCount()); + vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make(); + Assert.assertEquals(1, vc.getMixedCount()); + vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make(); + Assert.assertEquals(1, vc.getNoCallCount()); + } + + @Test public void testVCFfromGenotypes() { List alleles = Arrays.asList(Aref, T, del); Genotype g1 = new Genotype("AA", Arrays.asList(Aref, Aref));