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:
parent
fb717fe128
commit
0427f3554b
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue