]> git.donarmstrong.com Git - mothur.git/blobdiff - knn.cpp
enabled ~
[mothur.git] / knn.cpp
diff --git a/knn.cpp b/knn.cpp
index 0a62e743b0dd8d4f5435d504127a70724f9f27a8..64b5b3a288db8ce2f1d6da7e08af90bd8e26e613 100644 (file)
--- a/knn.cpp
+++ b/knn.cpp
 #include "knn.h"
 
 /**************************************************************************************************/
-Knn::Knn(string tfile, string tempFile, string method, int kmerSize, int gapOpen, int gapExtend, int match, int misMatch, int n) 
-: Classify(tfile, tempFile, method, kmerSize, gapOpen, gapExtend, match, misMatch), num(n)  {}
+Knn::Knn(string tfile, string tempFile, string method, int kmerSize, float gapOpen, float gapExtend, float match, float misMatch, int n) 
+: Classify(), num(n)  {
+       try {
+               //create search database and names vector
+               generateDatabaseAndNames(tfile, tempFile, method, kmerSize, gapOpen, gapExtend, match, misMatch);
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Knn", "Knn");
+               exit(1);
+       }
+}
 /**************************************************************************************************/
 string Knn::getTaxonomy(Sequence* seq) {
        try {
@@ -20,6 +29,8 @@ string Knn::getTaxonomy(Sequence* seq) {
                //use database to find closest seq
                vector<int> closest = database->findClosestSequences(seq, num);
                
+               if (m->control_pressed) { return tax; }
+
                vector<string> closestNames;
                for (int i = 0; i < closest.size(); i++) {
                        //find that sequences taxonomy in map
@@ -27,22 +38,23 @@ string Knn::getTaxonomy(Sequence* seq) {
                
                        //is this sequence in the taxonomy file
                        if (it == taxonomy.end()) { //error not in file
-                               mothurOut("Error: sequence " + names[closest[i]] + " is not in the taxonomy file.  It will be eliminated as a match to sequence " + seq->getName() + "."); mothurOutEndLine();
+                               m->mothurOut("Error: sequence " + names[closest[i]] + " is not in the taxonomy file.  It will be eliminated as a match to sequence " + seq->getName() + "."); m->mothurOutEndLine();
                        }else{   closestNames.push_back(it->first);     }
                }
                
                if (closestNames.size() == 0) {
-                       mothurOut("Error: All the matches for sequence " + seq->getName() + " have been eliminated. " + seq->getName() + " will be disregarded."); mothurOutEndLine();
+                       m->mothurOut("Error: All the matches for sequence " + seq->getName() + " have been eliminated. " + seq->getName() + " will be disregarded."); m->mothurOutEndLine();
                        tax = "bad seq";
                }else{
                        tax = findCommonTaxonomy(closestNames);
-                       if (tax == "") { mothurOut("There are no common levels for sequence " + seq->getName() + ". " + seq->getName() + " will be disregarded."); mothurOutEndLine(); tax = "bad seq"; }
+                       if (tax == "") { m->mothurOut("There are no common levels for sequence " + seq->getName() + ". " + seq->getName() + " will be disregarded."); m->mothurOutEndLine(); tax = "bad seq"; }
                }
                
+               simpleTax = tax;
                return tax;     
        }
        catch(exception& e) {
-               errorOut(e, "Knn", "getTaxonomy");
+               m->errorOut(e, "Knn", "getTaxonomy");
                exit(1);
        }
 }
@@ -57,6 +69,7 @@ string Knn::findCommonTaxonomy(vector<string> closest)  {
                int smallest = 100;
                
                for (int i = 0; i < closest.size(); i++) {
+                       if (m->control_pressed) { return "control"; }
                
                        string tax = taxonomy[closest[i]];  //we know its there since we checked in getTaxonomy
                
@@ -71,6 +84,7 @@ string Knn::findCommonTaxonomy(vector<string> closest)  {
                //start at the highest level all the closest seqs have
                string common = "";
                for (int i = (smallest-1); i >= 0; i--) {
+                       if (m->control_pressed) { return "control"; }
 
                        string thistax = taxons[0][i];
                        int num = 0;
@@ -90,7 +104,7 @@ string Knn::findCommonTaxonomy(vector<string> closest)  {
                return common;
        }
        catch(exception& e) {
-               errorOut(e, "Knn", "findCommonTaxonomy");
+               m->errorOut(e, "Knn", "findCommonTaxonomy");
                exit(1);
        }
 }