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;
+	
+}