From 4bde24f0201512ca39828f3a681c6dbd3a1d5584 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Mon, 21 May 2012 16:24:23 -0400 Subject: [PATCH] Bugfix for VCFWriter in the case where there are no genotypes in the VC but genotypes in the header --- .../utils/variantcontext/writer/BCF2Writer.java | 4 ++-- .../utils/variantcontext/writer/VCFWriter.java | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java index 446d37dec..1bfcfc0b5 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java @@ -162,7 +162,7 @@ class BCF2Writer extends IndexingVariantContextWriter { // info fields final int nAlleles = vc.getNAlleles(); final int nInfo = vc.getAttributes().size(); - final int nGenotypeFormatFields = VCFWriter.calcVCFGenotypeKeys(vc).size(); + final int nGenotypeFormatFields = VCFWriter.calcVCFGenotypeKeys(vc, header).size(); final int nSamples = vc.getNSamples(); encoder.encodeRawInt((nAlleles << 16) | (nInfo & 0x00FF), BCF2Type.INT32); @@ -207,7 +207,7 @@ class BCF2Writer extends IndexingVariantContextWriter { } private byte[] buildSamplesData(final VariantContext vc) throws IOException { - List genotypeFields = VCFWriter.calcVCFGenotypeKeys(vc); + List genotypeFields = VCFWriter.calcVCFGenotypeKeys(vc, header); for ( final String field : genotypeFields ) { if ( field.equals(VCFConstants.GENOTYPE_KEY) ) { addGenotypes(vc); diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java index 10eeb2778..d22c68feb 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java @@ -254,13 +254,10 @@ class VCFWriter extends IndexingVariantContextWriter { mWriter.write(VCFConstants.FIELD_SEPARATOR); mWriter.write(((LazyGenotypesContext)gc).getUnparsedGenotypeData().toString()); } else { - List genotypeAttributeKeys = new ArrayList(); - if ( vc.hasGenotypes() ) { - genotypeAttributeKeys.addAll(calcVCFGenotypeKeys(vc)); - } + List genotypeAttributeKeys = calcVCFGenotypeKeys(vc, mHeader); + if ( ! genotypeAttributeKeys.isEmpty() ) { + final String genotypeFormatString = ParsingUtils.join(VCFConstants.GENOTYPE_FIELD_SEPARATOR, genotypeAttributeKeys); - if ( genotypeAttributeKeys.size() > 0 ) { - String genotypeFormatString = ParsingUtils.join(VCFConstants.GENOTYPE_FIELD_SEPARATOR, genotypeAttributeKeys); mWriter.write(VCFConstants.FIELD_SEPARATOR); mWriter.write(genotypeFormatString); @@ -472,7 +469,7 @@ class VCFWriter extends IndexingVariantContextWriter { * @param vc * @return an ordered list of genotype fields in use in VC. If vc has genotypes this will always include GT first */ - public static List calcVCFGenotypeKeys(VariantContext vc) { + public static List calcVCFGenotypeKeys(final VariantContext vc, final VCFHeader header) { Set keys = new HashSet(); boolean sawGoodGT = false; @@ -504,7 +501,7 @@ class VCFWriter extends IndexingVariantContextWriter { sortedList = newList; } - if ( sortedList.isEmpty() && vc.hasGenotypes() ) { + if ( sortedList.isEmpty() && header.hasGenotypingData() ) { // this needs to be done in case all samples are no-calls return Collections.singletonList(VCFConstants.GENOTYPE_KEY); } else {