diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java index 6998a27c8fbf1b80275c97301b46903d6f1ef9a2..6730934199fac6d791b370a65d11012ddee47f57 100644 --- a/uk/ac/sanger/artemis/components/variant/BCFReader.java +++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java @@ -187,22 +187,28 @@ class BCFReader nc = 1; String fmts[] = bcfRecord.format.split(":"); - for(int j=0; j<fmts.length; j++) + bcfRecord.data = new String[nsamples][fmts.length]; + + for(int j=0; j<nsamples; j++) { - int nb = getByteSize(fmts[j],nc); - str = new byte[nb]; - is.read(str); + for(int k=0; k<fmts.length; k++) + { + int nb = getByteSize(fmts[k],nc); + str = new byte[nb]; + is.read(str); - final String value; - if(fmts[j].equals("GT")) - value = getGTString(str[0]); - else if(fmts[j].equals("PL")) - value = getPLString(str, nc); - else if(fmts[j].equals("DP")||fmts[j].equals("SP")||fmts[j].equals("GQ")) - value = Integer.toString(byteToInt(str[0])); - else - value = ""; - bcfRecord.data.put(fmts[j], value); + final String value; + if(fmts[k].equals("GT")) + value = getGTString(str[0]); + else if(fmts[k].equals("PL")) + value = getPLString(str, nc); + else if(fmts[k].equals("DP")||fmts[k].equals("SP")||fmts[k].equals("GQ")) + value = Integer.toString(byteToInt(str[0])); + else + value = ""; + + bcfRecord.data[j][k] = value; + } } } diff --git a/uk/ac/sanger/artemis/components/variant/VCFRecord.java b/uk/ac/sanger/artemis/components/variant/VCFRecord.java index d755d7fd9bc781dac7c5023fdf7410e78ba162e9..e96b68f02a9edf476537d6f75a54b281f205c517 100644 --- a/uk/ac/sanger/artemis/components/variant/VCFRecord.java +++ b/uk/ac/sanger/artemis/components/variant/VCFRecord.java @@ -23,9 +23,6 @@ package uk.ac.sanger.artemis.components.variant; -import java.util.HashMap; -import java.util.Iterator; - class VCFRecord { protected String ID; @@ -37,14 +34,32 @@ class VCFRecord protected float quality; protected String info; protected String format; - protected HashMap<String, String> data = new HashMap<String, String>(); + protected String data[][]; public String toString() + { + return seqID+"\t"+pos+"\t"+ID+"\t"+ref+"\t"+alt+"\t"+quality+ + "\t"+filter+"\t"+info+"\t"+format+"\t"+getSampleDataString(); + } + + /** + * Return the sample data as a tab-delimited string + * @return + */ + private String getSampleDataString() { StringBuffer buff = new StringBuffer(); - Iterator<String> it = data.values().iterator(); - while(it.hasNext()) - buff.append(it.next()+ ( (it.hasNext()) ? ":" : "" ) ); - return seqID+"\t"+pos+"\t"+ID+"\t"+ref+"\t"+alt+"\t"+quality+"\t"+filter+"\t"+info+"\t"+format+"\t"+buff.toString(); + for(int i=0; i<data.length; i++) // loop over samples + { + for(int j=0; j<data[i].length; j++) // loop over values + { + buff.append(data[i][j]); + if(j<data[i].length-1) + buff.append(":"); + } + if(i<data.length-1) + buff.append("\t"); + } + return buff.toString(); } } \ No newline at end of file