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

Method extendRightSE

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

Source from the content-addressed store, hash-verified

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

Callers 2

joinMethod · 0.95
extendSEMethod · 0.95

Calls 12

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

Tested by

no test coverage detected