Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/tax/IDTree.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/tax/IDTree.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,216 @@ +package tax; + +import java.io.PrintStream; +import java.util.ArrayList; + +import fileIO.FileFormat; +import fileIO.ReadWrite; +import fileIO.TextFile; +import shared.Parse; +import shared.Parser; +import shared.PreParser; +import shared.Shared; +import shared.Timer; +import shared.Tools; +import stream.Read; + +/** + * Creates a taxonomic tree from an identity matrix. + * @author Brian Bushnell + * @date July 1, 2016 + * + */ +public class IDTree { + + /*--------------------------------------------------------------*/ + /*---------------- Initialization ----------------*/ + /*--------------------------------------------------------------*/ + + /** + * Code entrance from the command line. + * @param args Command line arguments + */ + public static void main(String[] args){ + Timer t=new Timer(); + IDTree x=new IDTree(args); + x.process(t); + + //Close the print stream if it was redirected + Shared.closeStream(x.outstream); + } + + /** + * Constructor. + * @param args Command line arguments + */ + public IDTree(String[] args){ + + {//Preparse block for help, config files, and outstream + PreParser pp=new PreParser(args, getClass(), false); + args=pp.args; + outstream=pp.outstream; + } + + //Set shared static variables + Shared.capBuffers(4); + ReadWrite.USE_PIGZ=ReadWrite.USE_UNPIGZ=true; + ReadWrite.MAX_ZIP_THREADS=Shared.threads(); + + //Create a parser object + Parser parser=new Parser(); + + //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(parser.parse(arg, a, b)){//Parse standard flags in the parser + //do nothing + }else if(a.equals("verbose")){ + verbose=Parse.parseBoolean(b); + }else if(a.equals("parse_flag_goes_here")){ + //Set a variable here + }else{ + outstream.println("Unknown parameter "+args[i]); + assert(false) : "Unknown parameter "+args[i]; + // throw new RuntimeException("Unknown parameter "+args[i]); + } + } + + {//Process parser fields + + overwrite=parser.overwrite; + append=parser.append; + + in1=parser.in1; + + out1=parser.out1; + + maxLines=parser.maxReads; + } + + //Ensure there is an input file + if(in1==null){throw new RuntimeException("Error - at least one input file is required.");} + + //Ensure output files can be written + if(!Tools.testOutputFiles(overwrite, append, false, out1)){ + outstream.println((out1==null)+", "+out1); + throw new RuntimeException("\n\noverwrite="+overwrite+"; Can't write to output file "+out1+"\n"); + } + + //Ensure input files can be read + if(!Tools.testInputFiles(false, true, in1)){ + throw new RuntimeException("\nCan't read some input files.\n"); + } + + //Ensure that no file was specified multiple times + if(!Tools.testForDuplicateFiles(true, in1, out1)){ + throw new RuntimeException("\nSome file names were specified multiple times.\n"); + } + + //Create output FileFormat objects + ffout1=FileFormat.testOutput(out1, FileFormat.TEXT, null, true, overwrite, append, false); + + //Create input FileFormat objects + ffin1=FileFormat.testInput(in1, FileFormat.TEXT, null, true, true); + } + + /*--------------------------------------------------------------*/ + /*---------------- Outer Methods ----------------*/ + /*--------------------------------------------------------------*/ + + /** Create read streams and process all data */ + void process(Timer t){ + + ArrayList<IDNode> list=new ArrayList<IDNode>(); + TextFile tf=new TextFile(in1); + for(String line=tf.nextLine(); line!=null; line=tf.nextLine()){ + if(maxLines>=0 && list.size()>=maxLines){break;} + if(!line.startsWith("#")){ + String[] split=line.split("\t"); + double[] array=new double[list.size()]; + for(int i=0; i<array.length; i++){ + array[i]=Double.parseDouble(split[i+1]); + } + IDNode n=new IDNode(array, list.size(), split[0]); + list.add(n); + } + } + tf.close(); + + IDNode[] nodes=list.toArray(new IDNode[0]); + IDNode head=IDNode.makeTree(nodes); + + StringBuilder sb=head.toNewick(); + sb.append(';'); + + if(out1!=null){ + ReadWrite.writeString(sb, out1); + outstream.println("Wrote tree to "+out1); + } + + t.stop(); + outstream.println("Time: \t"+t); + } + + /*--------------------------------------------------------------*/ + /*---------------- Inner Methods ----------------*/ + /*--------------------------------------------------------------*/ + + /** + * Process a single read pair. + * @param r1 Read 1 + * @param r2 Read 2 (may be null) + * @return True if the reads should be kept, false if they should be discarded. + */ + boolean processReadPair(final Read r1, final Read r2){ + throw new RuntimeException("TODO"); + } + + /*--------------------------------------------------------------*/ + /*---------------- Fields ----------------*/ + /*--------------------------------------------------------------*/ + + /** Primary input file path */ + private String in1=null; + + /** Primary output file path */ + private String out1=null; + + /*--------------------------------------------------------------*/ + + /** Number of lines processed */ + protected long linesProcessed=0; + + protected long maxLines=-1; + + /*--------------------------------------------------------------*/ + /*---------------- Final Fields ----------------*/ + /*--------------------------------------------------------------*/ + + /** Primary input file */ + private final FileFormat ffin1; + + /** Primary output file */ + private final FileFormat ffout1; + + /*--------------------------------------------------------------*/ + /*---------------- Common Fields ----------------*/ + /*--------------------------------------------------------------*/ + + /** Print status messages to this output stream */ + private PrintStream outstream=System.err; + /** Print verbose messages */ + public static boolean verbose=false; + /** True if an error was encountered */ + public boolean errorState=false; + /** Overwrite existing output files */ + private boolean overwrite=false; + /** Append to existing output files */ + private boolean append=false; + +}