Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fun/Calc.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/fun/Calc.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,164 @@ +package fun; + +import java.io.PrintStream; +import java.util.Locale; + +import shared.Parse; +import shared.Parser; +import shared.PreParser; +import shared.ReadStats; +import shared.Shared; +import shared.Timer; + +public class Calc { + + /*--------------------------------------------------------------*/ + /*---------------- Initialization ----------------*/ + /*--------------------------------------------------------------*/ + + /** + * Code entrance from the command line. + * @param args Command line arguments + */ + public static void main(String[] args){ + Timer t=new Timer(); + Calc x=new Calc(args); + x.process(t); + + //Close the print stream if it was redirected + Shared.closeStream(x.outstream); + } + + /** + * Constructor. + * @param args Command line arguments + */ + public Calc(String[] args){ + + {//Preparse block for help, config files, and outstream + PreParser pp=new PreParser(args, getClass(), false); + args=pp.args; + outstream=pp.outstream; + } + + //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(a.equals("verbose")){ + verbose=Parse.parseBoolean(b); + }else if(a.equals("parse_flag_goes_here")){ + long fake_variable=Parse.parseKMG(b); + //Set a variable here + }else if(a.equals("num") || a.equals("numstats")){ + numStats=Integer.parseInt(b); + }else if(parser.parse(arg, a, b)){//Parse standard flags in the parser + //do nothing + }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; + + out1=parser.out1; + } + } + + + /*--------------------------------------------------------------*/ + /*---------------- Outer Methods ----------------*/ + /*--------------------------------------------------------------*/ + + /** Create read streams and process all data */ + void process(Timer t){ + + //Process the read stream + processInner(numStats); + + if(verbose){outstream.println("Finished; closing streams.");} + + //Report timing and results + { + t.stop(); + outstream.println("Time: \t"+t); + } + + //Throw an exception of there was an error in a thread + if(errorState){ + throw new RuntimeException(getClass().getName()+" terminated in an error state; the output may be corrupt."); + } + } + + /** Iterate through the reads */ + void processInner(int numStats){ + int bits=numStats*5; + final int iters=1<<bits; + final int buckets=1+31*numStats; + int[] counts=new int[buckets]; + for(int i=0; i<iters; i++){ + counts[sum(i)]++; + } + int[] cumulative=new int[buckets]; + cumulative[0]=counts[0]; + for(int i=1; i<buckets; i++){ + cumulative[i]=cumulative[i-1]+counts[i]; + } + //StringBuilder sb=new StringBuilder(); + final double mult=100.0/iters; + for(int i=0; i<buckets; i++){ + String s=(String.format(Locale.ROOT, "%d\t%.4f%%\n", i, cumulative[i]*mult)); + System.out.print(s); + } + } + + int sum(int stats){ + int sum=0; + while(stats>0){ + sum+=(stats&0x1F); + stats>>>=5; + } + return sum; + } + + /*--------------------------------------------------------------*/ + /*---------------- Inner Methods ----------------*/ + /*--------------------------------------------------------------*/ + + /*--------------------------------------------------------------*/ + /*---------------- Fields ----------------*/ + /*--------------------------------------------------------------*/ + + /** Primary output file path */ + private String out1="stdout.txt"; + + private int numStats=6; + + /*--------------------------------------------------------------*/ + /*---------------- 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; + +}