MCPcopy Create free account
hub / github.com/BirolLab/RNA-Bloom / extendLeftPE

Method extendLeftPE

src/rnabloom/util/GraphUtils.java:6311–6414  ·  view source on GitHub ↗
(ArrayList<Kmer> kmers, 
                                            BloomFilterDeBruijnGraph graph, 
                                            int maxTipLen,
                                            float minKmerCov)

Source from the content-addressed store, hash-verified

6309 }
6310
6311 private static ArrayDeque<Kmer> extendLeftPE(ArrayList<Kmer> kmers,
6312 BloomFilterDeBruijnGraph graph,
6313 int maxTipLen,
6314 float minKmerCov) {
6315 // `kmers` is reversed
6316
6317 final int k = graph.getK();
6318 final int numHash = graph.getMaxNumHash();
6319 final int readPairedKmersDist = graph.getReadPairedKmerDistance();
6320 final int fragPairedKmersDist = graph.getFragPairedKmerDistance();
6321 final int numKmers = kmers.size();
6322 int maxExtensionLength = fragPairedKmersDist - 2; // -1 for candidate k-mer; -1 for partner kmer on current sequence
6323
6324 ArrayDeque<Kmer> candidates = kmers.get(numKmers-1).getPredecessors(k, numHash, graph);
6325
6326 if (candidates.size() == 1) {
6327 Kmer c = candidates.peek();
6328 ArrayDeque<Kmer> e = naiveExtendLeftNoBackChecks(c, graph, maxTipLen, maxExtensionLength, minKmerCov);
6329 e.addFirst(c);
6330 return e;
6331 }
6332
6333 for (int i=numKmers-1; i>=0; --i) {
6334 if (graph.isRepeatKmer(kmers.get(i))) {
6335 --maxExtensionLength;
6336 }
6337 else {
6338 break;
6339 }
6340 }
6341
6342 final float pathMinCov = getMinimumKmerCoverage(kmers, Math.max(numKmers - fragPairedKmersDist, 0), numKmers);
6343 float bestScore = 0;
6344 float bestCov = 0;
6345 ArrayDeque<Kmer> bestExtension = null;
6346 int[] result = new int[3];
6347
6348 for (Kmer candidate : candidates) {
6349 ArrayDeque<Kmer> e = naiveExtendLeftNoBackChecks(candidate, graph, maxTipLen, maxExtensionLength, minKmerCov);
6350 e.addFirst(candidate);
6351
6352 countKmerPairsReversedPE(e, kmers, 0, graph, result);
6353
6354 int lastPartneredKmerIndex = result[2];
6355
6356 if (lastPartneredKmerIndex >= 0 && result[0] > 0 && result[1] > 0) {
6357 float cov = getMedianKmerCoverage(e);
6358 float score = Math.min(pathMinCov, cov) * (result[0] + result[1]) / (lastPartneredKmerIndex+1);
6359 if (score > bestScore || (score == bestScore && cov > bestCov)) {
6360 bestScore = score;
6361 bestCov = cov;
6362 bestExtension = e;
6363
6364 Iterator<Kmer> itr = e.descendingIterator();
6365 for (int i=e.size()-1; i>lastPartneredKmerIndex; --i) {
6366 itr.next();
6367 itr.remove();
6368 }

Callers 1

extendPEMethod · 0.95

Calls 14

getMedianKmerCoverageMethod · 0.95
getMaxNumHashMethod · 0.80
isRepeatKmerMethod · 0.80
getMethod · 0.65
nextMethod · 0.65
hasNextMethod · 0.65
getKMethod · 0.45

Tested by

no test coverage detected