diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/icecream/ReadBuilder.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/icecream/ReadBuilder.java	Tue Mar 18 16:23:26 2025 -0400
@@ -0,0 +1,112 @@
+package icecream;
+
+import stream.Read;
+import structures.ByteBuilder;
+
+class ReadBuilder {
+	
+	public ReadBuilder(byte[] bases_, float passes_, int movieStart_, long zmw_) {
+		this(new ByteBuilder(bases_), passes_, movieStart_, zmw_);
+	}
+	
+	public ReadBuilder(ByteBuilder bases_, float passes_, int movieStart_, long zmw_) {
+		bases=bases_;
+		passes=passes_;
+		movieStart=movieStart_;
+		movieStop=movieStart+bases.length();
+		zmw=zmw_;
+
+		fullPasses=passes<1 ? 0 : 1;
+	}
+	
+	public static boolean isIceCream(String id){
+		String[] terms=id.split("\t");
+		int subreads=Integer.parseInt(terms[3].split("=")[1]);
+		return subreads>1;
+	}
+	
+	public static ReadBuilder parse(Read r) {
+		ByteBuilder bases=new ByteBuilder(r.bases);
+		String[] terms=r.id.split("\t");
+		String[] name=terms[0].split("/");
+		String[] position=name[2].split("_");
+		
+		int movieStart=Integer.parseInt(position[0]);
+		int movieStop=Integer.parseInt(position[1]);
+		long zmw=Long.parseLong(name[1]);
+		
+		float passes=Float.parseFloat(terms[1].split("=")[1]);
+		int fullPasses=Integer.parseInt(terms[2].split("=")[1]);
+		int subreads=Integer.parseInt(terms[3].split("=")[1]);
+		int missing=Integer.parseInt(terms[4].split("=")[1]);
+		int adapters=Integer.parseInt(terms[5].split("=")[1]);
+		float errorRate=(terms.length<7 ? 0 : Float.parseFloat(terms[6].split("=")[1]));
+		
+		ReadBuilder rb=new ReadBuilder(bases, passes, movieStart, zmw);
+		rb.movieStop=movieStop;
+		rb.passes=passes;
+		rb.fullPasses=fullPasses;
+		rb.subreads=subreads;
+		rb.missing=missing;
+		rb.adapters=adapters;
+		rb.errorRate=errorRate;
+		return rb;
+	}
+	
+	@Override
+	public String toString(){
+		return toHeader().toString();
+	}
+	
+	public ByteBuilder toHeader(){
+		ByteBuilder id=new ByteBuilder(200);
+		id.append("m1_2_3/");
+		id.append(zmw).append('/').append(movieStart).append('_').append(movieStop);
+		id.tab().append("passes=").append(passes, 2);
+		id.tab().append("fullPasses=").append(fullPasses);
+		id.tab().append("subreads=").append(subreads);
+		id.tab().append("missing=").append(missing);
+		id.tab().append("adapters=").append(adapters);
+		id.tab().append("errorRate=").append(errorRate, 3);
+		return id;
+	}
+	
+	public int length() {
+		return bases.length();
+	}
+	
+	void add(ReadBuilder rb){
+		bases.append(rb.bases);
+		
+		movieStop+=rb.length();
+		missing+=rb.missing;
+		adapters+=rb.adapters;
+		fullPasses+=rb.fullPasses;
+		subreads+=rb.subreads;
+		passes+=rb.passes;
+	}
+	
+	Read toRead() {
+		//Example: m54283_190403_183820/4194374/919_2614
+		//Run ID is m54283_190403_183820
+		//zmw ID is 4194374.
+		//Read start/stop coordinates are 919_2614
+		
+		ByteBuilder id=toHeader();
+		Read r=new Read(bases.toBytes(), null, id.toString(), 0);
+		return r;
+	}
+	
+	ByteBuilder bases;
+
+	final long zmw;
+	final int movieStart;
+	int movieStop;
+	
+	float passes;
+	int fullPasses=0;
+	int subreads=1;
+	int missing=0;
+	int adapters=0;
+	float errorRate=0;
+}
\ No newline at end of file