From d1ba17df5dfb2294f17873e918674627aec30a77 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Wed, 12 Sep 2012 06:41:36 -0400 Subject: [PATCH] Fixed nasty bug in BCF2 writer for case where all genotypes are missing -- Previous code was looking for a -1 result from maxPloidy() but the result as actually 0, so instead of writing a diploid no call we were actually writing "unavailable" genotypes, and failing the BCF == VCF test in integration tests. Fixed. --- .../sting/utils/variantcontext/GenotypesContext.java | 6 +++++- .../sting/utils/variantcontext/writer/BCF2FieldWriter.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypesContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypesContext.java index ba8668fa9..02ea1a1f2 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypesContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/GenotypesContext.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.utils.variantcontext; import com.google.java.contract.Ensures; -import com.google.java.contract.Invariant; import com.google.java.contract.Requires; import java.util.*; @@ -413,6 +412,11 @@ public class GenotypesContext implements List { return getGenotypes().get(i); } + /** + * What is the max ploidy among all samples? Returns 0 if no genotypes are present + * + * @return + */ @Ensures("result >= 0") public int getMaxPloidy() { if ( maxPloidy == -1 ) { diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2FieldWriter.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2FieldWriter.java index 5b81e7117..497c68c0c 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2FieldWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2FieldWriter.java @@ -275,7 +275,7 @@ public abstract class BCF2FieldWriter { nValuesPerGenotype = vc.getMaxPloidy(); // deal with the case where we have no call everywhere, in which case we write out diploid - if ( nValuesPerGenotype == -1 ) + if ( nValuesPerGenotype == 0 ) nValuesPerGenotype = 2; super.start(encoder, vc);