Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/prok/StatsContainer.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/prok/StatsContainer.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,198 @@ +package prok; + +import java.util.Arrays; + +import shared.Tools; +import stream.Read; +import structures.ByteBuilder; +import structures.LongHashSet; + +class StatsContainer { + + /*--------------------------------------------------------------*/ + /*---------------- Initialization ----------------*/ + /*--------------------------------------------------------------*/ + + StatsContainer(int type_, int kInner, int framesInner, int kStart, int framesStart, int offsetStart, int kStop, int framesStop, int offsetStop){ + type=type_; + name=ProkObject.typeStrings[type]; + setInner(kInner, framesInner); + setStart(kStart, framesStart, offsetStart); + setStop(kStop, framesStop, offsetStop); + } + + StatsContainer(int type_){ + type=type_; + name=ProkObject.typeStrings[type]; + } + + void setInner(int kInner, int framesInner){ + assert(inner==null); + statsArray[0]=inner=new FrameStats(name+" inner", kInner, framesInner, 0); + } + + void setStart(int kStart, int framesStart, int offsetStart){ + assert(start==null); + statsArray[1]=start=new FrameStats(name+" start", kStart, framesStart, offsetStart); + } + + void setStop(int kStop, int framesStop, int offsetStop){ + assert(stop==null); + statsArray[2]=stop=new FrameStats(name+" stop", kStop, framesStop, offsetStop); + } + + void setInner(FrameStats fs){ + assert(inner==null); + assert(fs!=null); + statsArray[0]=inner=fs; + } + + void setStart(FrameStats fs){ + assert(start==null); + statsArray[1]=start=fs; + } + + void setStop(FrameStats fs){ + assert(stop==null); + statsArray[2]=stop=fs; + } + + /*--------------------------------------------------------------*/ + /*---------------- Methods ----------------*/ + /*--------------------------------------------------------------*/ + + @Override + public String toString(){ + return appendTo(new ByteBuilder()).toString(); + } + + public ByteBuilder appendTo(ByteBuilder bb) { + bb.append("#name\t").append(name).nl(); + bb.append("#type\t").append(type).nl(); + bb.append("#count\t").append(lengthCount).nl(); + bb.append("#lengthSum\t").append(lengthSum).nl(); + //lengths + bb.append("#contains\t").append(3).nl(); + if(ProkObject.processType(type)) { + for(FrameStats fs : statsArray){ + fs.appendTo(bb); + } + }else{ + for(FrameStats fs : statsArray){ + fs.append0(bb); + } + } + return bb; + } + + public void clear(){ + for(int i=0; i<statsArray.length; i++){ + if(statsArray[i]!=null){ + statsArray[i].clear(); + } + } + + assert(inner==statsArray[0]); + assert(start==statsArray[1]); + assert(stop==statsArray[2]); + + Arrays.fill(lengths, 0); + lengthSum=0; + lengthCount=0; + calculate(); + } + + public void setFrom(StatsContainer sc){ + assert(sc.name.equals(name)); + for(int i=0; i<statsArray.length; i++){ + FrameStats fs=sc.statsArray[i]; + if(statsArray[i]==null){ + statsArray[i]=new FrameStats(fs.name, fs.k, fs.frames, fs.leftOffset); + statsArray[i].add(fs); + }else{ + statsArray[i].setFrom(fs); + } + } + inner=statsArray[0]; + start=statsArray[1]; + stop=statsArray[2]; + + for(int i=0; i<lengths.length; i++){lengths[i]=sc.lengths[i];} + lengthSum=sc.lengthSum; + lengthCount=sc.lengthCount; + calculate(); + } + + public void add(StatsContainer sc){ + assert(sc.name.equals(name)); + for(int i=0; i<statsArray.length; i++){ + FrameStats fs=sc.statsArray[i]; + if(statsArray[i]==null){ + statsArray[i]=new FrameStats(fs.name, fs.k, fs.frames, fs.leftOffset); + } + statsArray[i].add(fs); + } + + inner=statsArray[0]; + start=statsArray[1]; + stop=statsArray[2]; + + Tools.add(lengths, sc.lengths); + lengthSum+=sc.lengthSum; + lengthCount+=sc.lengthCount; + calculate(); + } + + public void multiplyBy(double mult) { + for(int i=0; i<statsArray.length; i++){ + FrameStats fs=statsArray[i]; + fs.multiplyBy(mult); + } + + Tools.multiplyBy(lengths, mult); + lengthSum=Math.round(lengthSum*mult); + lengthCount=Math.round(lengthCount*mult); + calculate(); + } + + public void calculate(){ + for(int i=0; i<statsArray.length; i++){ + statsArray[i].calculate(); + } + lengthAvg=(int)(lengthSum/Tools.max(1.0, lengthCount)); + invLengthAvg=1f/Tools.max(1, lengthAvg); + } + + public void addLength(int x){ + lengthSum+=x; + lengthCount++; + lengths[Tools.min(x, lengths.length-1)]++; + } + + /*--------------------------------------------------------------*/ + /*---------------- Fields ----------------*/ + /*--------------------------------------------------------------*/ + + FrameStats inner; + FrameStats start; + FrameStats stop; + final FrameStats[] statsArray=new FrameStats[3]; + + int kLongLen(){return ProkObject.kLongLen(type);} + LongHashSet kmerSet(){return ProkObject.kmerSet(type);} + Read[] consensusSequence(){return ProkObject.consensusReads(type);} + float minIdentity(){return ProkObject.minID(type);} + + public int startSlop(){return ProkObject.startSlop(type);} + public int stopSlop(){return ProkObject.stopSlop(type);} + + final String name; + long lengthSum=0; + long lengthCount=0; + int lengthAvg=-1; + float invLengthAvg; + + int[] lengths=new int[5000]; + public final int type; + +}