Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/sketch/SketchResults.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/sketch/SketchResults.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,202 @@ +package sketch; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +import fileIO.TextStreamWriter; +import json.JsonObject; +import shared.Shared; +import shared.Tools; +import structures.ByteBuilder; +import structures.IntHashMap; +import tax.TaxTree; + +public class SketchResults extends SketchObject { + + SketchResults(Sketch s){ + sketch=s; + } + + SketchResults(Sketch s, ArrayList<Sketch> sketchList_, int[][] taxHits_){ + sketch=s; + refSketchList=sketchList_; + taxHits=taxHits_; + } + + /*--------------------------------------------------------------*/ + /*---------------- Methods ----------------*/ + /*--------------------------------------------------------------*/ + + public void addMap(ConcurrentHashMap<Integer, Comparison> map, DisplayParams params, CompareBuffer buffer) { + + if(map.isEmpty()){return;} + list=addToList(map, params, list); + + if((true || params.needContamCounts())){ + recompare(buffer, params); + } + } + + public void recompare(CompareBuffer buffer, DisplayParams params){ +// assert(makeIndex || !AUTOSIZE); + + assert(!sketch.merged()); + sketch.mergeBitSets(); + +// System.err.println(sketch.compareBitSet()); +// assert(false) : sketch.compareBitSet().getClass(); + + for(Comparison c : list){ + c.recompare(buffer, taxHits, params.contamLevel()); + } + Collections.sort(list, params.comparator); + Collections.reverse(list); + } + + private static ArrayList<Comparison> addToList(ConcurrentHashMap<Integer, Comparison> map, DisplayParams params, ArrayList<Comparison> old){ + +// System.err.println(map.size()); +// System.err.println(map.keySet()); + +// final TaxFilter white=params.taxFilterWhite; +// final TaxFilter black=params.taxFilterBlack; +// final boolean noFilter=(white==null && black==null); + final int size=map.size(); + ArrayList<Comparison> al=(old==null ? new ArrayList<Comparison>(size) : old); + for(Entry<Integer, Comparison> e : map.entrySet()){ + final Comparison c=e.getValue(); + al.add(c); +// if(noFilter || c.passesFilter(white, black)){ +// al.add(c); +// } + } + Shared.sort(al, params.comparator); + Collections.reverse(al); + + //Apply records per level filter + if(params.recordsPerLevel>0 && al.size()>params.recordsPerLevel && al.get(0).hasQueryTaxID()){ + int[] count=new int[TaxTree.numTaxLevelNamesExtended]; + int removed=0; + for(int i=0; i<al.size(); i++){ + Comparison c=al.get(i); + int calevel=c.commonAncestorLevelInt(); + count[calevel]++; + if(count[calevel]>params.recordsPerLevel){ + al.set(i, null); + removed++; + } + } + if(removed>0){Tools.condenseStrict(al);} + } + + final long limit=(params.maxRecords*2+5); + while(al.size()>limit){ + al.remove(al.size()-1); + } + return al; + } + + public boolean isEmpty(){ + return list==null || list.isEmpty(); + } + + /*--------------------------------------------------------------*/ + /*---------------- Tax Methods ----------------*/ + /*--------------------------------------------------------------*/ + + public int primaryTax(int level){ + //I have no idea how to implement this... + IntHashMap map=new IntHashMap(); + assert(false); + return -1; + } + + /*--------------------------------------------------------------*/ + /*---------------- Print Methods ----------------*/ + /*--------------------------------------------------------------*/ + + private static String recordBreak="\n"; //"\n\n" + + void writeResults(DisplayParams params, TextStreamWriter tsw){ + ByteBuilder sb=toText(params); + tsw.print(sb); + } + + public ByteBuilder toText(DisplayParams params){ + assert(params.postParsed); + if(sketch.hasSSU()){ + if(params.comparator==Comparison.SSUComparator){ + alignSSUs(params.maxRecords*4);//This should be enough... + list.sort(params.comparator); + Collections.reverse(list); + }else if(params.printSSU()){ + alignSSUs(params.maxRecords); + } + } + if(params.json()){ + JsonObject j=params.toJson(this); + return j.toText(); + } + final ByteBuilder sb=params.queryHeader(sketch); + if(params.format==DisplayParams.FORMAT_QUERY_REF_ANI || params.format==DisplayParams.FORMAT_CONSTELLATION){ + if(list==null || list.isEmpty()){return sb;} + int idx=0; + int prevTaxID=0; + for(Comparison c : list){ + assert(!params.printSSU() || !c.needsAlignment()); + params.formatComparison(c, sb, prevTaxID); + prevTaxID=c.taxID(); + idx++; + if(idx>=params.maxRecords){break;} + } + }else{ + sb.append(recordBreak); + + if(list==null || list.isEmpty()){ + sb.append("No hits.\n"); + }else{ + if(params.format==DisplayParams.FORMAT_MULTICOLUMN){sb.append(params.header()).append('\n');} + int idx=0; + int prevTaxID=0; + for(Comparison c : list){ + params.formatComparison(c, sb, prevTaxID); + prevTaxID=c.taxID(); + idx++; + if(idx>=params.maxRecords){break;} + } + } + } + return sb; + } + + /*--------------------------------------------------------------*/ + /*---------------- Alignment ----------------*/ + /*--------------------------------------------------------------*/ + + void alignSSUs(int maxRecords){ + if(!sketch.hasSSU()){return;} +// if(list!=null && list.size()>0){ +// int idx=0; +// for(Comparison c : list){ +// c.ssuIdentity(); +// idx++; +// if(idx>=maxRecords){break;} +// } +// } + assert(alignerPool!=null); + alignerPool.addJobs(list, maxRecords); + } + + /*--------------------------------------------------------------*/ + /*---------------- Fields ----------------*/ + /*--------------------------------------------------------------*/ + + public final Sketch sketch; + public ArrayList<Sketch> refSketchList; + public int[][] taxHits; + public ArrayList<Comparison> list; + public int totalRecords=0; + +}