]> git.donarmstrong.com Git - mothur.git/blobdiff - kmerdb.cpp
fixes while testing 1.33.0
[mothur.git] / kmerdb.cpp
index e7e8ab2acbbf04c8bc30c6adb84fbd3880f7b2d8..9a5d23500be955b459413beee989601f6c0ec78f 100644 (file)
@@ -57,9 +57,12 @@ KmerDB::~KmerDB(){}
 
 vector<int> KmerDB::findClosestSequences(Sequence* candidateSeq, int num){
        try {
+               if (num > numSeqs) { m->mothurOut("[WARNING]: you requested " + toString(num) + " closest sequences, but the template only contains " + toString(numSeqs) + ", adjusting."); m->mothurOutEndLine(); num = numSeqs; }
+               
                vector<int> topMatches;
                Kmer kmer(kmerSize);
                searchScore = 0;
+               Scores.clear();
                
                vector<int> matches(numSeqs, 0);                                                //      a record of the sequences with shared kmers
                vector<int> timesKmerFound(kmerLocations.size()+1, 0);  //      a record of the kmers that we have already found
@@ -92,6 +95,8 @@ vector<int> KmerDB::findClosestSequences(Sequence* candidateSeq, int num){
                        //save top matches
                        for (int i = 0; i < num; i++) {
                                topMatches.push_back(seqMatches[i].seq);
+                               float thisScore = 100 * seqMatches[i].match / (float) numKmers;
+                               Scores.push_back(thisScore);
                        }
                }else{
                        int bestIndex = 0;
@@ -107,6 +112,7 @@ vector<int> KmerDB::findClosestSequences(Sequence* candidateSeq, int num){
                        searchScore = bestMatch;
                        searchScore = 100 * searchScore / (float) numKmers;             //      return the Sequence object corresponding to the db
                        topMatches.push_back(bestIndex);
+                       Scores.push_back(searchScore);
                }
                return topMatches;              
        }
@@ -211,6 +217,20 @@ int KmerDB::getCount(int kmer) {
        }       
 }
 /**************************************************************************************************/
+int KmerDB::getReversed(int kmerNumber) {
+       try {
+               Kmer kmer(kmerSize);
+               
+               if (kmerNumber < 0) { return 0; }  //if user gives negative number
+               else if (kmerNumber > maxKmer) {        return 0;       }  //or a kmer that is bigger than maxkmer
+               else {  return kmer.getReverseKmerNumber(kmerNumber);   }  // kmer is in vector range
+       }
+       catch(exception& e) {
+               m->errorOut(e, "KmerDB", "getReversed");
+               exit(1);
+       }       
+}
+/**************************************************************************************************/
 vector<int> KmerDB::getSequencesWithKmer(int kmer) {
        try {