Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/clump/StreamToOutput.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/clump/StreamToOutput.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,135 @@ +package clump; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import fileIO.FileFormat; +import fileIO.ReadWrite; +import sort.SortByName; +import stream.ConcurrentReadInputStream; +import stream.ConcurrentReadOutputStream; +import stream.Read; +import structures.ListNum; + +public class StreamToOutput { + + public StreamToOutput(FileFormat ffin1, FileFormat ffin2, ConcurrentReadOutputStream[] rosa_, KmerComparator old, boolean sortByName_, boolean incrementComparator){ + final ConcurrentReadInputStream cris=ConcurrentReadInputStream.getReadInputStream(-1, false, ffin1, ffin2, null, null); + cris.start(); + rosa=rosa_; + kc=(incrementComparator ? new KmerComparator(old.k, old.seed+1, old.border-1, old.hashes, false, false) : old); + sortByName=sortByName_; + } + + public StreamToOutput(ConcurrentReadInputStream cris_, ConcurrentReadOutputStream[] rosa_, KmerComparator old, boolean sortByName_, boolean incrementComparator){ + cris=cris_; + rosa=rosa_; + kc=(incrementComparator ? new KmerComparator(old.k, old.seed+1, old.border-1, old.hashes, false, false) : old); + sortByName=sortByName_; + } + + public boolean process(){ + if(rosa==null || rosa.length==0){return errorState;} + + File temp=null; + if(sortByName){ + try { + temp=File.createTempFile("temp_namesort_", ".fq.gz"); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SortByName sbn=new SortByName(new String[] {"out="+temp.getAbsolutePath()}); + sbn.processInner(cris); + FileFormat ff=FileFormat.testInput(temp.getAbsolutePath(), null, false); + cris=ConcurrentReadInputStream.getReadInputStream(-1, false, ff, null, null, null); + } + + if(rosa.length==1){ + processSingle(cris); + }else{ + processMulti(cris); + } + + errorState|=ReadWrite.closeStream(cris); + if(temp!=null){ + temp.delete(); + } + return errorState; + } + + public void processSingle(ConcurrentReadInputStream cris){ + + ListNum<Read> ln=cris.nextList(); + ArrayList<Read> reads=(ln!=null ? ln.list : null); + + while(ln!=null && reads!=null && reads.size()>0){//ln!=null prevents a compiler potential null access warning + if(rosa!=null){rosa[0].add(reads, ln.id);} + + for(Read r : reads){ + readsIn+=r.pairCount(); + basesIn+=r.pairLength(); + } + + cris.returnList(ln); + + ln=cris.nextList(); + reads=(ln!=null ? ln.list : null); + } + + if(ln!=null){ + cris.returnList(ln.id, ln.list==null || ln.list.isEmpty()); + } + } + + public void processMulti(ConcurrentReadInputStream cris){ + final int groups=rosa.length; + + @SuppressWarnings("unchecked") + final ArrayList<Read>[] out=new ArrayList[groups]; + for(int i=0; i<out.length; i++){ + out[i]=new ArrayList<Read>(); + } + + ListNum<Read> ln=cris.nextList(); + ArrayList<Read> reads=(ln!=null ? ln.list : null); + + while(ln!=null && reads!=null && reads.size()>0){//ln!=null prevents a compiler potential null access warning + for(Read r : reads){ + long kmer=kc.hash(r, null, 0, false); + int group=(int)(kmer%groups); + out[group].add(r); + + readsIn+=r.pairCount(); + basesIn+=r.pairLength(); + } + for(int group=0; group<groups; group++){ + rosa[group].add(out[group], ln.id); + out[group]=new ArrayList<Read>(); + } + + cris.returnList(ln); + + ln=cris.nextList(); + reads=(ln!=null ? ln.list : null); + } + + if(ln!=null){ + cris.returnList(ln.id, ln.list==null || ln.list.isEmpty()); + } + } + + long readsIn=0; + long basesIn=0; + +// final FileFormat ffin1; +// final FileFormat ffin2; + ConcurrentReadInputStream cris; + ConcurrentReadOutputStream[] rosa; + final KmerComparator kc; + final boolean sortByName; + + boolean errorState=false; + +}