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 { try {
// the file format field needs to be written first // 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() ) { for ( VCFHeaderLine line : header.getMetaData() ) {
if (writingVCF40Format) { if ( line.getKey().equals(VCFHeaderVersion.VCF4_0.getFormatString()) ||
if ( line.getKey().equals(VCFHeaderVersion.VCF4_0.getFormatString()) ) { line.getKey().equals(VCFHeaderVersion.VCF3_3.getFormatString()) ||
mWriter.write(VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_0.getFormatString() + "=" + VCFHeaderVersion.VCF4_0.getVersionString() + "\n"); line.getKey().equals(VCFHeaderVersion.VCF3_2.getFormatString()) )
} else { continue;
nonFormatMetaData.add(line);
}
// Record, if line corresponds to a FORMAT field, which type will be used for writing value // Record, if line corresponds to a FORMAT field, which type will be used for writing value
if (line.getClass() == VCFFormatHeaderLine.class) { if (line.getClass() == VCFFormatHeaderLine.class) {
VCFFormatHeaderLine a = (VCFFormatHeaderLine)line; VCFFormatHeaderLine a = (VCFFormatHeaderLine)line;
String key = a.getName(); String key = a.getName();
typeUsedForFormatString.put(key,a.getType()); typeUsedForFormatString.put(key,a.getType());
int num = a.getCount(); int num = a.getCount();
numberUsedForFormatFields.put(key,num); numberUsedForFormatFields.put(key,num);
} else if (line.getClass() == VCFInfoHeaderLine.class) { } else if (line.getClass() == VCFInfoHeaderLine.class) {
VCFInfoHeaderLine a = (VCFInfoHeaderLine)line; VCFInfoHeaderLine a = (VCFInfoHeaderLine)line;
String key = a.getName(); String key = a.getName();
@ -108,24 +109,8 @@ public class VCFWriter {
numberUsedForInfoFields.put(key, num); 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"); mWriter.write(VCFHeader.METADATA_INDICATOR + line + "\n");
}
// write out the column line // write out the column line
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
@ -398,7 +383,6 @@ public class VCFWriter {
// assume that if key is absent, given string encoding suffices. // assume that if key is absent, given string encoding suffices.
String outputValue = formatVCFField(key, newVal); String outputValue = formatVCFField(key, newVal);
if ( outputValue != null ) if ( outputValue != null )
vcfG.setField(key, outputValue); vcfG.setField(key, outputValue);
} }
@ -531,8 +515,9 @@ public class VCFWriter {
// check if given genotype field is empty, ie either ".", or ".,.", or ".,.,.", etc. // check if given genotype field is empty, ie either ".", or ".,.", or ".,.,.", etc.
String[] fields = field.split(","); String[] fields = field.split(",");
boolean isEmpty = true; boolean isEmpty = true;
for (int k=0; k < fields.length; k++) { for (int k=0; k < fields.length; k++) {
if (!fields[k].matches(".")) { if (!fields[k].equals(VCFConstants.MISSING_VALUE_v4)) {
isEmpty = false; isEmpty = false;
break; break;
} }