Mercurial > repos > rliterman > csp2
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