(Kmer seed, BloomFilterDeBruijnGraph graph, int lookahead)
| 4693 | } |
| 4694 | |
| 4695 | public static ArrayList<Kmer> greedyExtend(Kmer seed, BloomFilterDeBruijnGraph graph, int lookahead) { |
| 4696 | /**@TODO store smallest strand kmers for non-strand specific sequences */ |
| 4697 | |
| 4698 | HashSet<String> pathKmerStr = new HashSet<>(1000); |
| 4699 | pathKmerStr.add(seed.toString()); |
| 4700 | |
| 4701 | ArrayList<Kmer> rightPath = new ArrayList<>(1000); |
| 4702 | |
| 4703 | /* extend on right side */ |
| 4704 | Kmer best = seed; |
| 4705 | while (true) { |
| 4706 | best = greedyExtendRightOnce(graph, best, lookahead); |
| 4707 | if (best != null) { |
| 4708 | String seq = best.toString(); |
| 4709 | if (pathKmerStr.contains(seq)) { |
| 4710 | break; |
| 4711 | } |
| 4712 | pathKmerStr.add(seq); |
| 4713 | rightPath.add(best); |
| 4714 | } |
| 4715 | else { |
| 4716 | break; |
| 4717 | } |
| 4718 | } |
| 4719 | |
| 4720 | ArrayList<Kmer> leftPath = new ArrayList<>(100); |
| 4721 | |
| 4722 | /* extend on left side */ |
| 4723 | best = seed; |
| 4724 | while (true) { |
| 4725 | best = greedyExtendLeftOnce(graph, best, lookahead); |
| 4726 | if (best != null) { |
| 4727 | String seq = best.toString(); |
| 4728 | if (pathKmerStr.contains(seq)) { |
| 4729 | break; |
| 4730 | } |
| 4731 | pathKmerStr.add(seq); |
| 4732 | leftPath.add(best); |
| 4733 | } |
| 4734 | else { |
| 4735 | break; |
| 4736 | } |
| 4737 | } |
| 4738 | |
| 4739 | Collections.reverse(leftPath); |
| 4740 | leftPath.add(seed); |
| 4741 | leftPath.addAll(rightPath); |
| 4742 | |
| 4743 | return leftPath; |
| 4744 | } |
| 4745 | |
| 4746 | public static Kmer findMaxCoverageWindowKmer(ArrayList<Kmer> path, BloomFilterDeBruijnGraph graph, int windowSize) { |
| 4747 | int pathLen = path.size(); |
no test coverage detected