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

Method extendLeftSE

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

Source from the content-addressed store, hash-verified

6110 }
6111
6112 private static ArrayDeque<Kmer> extendLeftSE(ArrayList<Kmer> kmers,
6113 BloomFilterDeBruijnGraph graph,
6114 int maxTipLen,
6115 float minKmerCov) {
6116 // `kmers` is reversed
6117
6118 final int k = graph.getK();
6119 final int numHash = graph.getMaxNumHash();
6120 final int readPairedKmersDist = graph.getReadPairedKmerDistance();
6121 final int numKmers = kmers.size();
6122 int maxExtensionLength = readPairedKmersDist - 2; // -1 for candidate k-mer; -1 for partner kmer on current sequence
6123
6124 ArrayDeque<Kmer> candidates = kmers.get(numKmers-1).getPredecessors(k, numHash, graph);
6125
6126 if (candidates.size() == 1) {
6127 Kmer c = candidates.peek();
6128 ArrayDeque<Kmer> e = naiveExtendLeftNoBackChecks(c, graph, maxTipLen, maxExtensionLength, minKmerCov);
6129 e.addFirst(c);
6130 return e;
6131 }
6132
6133 final float pathMinCov = getMinimumKmerCoverage(kmers, Math.max(numKmers - readPairedKmersDist, 0), numKmers);
6134 float bestScore = 0;
6135 float bestCov = 0;
6136 ArrayDeque<Kmer> bestExtension = null;
6137 int[] result = new int[2];
6138
6139 for (Kmer candidate : candidates) {
6140 ArrayDeque<Kmer> e = naiveExtendLeftNoBackChecks(candidate, graph, maxTipLen, maxExtensionLength, minKmerCov);
6141 e.addFirst(candidate);
6142
6143 countKmerPairsReversedSE(e, kmers, 0, graph, result);
6144
6145 int lastPartneredKmerIndex = result[1];
6146
6147 if (lastPartneredKmerIndex >= 0 && result[0] > 0) {
6148 float cov = getMedianKmerCoverage(e);
6149 float score = Math.min(pathMinCov, cov) * result[0] / (lastPartneredKmerIndex+1);
6150 if (score > bestScore || (score == bestScore && cov > bestCov)) {
6151 bestScore = score;
6152 bestCov = cov;
6153 bestExtension = e;
6154
6155 Iterator<Kmer> itr = e.descendingIterator();
6156 for (int i=e.size()-1; i>lastPartneredKmerIndex; --i) {
6157 itr.next();
6158 itr.remove();
6159 }
6160 }
6161 }
6162 else {
6163 int gap = e.size();
6164
6165 if (gap >= readPairedKmersDist-1 && result[0] == 0) {
6166 continue;
6167 }
6168
6169 // not enough supporting paired k-mers in first extension

Callers 2

joinMethod · 0.95
extendSEMethod · 0.95

Calls 12

getMedianKmerCoverageMethod · 0.95
getMaxNumHashMethod · 0.80
getMethod · 0.65
nextMethod · 0.65
hasNextMethod · 0.65
getKMethod · 0.45
sizeMethod · 0.45
getPredecessorsMethod · 0.45

Tested by

no test coverage detected