diff --git a/algo/core/kmerstore.h b/algo/core/kmerstore.h index 712c391f4e4dedfd66e3f42b90f0a0a460add61b..ee94e57b672a2b3778c5231c078c51420677b9ac 100644 --- a/algo/core/kmerstore.h +++ b/algo/core/kmerstore.h @@ -134,7 +134,7 @@ public: * @return a vector of length seq.length() - getK() + 1 containing * for each k-mer the corresponding value in the index. */ - virtual vector getResults(const seqtype &seq, bool no_revcomp=false) = 0; + virtual vector getResults(const seqtype &seq, bool no_revcomp=false, string seed="") = 0; /** * @return true iff the revcomp is indexed @@ -165,7 +165,7 @@ public: MapKmerStore(string seed, bool=false); MapKmerStore(int k, bool=false); - vector getResults(const seqtype &seq, bool no_revcomp=false); + vector getResults(const seqtype &seq, bool no_revcomp=false, string seed=""); T& get(seqtype &word); T& operator[](seqtype & word); @@ -196,7 +196,7 @@ public: ArrayKmerStore(int k, bool=false); ~ArrayKmerStore(); - vector getResults(const seqtype &seq, bool no_revcomp=false); + vector getResults(const seqtype &seq, bool no_revcomp=false, const string seed=""); T& get(seqtype &word); T& operator[](seqtype & word); T& operator[](int word); @@ -343,16 +343,18 @@ Fasta IKmerStore::getLabel(T kmer) const { // .getResults() template -vector MapKmerStore::getResults(const seqtype &seq, bool no_revcomp) { +vector MapKmerStore::getResults(const seqtype &seq, bool no_revcomp, string seed) { - int s = IKmerStore::getS(); + if (! seed.size()) + seed = IKmerStore::seed; + int s = seed.size(); if ((int)seq.length() < s - 1) { return vector(0); } vector result(seq.length() - s + 1); for (size_t i=0; i + s < seq.length() + 1; i++) { - seqtype kmer = spaced(seq.substr(i, s), IKmerStore::seed); + seqtype kmer = spaced(seq.substr(i, s), seed); // seqtype kmer = seq.substr(i, s); // cout << kmer << endl << kmer0 << endl << endl ; if (IKmerStore::revcomp_indexed && no_revcomp) { @@ -365,9 +367,11 @@ vector MapKmerStore::getResults(const seqtype &seq, bool no_revcomp) { } template -vector ArrayKmerStore::getResults(const seqtype &seq, bool no_revcomp) { +vector ArrayKmerStore::getResults(const seqtype &seq, bool no_revcomp, string seed) { - int s = IKmerStore::getS(); + if (! seed.size()) + seed = IKmerStore::seed; + int s = seed.size(); int N = (int)seq.length(); @@ -385,7 +389,7 @@ vector ArrayKmerStore::getResults(const seqtype &seq, bool no_revcomp) { /* Compute results */ for (size_t i=0; (int) i+s < N+1; i++) { - int kmer = spaced_int(intseq + i, IKmerStore::seed); + int kmer = spaced_int(intseq + i, seed); if (IKmerStore::revcomp_indexed && no_revcomp) { result[i] = store[kmer]; // getfromint(kmer); // store[kmer]; // cout << i << "/" << N << " " << kmer << result[i] << endl ;