From 0427f3554b432281c1a79664d9c2861a2b30c48c Mon Sep 17 00:00:00 2001 From: ebanks Date: Mon, 12 Jul 2010 03:06:51 +0000 Subject: [PATCH] Bug fix: valid fields were being stripped off the FORMAT for samples because String.match was used instead of String.equals. Also, please use VCFConstants from now on instead of hard-coding e.g. missing values into the code. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3760 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/utils/genotype/vcf/VCFWriter.java | 41 ++++++------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFWriter.java b/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFWriter.java index 8700f436d..743e101f9 100644 --- a/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFWriter.java +++ b/java/src/org/broadinstitute/sting/utils/genotype/vcf/VCFWriter.java @@ -82,24 +82,25 @@ public class VCFWriter { try { // the file format field needs to be written first - TreeSet nonFormatMetaData = new TreeSet(); + if (writingVCF40Format) { + mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_0.getFormatString() + "=" + VCFHeaderVersion.VCF4_0.getVersionString() + "\n"); + } else { + mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF3_3.getFormatString() + "=" + VCFHeaderVersion.VCF3_3.getVersionString() + "\n"); + } + for ( VCFHeaderLine line : header.getMetaData() ) { - if (writingVCF40Format) { - if ( line.getKey().equals(VCFHeaderVersion.VCF4_0.getFormatString()) ) { - mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_0.getFormatString() + "=" + VCFHeaderVersion.VCF4_0.getVersionString() + "\n"); - } else { - nonFormatMetaData.add(line); - } + if ( line.getKey().equals(VCFHeaderVersion.VCF4_0.getFormatString()) || + line.getKey().equals(VCFHeaderVersion.VCF3_3.getFormatString()) || + line.getKey().equals(VCFHeaderVersion.VCF3_2.getFormatString()) ) + continue; // Record, if line corresponds to a FORMAT field, which type will be used for writing value if (line.getClass() == VCFFormatHeaderLine.class) { - VCFFormatHeaderLine a = (VCFFormatHeaderLine)line; String key = a.getName(); typeUsedForFormatString.put(key,a.getType()); int num = a.getCount(); numberUsedForFormatFields.put(key,num); - } else if (line.getClass() == VCFInfoHeaderLine.class) { VCFInfoHeaderLine a = (VCFInfoHeaderLine)line; String key = a.getName(); @@ -108,24 +109,8 @@ public class VCFWriter { numberUsedForInfoFields.put(key, num); } - - - } - else { - if ( line.getKey().equals(VCFHeaderVersion.VCF3_3.getFormatString()) ) { - mWriter.write(VCFHeader.METADATA_INDICATOR + line.toString() + "\n"); - } - else if ( line.getKey().equals(VCFHeaderVersion.VCF3_2.getFormatString()) ) { - mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF3_2.getFormatString() + "=" + VCFHeaderVersion.VCF3_2.getVersionString() + "\n"); - } else { - nonFormatMetaData.add(line); - } - } - } - - // write the rest of the header meta-data out - for ( VCFHeaderLine line : nonFormatMetaData ) mWriter.write(VCFHeader.METADATA_INDICATOR + line + "\n"); + } // write out the column line StringBuilder b = new StringBuilder(); @@ -398,7 +383,6 @@ public class VCFWriter { // assume that if key is absent, given string encoding suffices. String outputValue = formatVCFField(key, newVal); - if ( outputValue != null ) vcfG.setField(key, outputValue); } @@ -531,8 +515,9 @@ public class VCFWriter { // check if given genotype field is empty, ie either ".", or ".,.", or ".,.,.", etc. String[] fields = field.split(","); boolean isEmpty = true; + for (int k=0; k < fields.length; k++) { - if (!fields[k].matches(".")) { + if (!fields[k].equals(VCFConstants.MISSING_VALUE_v4)) { isEmpty = false; break; }