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

Method isTemplateSwitch

src/rnabloom/util/GraphUtils.java:8434–8533  ·  view source on GitHub ↗
(ArrayList<Kmer> seqKmers, BloomFilterDeBruijnGraph graph, BloomFilter assembledKmers, int lookahead)

Source from the content-addressed store, hash-verified

8432 }
8433
8434 public static boolean isTemplateSwitch(ArrayList<Kmer> seqKmers, BloomFilterDeBruijnGraph graph, BloomFilter assembledKmers, int lookahead) {
8435 int k = graph.getK();
8436 int numKmers = seqKmers.size();
8437
8438 float leftEdgeCov = getMinimumKmerCoverage(seqKmers, 0, Math.min(lookahead, numKmers));
8439 float rightEdgeCov = getMinimumKmerCoverage(seqKmers, Math.max(0, numKmers-lookahead), numKmers);
8440
8441 if (assembledKmers.lookup(seqKmers.get(0).getHash()) &&
8442 (!assembledKmers.lookup(seqKmers.get(numKmers-1).getHash()) || leftEdgeCov > rightEdgeCov)) {
8443 int i = 1;
8444 for (; i < numKmers; ++i) {
8445 if (!assembledKmers.lookup(seqKmers.get(i).getHash())) {
8446 break;
8447 }
8448 }
8449
8450 if (i == numKmers) {
8451 return false;
8452 }
8453
8454 --i;
8455
8456 String tipRC = reverseComplement(graph.assemble(seqKmers, Math.min(i+k, numKmers-1), numKmers));
8457
8458 if (i-lookahead >= 0) {
8459 i -= lookahead;
8460 }
8461
8462 ArrayDeque<Kmer> leftExtension = greedyExtendLeft(graph, seqKmers.get(0), lookahead, 1000, assembledKmers);
8463 ArrayDeque<Kmer> rightExtension = greedyExtendRight(graph, seqKmers.get(i), lookahead, 1000, assembledKmers);
8464
8465 leftExtension.addAll(seqKmers.subList(0, i+1));
8466 leftExtension.addAll(rightExtension);
8467
8468 String backbone = graph.assemble(leftExtension);
8469 if (backbone.contains(tipRC)) {
8470 return true;
8471 }
8472// else {
8473// HashSet<Kmer> intersection = new HashSet<>(rightExtension);
8474// intersection.retainAll(greedyExtendLeft(graph, graph.getKmer(getFirstKmer(tipRC, k)), lookahead, 1000, assembledKmers));
8475// if (!intersection.isEmpty()) {
8476// return true;
8477// }
8478//
8479// intersection = new HashSet<>(leftExtension);
8480// intersection.retainAll(greedyExtendRight(graph, graph.getKmer(getLastKmer(tipRC, k)), lookahead, 1000, assembledKmers));
8481// if (!intersection.isEmpty()) {
8482// return true;
8483// }
8484// }
8485 }
8486 else if (assembledKmers.lookup(seqKmers.get(numKmers-1).getHash()) &&
8487 (!assembledKmers.lookup(seqKmers.get(0).getHash()) || leftEdgeCov < rightEdgeCov)) {
8488 int j = numKmers-2;
8489 for (; j >= 0; --j) {
8490 if (!assembledKmers.lookup(seqKmers.get(j).getHash())) {
8491 break;

Callers

nothing calls this directly

Calls 11

greedyExtendLeftMethod · 0.95
greedyExtendRightMethod · 0.95
assembleMethod · 0.80
containsMethod · 0.80
lookupMethod · 0.65
getMethod · 0.65
getKMethod · 0.45
sizeMethod · 0.45
getHashMethod · 0.45
reverseComplementMethod · 0.45

Tested by

no test coverage detected