Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/gff/VcfToGff.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/gff/VcfToGff.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,149 @@ +package gff; + +import java.io.PrintStream; + +import fileIO.ByteFile; +import fileIO.ByteStreamWriter; +import fileIO.FileFormat; +import shared.Parser; +import shared.PreParser; +import shared.ReadStats; +import shared.Timer; +import shared.Tools; +import structures.ByteBuilder; +import var2.VCFLine; + +/** + * Stripped out of GffLine into independent class. + * @author Brian Bushnell + * @date Sep 12, 2018 + * + */ +public class VcfToGff { + + /** Translates VCF to GFF */ + public static void main(String[] args){ + Timer t=new Timer(); + PrintStream outstream=System.err; + {//Preparse block for help, config files, and outstream + PreParser pp=new PreParser(args, new Object() { }.getClass().getEnclosingClass(), false); + args=pp.args; + outstream=pp.outstream; + t.outstream=outstream; + } + + Parser parser=new Parser(); + String in=null; + String out=null; + boolean overwrite=true, append=false; + + //Parse each argument + for(int i=0; i<args.length; i++){ + String arg=args[i]; + + //Break arguments into their constituent parts, in the form of "a=b" + String[] split=arg.split("="); + String a=split[0].toLowerCase(); + String b=split.length>1 ? split[1] : null; + + if(a.equals("in") || a.equals("vcf")){ + in=b; + }else if(a.equals("out") || a.equals("gff")){ + out=b; + }else if(parser.parse(arg, a, b)){ + //do nothing + }else if(in==null && b==null && i==0 && Tools.canRead(arg)){ + in=arg; + }else if(in==null && b==null && i==1){ + out=arg; + }else{ + outstream.println("Unknown parameter "+args[i]); + assert(false) : "Unknown parameter "+args[i]; + } + } + + {//Process parser fields + overwrite=ReadStats.overwrite=parser.overwrite; + append=ReadStats.append=parser.append; + } + + //Ensure output files can be written + if(!Tools.testOutputFiles(overwrite, append, false, out)){ + outstream.println((out==null)+", "+out); + throw new RuntimeException("\n\noverwrite="+overwrite+"; Can't write to output files "+out+"\n"); + } + + //Ensure input files can be read + if(!Tools.testInputFiles(false, true, in)){ + throw new RuntimeException("\nCan't read some input files.\n"); + } + + //Ensure that no file was specified multiple times + if(!Tools.testForDuplicateFiles(true, in, out)){ + throw new RuntimeException("\nSome file names were specified multiple times.\n"); + } + + translate(in, out, overwrite, append); + t.stop("Time: \t"); + } + + /** Translates VCF to GFF */ + private static void translate(String in, String out, boolean overwrite, boolean append){ + //Create output FileFormat objects + FileFormat ffout=FileFormat.testOutput(out, FileFormat.GFF, "gff", true, overwrite, append, false); + + //Create input FileFormat objects + FileFormat ffin=FileFormat.testInput(in, FileFormat.VCF, "vcf", true, true); + + ByteFile bf=ByteFile.makeByteFile(ffin); + ByteStreamWriter bsw=null; + if(ffout!=null){ + bsw=new ByteStreamWriter(ffout); + bsw.start(); + } + + ByteBuilder bb=new ByteBuilder(17000); + bb.append("##gff-version 3\n"); + String header="#seqid source type start end score strand phase attributes"; + for(byte[] line=bf.nextLine(); line!=null; line=bf.nextLine()){ + if(line.length>1){ + if(line[0]=='#'){ + if(Tools.startsWith(line, "##fileformat") || Tools.startsWith(line, "##FORMAT") || + Tools.startsWith(line, "##INFO") || Tools.startsWith(line, "#CHROM POS")){ + //skip + }else{ + int i=1; + while(i<line.length && line[i]=='#'){i++;} + i--; + bb.append(line, i, line.length-i); + bb.nl(); + } + }else{ + if(header!=null){ + bb.append(header).append('\n'); + header=null; + } + VCFLine vline=new VCFLine(line); + GffLine gline=new GffLine(vline); + gline.appendTo(bb); + bb.nl(); + } + } + if(bb.length()>=16384){ + if(bsw!=null){ + bsw.print(bb); + } + bb.clear(); + } + } + if(bb.length()>0){ + if(bsw!=null){ + bsw.print(bb); + } + bb.clear(); + } + bf.close(); + if(bsw!=null){bsw.poisonAndWait();} + } + +}