(ArrayList<Kmer> kmers,
BloomFilterDeBruijnGraph graph,
int maxTipLen,
float minKmerCov)
| 6016 | */ |
| 6017 | |
| 6018 | private static ArrayDeque<Kmer> extendRightSE(ArrayList<Kmer> kmers, |
| 6019 | BloomFilterDeBruijnGraph graph, |
| 6020 | int maxTipLen, |
| 6021 | float minKmerCov) { |
| 6022 | final int k = graph.getK(); |
| 6023 | final int numHash = graph.getMaxNumHash(); |
| 6024 | final int readPairedKmersDist = graph.getReadPairedKmerDistance(); |
| 6025 | final int numKmers = kmers.size(); |
| 6026 | int maxExtensionLength = readPairedKmersDist - 2; // -1 for candidate k-mer; -1 for partner kmer on current sequence |
| 6027 | |
| 6028 | ArrayDeque<Kmer> candidates = kmers.get(numKmers-1).getSuccessors(k, numHash, graph); |
| 6029 | |
| 6030 | if (candidates.size() == 1) { |
| 6031 | Kmer c = candidates.peek(); |
| 6032 | ArrayDeque<Kmer> e = naiveExtendRightNoBackChecks(c, graph, maxTipLen, maxExtensionLength, minKmerCov); |
| 6033 | e.addFirst(c); |
| 6034 | return e; |
| 6035 | } |
| 6036 | |
| 6037 | final float pathMinCov = getMinimumKmerCoverage(kmers, Math.max(numKmers - readPairedKmersDist, 0), numKmers); |
| 6038 | float bestScore = 0; |
| 6039 | float bestCov = 0; |
| 6040 | ArrayDeque<Kmer> bestExtension = null; |
| 6041 | int[] result = new int[2]; |
| 6042 | |
| 6043 | for (Kmer candidate : candidates) { |
| 6044 | ArrayDeque<Kmer> e = naiveExtendRightNoBackChecks(candidate, graph, maxTipLen, maxExtensionLength, minKmerCov); |
| 6045 | e.addFirst(candidate); |
| 6046 | |
| 6047 | countKmerPairsSE(kmers, e, 0, graph, result); |
| 6048 | |
| 6049 | int lastPartneredKmerIndex = result[1]; |
| 6050 | |
| 6051 | if (lastPartneredKmerIndex >= 0 && result[0] > 0) { |
| 6052 | float cov = getMedianKmerCoverage(e); |
| 6053 | float score = Math.min(pathMinCov, cov) * result[0] / (lastPartneredKmerIndex+1); |
| 6054 | // System.out.println(score + ": " + graph.assemble(e)); |
| 6055 | if (score > bestScore || (score == bestScore && cov > bestCov)) { |
| 6056 | bestScore = score; |
| 6057 | bestCov = cov; |
| 6058 | bestExtension = e; |
| 6059 | |
| 6060 | Iterator<Kmer> itr = e.descendingIterator(); |
| 6061 | for (int i=e.size()-1; i>lastPartneredKmerIndex; --i) { |
| 6062 | itr.next(); |
| 6063 | itr.remove(); |
| 6064 | } |
| 6065 | } |
| 6066 | } |
| 6067 | else { |
| 6068 | int gap = e.size(); |
| 6069 | |
| 6070 | if (gap >= readPairedKmersDist-1 && result[0] == 0) { |
| 6071 | continue; |
| 6072 | } |
| 6073 | |
| 6074 | // not enough supporting paired k-mers in first extension |
| 6075 |
no test coverage detected