(BloomFilterDeBruijnGraph graph, Kmer left, Kmer right, int bound, int lookahead, float minKmerCov)
| 1495 | } |
| 1496 | |
| 1497 | public static ArrayDeque<Kmer> findPath(BloomFilterDeBruijnGraph graph, Kmer left, Kmer right, int bound, int lookahead, float minKmerCov) { |
| 1498 | if (!graph.isLowComplexity(left) && !graph.isLowComplexity(right)) { |
| 1499 | int k = graph.getK(); |
| 1500 | int numHash = graph.getMaxNumHash(); |
| 1501 | |
| 1502 | ArrayDeque<Kmer> rightExtension = new ArrayDeque<>(); |
| 1503 | |
| 1504 | ArrayDeque<Kmer> neighbors = new ArrayDeque<>(4); |
| 1505 | for (int i=0; i<bound; ++i) { |
| 1506 | right.getPredecessors(k, numHash, graph, neighbors, minKmerCov); |
| 1507 | |
| 1508 | if (neighbors.size() == 1) { |
| 1509 | Kmer kmer = neighbors.pop(); |
| 1510 | |
| 1511 | if (left.equals(kmer)) { |
| 1512 | return rightExtension; |
| 1513 | } |
| 1514 | |
| 1515 | rightExtension.addFirst(kmer); |
| 1516 | } |
| 1517 | else { |
| 1518 | break; |
| 1519 | } |
| 1520 | } |
| 1521 | |
| 1522 | if (!rightExtension.isEmpty()) { |
| 1523 | bound -= rightExtension.size(); |
| 1524 | right = rightExtension.getFirst(); |
| 1525 | } |
| 1526 | |
| 1527 | // data structure to store visited kmers at defined depth |
| 1528 | HashSet<Kmer> visitedBranchingKmers = new HashSet<>(); |
| 1529 | |
| 1530 | int depth = 0; |
| 1531 | |
| 1532 | ArrayDeque<LinkedList<Kmer>> branchesStack = new ArrayDeque<>(); |
| 1533 | branchesStack.add(getSuccessorsRanked(left, graph, lookahead)); |
| 1534 | |
| 1535 | ArrayDeque<Kmer> extension = new ArrayDeque<>(); |
| 1536 | HashSet<Kmer> extensionKmers = new HashSet<>(); |
| 1537 | |
| 1538 | while (!branchesStack.isEmpty()) { |
| 1539 | LinkedList<Kmer> branches = branchesStack.getLast(); |
| 1540 | |
| 1541 | if (branches.isEmpty()) { |
| 1542 | extensionKmers.remove(extension.pollLast()); |
| 1543 | branchesStack.removeLast(); |
| 1544 | --depth; |
| 1545 | } |
| 1546 | else { |
| 1547 | Kmer cursor = branches.pop(); |
| 1548 | |
| 1549 | if (cursor.equals(right)) { |
| 1550 | if (!rightExtension.isEmpty()) { |
| 1551 | extension.addAll(rightExtension); |
| 1552 | } |
| 1553 | |
| 1554 | return extension; |
nothing calls this directly
no test coverage detected