Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class kmerRecord:
- _inFrames = {}
- _threshold = None
- reachedThreshold = False
- def __init__(self, threshold, inFrames = []):
- self._threshold = threshold
- if inFrames:
- self.incrementFrames(inFrames)
- # Debug
- def __repr__(self):
- return '<in: ' + str(self._inFrames) + ', t: ' + str(self.reachedThreshold) + '>'
- def incrementFrames(self, inFrames):
- if not self.reachedThreshold:
- for f in inFrames:
- if f in self._inFrames:
- self._inFrames[f] += 1
- if self._inFrames[f] >= self._threshold:
- self.reachedThreshold = True
- break
- else:
- self._inFrames[f] = 1
- def kmerClump(data, k, L, t):
- kmers = {}
- found = []
- N = len(data)
- for i in range(N - k + 1):
- kmer = data[i : i + k]
- inFrames = range(max(0, i - L + k), min(i, N - L) + 1)
- if kmer in kmers:
- kmers[kmer].incrementFrames(inFrames)
- else:
- kmers[kmer] = kmerRecord(t, inFrames)
- # Debug
- # print kmer, min(inFrames), max(inFrames), kmers
- if kmers[kmer].reachedThreshold:
- found.append(kmer)
- return found
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement