(ArrayList<Kmer> kmers,
BloomFilterDeBruijnGraph graph,
int maxTipLength,
float minKmerCov)
| 6452 | } |
| 6453 | |
| 6454 | public static int[] extendSE(ArrayList<Kmer> kmers, |
| 6455 | BloomFilterDeBruijnGraph graph, |
| 6456 | int maxTipLength, |
| 6457 | float minKmerCov) { |
| 6458 | final int d = graph.getReadPairedKmerDistance(); |
| 6459 | final float multiplier = 0.1f; |
| 6460 | |
| 6461 | int origLen = kmers.size(); |
| 6462 | |
| 6463 | HashSet<Kmer> usedKmers = new HashSet<>(kmers); |
| 6464 | |
| 6465 | Collections.reverse(kmers); |
| 6466 | |
| 6467 | while (true) { |
| 6468 | float covThreshold = getMinimumKmerCoverage(kmers, Math.max(0, kmers.size()-d), kmers.size()); |
| 6469 | |
| 6470 | ArrayDeque<Kmer> e = null; |
| 6471 | |
| 6472 | while (true) { |
| 6473 | covThreshold = Math.max(minKmerCov, covThreshold * multiplier); |
| 6474 | |
| 6475 | e = extendLeftSE(kmers, graph, maxTipLength, covThreshold); |
| 6476 | |
| 6477 | if ((e != null && !e.isEmpty()) || covThreshold == minKmerCov) { |
| 6478 | break; |
| 6479 | } |
| 6480 | } |
| 6481 | |
| 6482 | if (e == null || e.isEmpty()) { |
| 6483 | break; |
| 6484 | } |
| 6485 | |
| 6486 | Iterator<Kmer> itr = e.iterator(); |
| 6487 | boolean used = true; |
| 6488 | |
| 6489 | while (itr.hasNext() && used) { |
| 6490 | Kmer kmer = itr.next(); |
| 6491 | |
| 6492 | if (!usedKmers.contains(kmer)) { |
| 6493 | used = false; |
| 6494 | } |
| 6495 | } |
| 6496 | |
| 6497 | int endIndex = Math.max(0, kmers.size()-d+e.size()); |
| 6498 | for (int i=kmers.size()-1; i>=endIndex && used; --i) { |
| 6499 | Kmer kmer = kmers.get(i); |
| 6500 | |
| 6501 | if (!usedKmers.contains(kmer)) { |
| 6502 | used = false; |
| 6503 | } |
| 6504 | } |
| 6505 | |
| 6506 | if (used && (kmers.size() < d || hasDuplicatedKmerPair(kmers, e.getLast(), d, kmers.size()-1-d+e.size()))) { |
| 6507 | break; |
| 6508 | } |
| 6509 | |
| 6510 | kmers.addAll(e); |
| 6511 | usedKmers.addAll(e); |
no test coverage detected