X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=kmer.cpp;fp=kmer.cpp;h=dcb6475161ce6f29f89d746fa1581ca7cab380c4;hb=526a868606faa50caf86e7399f7554c0335b39e5;hp=875cec54e9a8547341f060de8cba73eca1517a4d;hpb=c35f02a218ce8f430a75850b4d9fabb96b3a022b;p=mothur.git diff --git a/kmer.cpp b/kmer.cpp index 875cec5..dcb6475 100644 --- a/kmer.cpp +++ b/kmer.cpp @@ -14,28 +14,29 @@ using namespace std; /**************************************************************************************************/ -Kmer::Kmer(int size) : kmerSize(size) { - - int power4s[9] = { 1, 4, 16, 64, 256, 1024, 4096, 16384, 65536 }; - maxKmer = power4s[kmerSize]+1;// (int)pow(4.,k)+1; +Kmer::Kmer(int size) : kmerSize(size) { // The constructor sets the size of the kmer + int power4s[14] = { 1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864 }; + // No reason to waste the time of recalculating + maxKmer = power4s[kmerSize]+1;// (int)pow(4.,k)+1; // powers of 4 everytime through. We need an + // extra kmer if we get a non-ATGCU base } /**************************************************************************************************/ -string Kmer::getKmerString(string sequence){ - int length = sequence.length(); - int nKmers = length - kmerSize + 1; +string Kmer::getKmerString(string sequence){ // Calculate kmer for each position in the sequence, count the freq + int length = sequence.length(); // of each kmer, and convert it to an ascii character with base '!'. + int nKmers = length - kmerSize + 1; // Export the string of characters as a string vector counts(maxKmer, 0); - for(int i=0;i T [T] +// Base5 = (915 / 4^1) % 4 = 228 % 4 = 0 => A [AT] +// Base4 = (915 / 4^2) % 4 = 57 % 4 = 1 => C [CAT] +// Base3 = (915 / 4^3) % 4 = 14 % 4 = 2 => G [GCAT] +// Base2 = (915 / 4^4) % 4 = 3 % 4 = 3 => T [TGCAT] +// Base1 = (915 / 4^5) % 4 = 0 % 4 = 0 => A [ATGCAT] -> this checks out with the previous method + + int power4s[14] = { 1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864 }; string kmer = ""; - if(kmerNumber == power4s[kmerSize]){//pow(4.,7)){ - for(int i=0;i