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