Naive tool to convert from vcf to geli text
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1606 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
84c8374e68
commit
15178977e1
|
|
@ -0,0 +1,93 @@
|
||||||
|
package org.broadinstitute.sting.playground.tools;
|
||||||
|
|
||||||
|
import net.sf.picard.cmdline.CommandLineProgram;
|
||||||
|
import net.sf.picard.cmdline.Usage;
|
||||||
|
import net.sf.picard.cmdline.Option;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class VcfToGeliText extends CommandLineProgram {
|
||||||
|
@Usage(programVersion="1.0") public String USAGE = "Converts VCF files to simple Geli text files.";
|
||||||
|
@Option(shortName="I", doc="Input file (vcf) to convert.", optional=false) public File IN = null;
|
||||||
|
@Option(shortName="O",doc="Output file (gelitext). If not specified, output is printed to stdout.", optional=true) public File OUT = null;
|
||||||
|
@Option(shortName="sample",doc="Sample number to extract from the VCF. If not specified, it takes the firt one.", optional=true) public Integer sample = 1;
|
||||||
|
|
||||||
|
public static void main(final String[] argv) {
|
||||||
|
System.exit(new VcfToGeliText().instanceMain(argv));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int doWork() {
|
||||||
|
|
||||||
|
if ( IN == null )
|
||||||
|
throw new RuntimeException("No input VCF file provided!");
|
||||||
|
|
||||||
|
FileReader in;
|
||||||
|
BufferedReader vcf;
|
||||||
|
try {
|
||||||
|
in = new FileReader(IN);
|
||||||
|
vcf = new BufferedReader(in);
|
||||||
|
} catch ( FileNotFoundException ie ) {
|
||||||
|
System.out.println("Failed to open input file "+IN+": "+ie.getCause());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintStream out;
|
||||||
|
if ( OUT == null ) out = System.out;
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
out = new PrintStream(OUT);
|
||||||
|
} catch ( FileNotFoundException ie ) {
|
||||||
|
System.out.println("Failed to open output file "+OUT+": "+ie.getCause());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String currentline;
|
||||||
|
try {
|
||||||
|
while ( (currentline = vcf.readLine()) != null ) {
|
||||||
|
if ( currentline.length() == 0 || currentline.charAt(0) == '#' )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
StringTokenizer st = new StringTokenizer(currentline);
|
||||||
|
String chr = st.nextToken();
|
||||||
|
String pos = st.nextToken();
|
||||||
|
st.nextToken();
|
||||||
|
String ref = st.nextToken();
|
||||||
|
String altStr = st.nextToken();
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
st.nextToken();
|
||||||
|
for (int i = 1; i < sample; i++)
|
||||||
|
st.nextToken();
|
||||||
|
String sampleStr = st.nextToken();
|
||||||
|
|
||||||
|
HashMap<String,String> alleles = new HashMap<String,String>();
|
||||||
|
alleles.put("0", ref);
|
||||||
|
StringTokenizer stAlt = new StringTokenizer(altStr, ",");
|
||||||
|
int index = 1;
|
||||||
|
while ( stAlt.hasMoreTokens() )
|
||||||
|
alleles.put(String.valueOf(index++), stAlt.nextToken());
|
||||||
|
|
||||||
|
StringTokenizer stSample = new StringTokenizer(sampleStr, "/:");
|
||||||
|
String genotype1 = stSample.nextToken();
|
||||||
|
String genotype2 = stSample.nextToken();
|
||||||
|
if ( genotype1.equals("0") && genotype2.equals("0") )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
out.println(chr + "\t" + pos + "\t" + ref + "\t0\t0\t"
|
||||||
|
+ alleles.get(genotype1) + alleles.get(genotype2)
|
||||||
|
+ "\t30\t30\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0");
|
||||||
|
}
|
||||||
|
vcf.close();
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Jaa I/O exception"+e.getCause());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue