(ArrayList<Kmer> seqKmers, BloomFilterDeBruijnGraph graph, BloomFilter assembledKmers, int lookahead, float minPercentIdentity)
| 8303 | } |
| 8304 | |
| 8305 | public static boolean isTemplateSwitch2(ArrayList<Kmer> seqKmers, BloomFilterDeBruijnGraph graph, BloomFilter assembledKmers, int lookahead, float minPercentIdentity) { |
| 8306 | int numKmers = seqKmers.size(); |
| 8307 | int k = graph.getK(); |
| 8308 | int maxNumKmersInLoop = 2*k; |
| 8309 | |
| 8310 | if (assembledKmers.lookup(seqKmers.get(numKmers-1).getHash())) { |
| 8311 | int start = Math.max(0, numKmers-2); |
| 8312 | for (; start>=0; --start) { |
| 8313 | if (!assembledKmers.lookup(seqKmers.get(start).getHash())) { |
| 8314 | if (start-k >=0) { |
| 8315 | ArrayDeque<Kmer> path = getMaxCoveragePath(graph, |
| 8316 | seqKmers.get(start-k), |
| 8317 | seqKmers.get(start+1), |
| 8318 | k+1, |
| 8319 | lookahead, |
| 8320 | assembledKmers); |
| 8321 | if (path != null) { |
| 8322 | start -= k; |
| 8323 | continue; |
| 8324 | } |
| 8325 | } |
| 8326 | |
| 8327 | ++start; |
| 8328 | break; |
| 8329 | } |
| 8330 | } |
| 8331 | |
| 8332 | if (start < k) { |
| 8333 | // no unassembled kmers |
| 8334 | return false; |
| 8335 | } |
| 8336 | |
| 8337 | float medCoverage = getMedianKmerCoverage(seqKmers, start, numKmers); |
| 8338 | |
| 8339 | int backBoneKmerIndex = -1; |
| 8340 | for (int i=start; i<numKmers; ++i) { |
| 8341 | if (seqKmers.get(i).count >= medCoverage) { |
| 8342 | backBoneKmerIndex = i; |
| 8343 | break; |
| 8344 | } |
| 8345 | } |
| 8346 | |
| 8347 | if (backBoneKmerIndex >= 0) { |
| 8348 | Kmer backBoneKmer = seqKmers.get(backBoneKmerIndex); |
| 8349 | |
| 8350 | ArrayDeque<Kmer> extension = greedyExtendLeft(graph, backBoneKmer, lookahead, 1000, assembledKmers); |
| 8351 | extension.add(backBoneKmer); |
| 8352 | extension.addAll(greedyExtendRight(graph, backBoneKmer, lookahead, 1000, assembledKmers)); |
| 8353 | |
| 8354 | String backBone = graph.assemble(extension); |
| 8355 | |
| 8356 | String tipRC = reverseComplement(graph.assemble(seqKmers, 0, Math.max(1, start-maxNumKmersInLoop))); |
| 8357 | |
| 8358 | if (backBone.contains(tipRC)) { |
| 8359 | return true; |
| 8360 | } |
| 8361 | |
| 8362 | // if (found) { |
nothing calls this directly
no test coverage detected