annotate 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
rev   line source
jpayne@68 1 package sketch;
jpayne@68 2
jpayne@68 3 import java.util.ArrayList;
jpayne@68 4 import java.util.Collections;
jpayne@68 5 import java.util.Map.Entry;
jpayne@68 6 import java.util.concurrent.ConcurrentHashMap;
jpayne@68 7
jpayne@68 8 import fileIO.TextStreamWriter;
jpayne@68 9 import json.JsonObject;
jpayne@68 10 import shared.Shared;
jpayne@68 11 import shared.Tools;
jpayne@68 12 import structures.ByteBuilder;
jpayne@68 13 import structures.IntHashMap;
jpayne@68 14 import tax.TaxTree;
jpayne@68 15
jpayne@68 16 public class SketchResults extends SketchObject {
jpayne@68 17
jpayne@68 18 SketchResults(Sketch s){
jpayne@68 19 sketch=s;
jpayne@68 20 }
jpayne@68 21
jpayne@68 22 SketchResults(Sketch s, ArrayList<Sketch> sketchList_, int[][] taxHits_){
jpayne@68 23 sketch=s;
jpayne@68 24 refSketchList=sketchList_;
jpayne@68 25 taxHits=taxHits_;
jpayne@68 26 }
jpayne@68 27
jpayne@68 28 /*--------------------------------------------------------------*/
jpayne@68 29 /*---------------- Methods ----------------*/
jpayne@68 30 /*--------------------------------------------------------------*/
jpayne@68 31
jpayne@68 32 public void addMap(ConcurrentHashMap<Integer, Comparison> map, DisplayParams params, CompareBuffer buffer) {
jpayne@68 33
jpayne@68 34 if(map.isEmpty()){return;}
jpayne@68 35 list=addToList(map, params, list);
jpayne@68 36
jpayne@68 37 if((true || params.needContamCounts())){
jpayne@68 38 recompare(buffer, params);
jpayne@68 39 }
jpayne@68 40 }
jpayne@68 41
jpayne@68 42 public void recompare(CompareBuffer buffer, DisplayParams params){
jpayne@68 43 // assert(makeIndex || !AUTOSIZE);
jpayne@68 44
jpayne@68 45 assert(!sketch.merged());
jpayne@68 46 sketch.mergeBitSets();
jpayne@68 47
jpayne@68 48 // System.err.println(sketch.compareBitSet());
jpayne@68 49 // assert(false) : sketch.compareBitSet().getClass();
jpayne@68 50
jpayne@68 51 for(Comparison c : list){
jpayne@68 52 c.recompare(buffer, taxHits, params.contamLevel());
jpayne@68 53 }
jpayne@68 54 Collections.sort(list, params.comparator);
jpayne@68 55 Collections.reverse(list);
jpayne@68 56 }
jpayne@68 57
jpayne@68 58 private static ArrayList<Comparison> addToList(ConcurrentHashMap<Integer, Comparison> map, DisplayParams params, ArrayList<Comparison> old){
jpayne@68 59
jpayne@68 60 // System.err.println(map.size());
jpayne@68 61 // System.err.println(map.keySet());
jpayne@68 62
jpayne@68 63 // final TaxFilter white=params.taxFilterWhite;
jpayne@68 64 // final TaxFilter black=params.taxFilterBlack;
jpayne@68 65 // final boolean noFilter=(white==null && black==null);
jpayne@68 66 final int size=map.size();
jpayne@68 67 ArrayList<Comparison> al=(old==null ? new ArrayList<Comparison>(size) : old);
jpayne@68 68 for(Entry<Integer, Comparison> e : map.entrySet()){
jpayne@68 69 final Comparison c=e.getValue();
jpayne@68 70 al.add(c);
jpayne@68 71 // if(noFilter || c.passesFilter(white, black)){
jpayne@68 72 // al.add(c);
jpayne@68 73 // }
jpayne@68 74 }
jpayne@68 75 Shared.sort(al, params.comparator);
jpayne@68 76 Collections.reverse(al);
jpayne@68 77
jpayne@68 78 //Apply records per level filter
jpayne@68 79 if(params.recordsPerLevel>0 && al.size()>params.recordsPerLevel && al.get(0).hasQueryTaxID()){
jpayne@68 80 int[] count=new int[TaxTree.numTaxLevelNamesExtended];
jpayne@68 81 int removed=0;
jpayne@68 82 for(int i=0; i<al.size(); i++){
jpayne@68 83 Comparison c=al.get(i);
jpayne@68 84 int calevel=c.commonAncestorLevelInt();
jpayne@68 85 count[calevel]++;
jpayne@68 86 if(count[calevel]>params.recordsPerLevel){
jpayne@68 87 al.set(i, null);
jpayne@68 88 removed++;
jpayne@68 89 }
jpayne@68 90 }
jpayne@68 91 if(removed>0){Tools.condenseStrict(al);}
jpayne@68 92 }
jpayne@68 93
jpayne@68 94 final long limit=(params.maxRecords*2+5);
jpayne@68 95 while(al.size()>limit){
jpayne@68 96 al.remove(al.size()-1);
jpayne@68 97 }
jpayne@68 98 return al;
jpayne@68 99 }
jpayne@68 100
jpayne@68 101 public boolean isEmpty(){
jpayne@68 102 return list==null || list.isEmpty();
jpayne@68 103 }
jpayne@68 104
jpayne@68 105 /*--------------------------------------------------------------*/
jpayne@68 106 /*---------------- Tax Methods ----------------*/
jpayne@68 107 /*--------------------------------------------------------------*/
jpayne@68 108
jpayne@68 109 public int primaryTax(int level){
jpayne@68 110 //I have no idea how to implement this...
jpayne@68 111 IntHashMap map=new IntHashMap();
jpayne@68 112 assert(false);
jpayne@68 113 return -1;
jpayne@68 114 }
jpayne@68 115
jpayne@68 116 /*--------------------------------------------------------------*/
jpayne@68 117 /*---------------- Print Methods ----------------*/
jpayne@68 118 /*--------------------------------------------------------------*/
jpayne@68 119
jpayne@68 120 private static String recordBreak="\n"; //"\n\n"
jpayne@68 121
jpayne@68 122 void writeResults(DisplayParams params, TextStreamWriter tsw){
jpayne@68 123 ByteBuilder sb=toText(params);
jpayne@68 124 tsw.print(sb);
jpayne@68 125 }
jpayne@68 126
jpayne@68 127 public ByteBuilder toText(DisplayParams params){
jpayne@68 128 assert(params.postParsed);
jpayne@68 129 if(sketch.hasSSU()){
jpayne@68 130 if(params.comparator==Comparison.SSUComparator){
jpayne@68 131 alignSSUs(params.maxRecords*4);//This should be enough...
jpayne@68 132 list.sort(params.comparator);
jpayne@68 133 Collections.reverse(list);
jpayne@68 134 }else if(params.printSSU()){
jpayne@68 135 alignSSUs(params.maxRecords);
jpayne@68 136 }
jpayne@68 137 }
jpayne@68 138 if(params.json()){
jpayne@68 139 JsonObject j=params.toJson(this);
jpayne@68 140 return j.toText();
jpayne@68 141 }
jpayne@68 142 final ByteBuilder sb=params.queryHeader(sketch);
jpayne@68 143 if(params.format==DisplayParams.FORMAT_QUERY_REF_ANI || params.format==DisplayParams.FORMAT_CONSTELLATION){
jpayne@68 144 if(list==null || list.isEmpty()){return sb;}
jpayne@68 145 int idx=0;
jpayne@68 146 int prevTaxID=0;
jpayne@68 147 for(Comparison c : list){
jpayne@68 148 assert(!params.printSSU() || !c.needsAlignment());
jpayne@68 149 params.formatComparison(c, sb, prevTaxID);
jpayne@68 150 prevTaxID=c.taxID();
jpayne@68 151 idx++;
jpayne@68 152 if(idx>=params.maxRecords){break;}
jpayne@68 153 }
jpayne@68 154 }else{
jpayne@68 155 sb.append(recordBreak);
jpayne@68 156
jpayne@68 157 if(list==null || list.isEmpty()){
jpayne@68 158 sb.append("No hits.\n");
jpayne@68 159 }else{
jpayne@68 160 if(params.format==DisplayParams.FORMAT_MULTICOLUMN){sb.append(params.header()).append('\n');}
jpayne@68 161 int idx=0;
jpayne@68 162 int prevTaxID=0;
jpayne@68 163 for(Comparison c : list){
jpayne@68 164 params.formatComparison(c, sb, prevTaxID);
jpayne@68 165 prevTaxID=c.taxID();
jpayne@68 166 idx++;
jpayne@68 167 if(idx>=params.maxRecords){break;}
jpayne@68 168 }
jpayne@68 169 }
jpayne@68 170 }
jpayne@68 171 return sb;
jpayne@68 172 }
jpayne@68 173
jpayne@68 174 /*--------------------------------------------------------------*/
jpayne@68 175 /*---------------- Alignment ----------------*/
jpayne@68 176 /*--------------------------------------------------------------*/
jpayne@68 177
jpayne@68 178 void alignSSUs(int maxRecords){
jpayne@68 179 if(!sketch.hasSSU()){return;}
jpayne@68 180 // if(list!=null && list.size()>0){
jpayne@68 181 // int idx=0;
jpayne@68 182 // for(Comparison c : list){
jpayne@68 183 // c.ssuIdentity();
jpayne@68 184 // idx++;
jpayne@68 185 // if(idx>=maxRecords){break;}
jpayne@68 186 // }
jpayne@68 187 // }
jpayne@68 188 assert(alignerPool!=null);
jpayne@68 189 alignerPool.addJobs(list, maxRecords);
jpayne@68 190 }
jpayne@68 191
jpayne@68 192 /*--------------------------------------------------------------*/
jpayne@68 193 /*---------------- Fields ----------------*/
jpayne@68 194 /*--------------------------------------------------------------*/
jpayne@68 195
jpayne@68 196 public final Sketch sketch;
jpayne@68 197 public ArrayList<Sketch> refSketchList;
jpayne@68 198 public int[][] taxHits;
jpayne@68 199 public ArrayList<Comparison> list;
jpayne@68 200 public int totalRecords=0;
jpayne@68 201
jpayne@68 202 }