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
This commit is contained in:
ebanks 2010-07-12 03:06:51 +00:00
parent fb717fe128
commit 0427f3554b
1 changed files with 13 additions and 28 deletions

View File

@ -82,24 +82,25 @@ public class VCFWriter {
try {
// the file format field needs to be written first
TreeSet<VCFHeaderLine> nonFormatMetaData = new TreeSet<VCFHeaderLine>();
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;
}