]> git.donarmstrong.com Git - mothur.git/blobdiff - classify.cpp
added distance search method to classify.seqs
[mothur.git] / classify.cpp
index 605c1f8f3c6470310a649cebfcc090141eb7d70d..346c76478eefdf896fe6f04659174321bc721063 100644 (file)
 #include "kmerdb.hpp"
 #include "suffixdb.hpp"
 #include "blastdb.hpp"
+#include "distancedb.hpp"
 
 /**************************************************************************************************/
-
-Classify::Classify(string tfile, string tempFile, string method, int kmerSize, int gapOpen, int gapExtend, int match, int misMatch) : taxFile(tfile), templateFile(tempFile) {         
-       try {                                                                                   
-               
-               readTaxonomy(taxFile);
+Classify::Classify(string tfile, string tempFile, string method, int kmerSize, float gapOpen, float gapExtend, float match, float misMatch) : taxFile(tfile), templateFile(tempFile) {         
+       try {   
+                                                                                       
+               readTaxonomy(taxFile);  
                
+               int start = time(NULL);
                int numSeqs = 0;
                //need to know number of template seqs for suffixdb
                if (method == "suffix") {
@@ -42,6 +43,7 @@ Classify::Classify(string tfile, string tempFile, string method, int kmerSize, i
                }
                else if(method == "suffix")             {       database = new SuffixDB(numSeqs);                                                               }
                else if(method == "blast")              {       database = new BlastDB(gapOpen, gapExtend, match, misMatch);    }
+               else if(method == "distance")   {       database = new DistanceDB();    }
                else {
                        mothurOut(method + " is not a valid search option. I will run the command using kmer, ksize=8.");
                        mothurOutEndLine();
@@ -51,12 +53,13 @@ Classify::Classify(string tfile, string tempFile, string method, int kmerSize, i
                if (needToGenerate) {
                        ifstream fastaFile;
                        openInputFile(tempFile, fastaFile);
-               
+                       
                        while (!fastaFile.eof()) {
                                Sequence temp(fastaFile);
                                gobble(fastaFile);
                        
                                names.push_back(temp.getName());
+                                                               
                                database->addSequence(temp);    
                        }
                        fastaFile.close();
@@ -69,7 +72,7 @@ Classify::Classify(string tfile, string tempFile, string method, int kmerSize, i
                        
                        ifstream fastaFile;
                        openInputFile(tempFile, fastaFile);
-               
+                       
                        while (!fastaFile.eof()) {
                                Sequence temp(fastaFile);
                                gobble(fastaFile);
@@ -82,6 +85,7 @@ Classify::Classify(string tfile, string tempFile, string method, int kmerSize, i
                database->setNumSeqs(names.size());
                
                mothurOut("DONE."); mothurOutEndLine();
+               mothurOut("It took " + toString(time(NULL) - start) + " seconds generate search database. "); mothurOutEndLine();
 
        }
        catch(exception& e) {
@@ -93,7 +97,9 @@ Classify::Classify(string tfile, string tempFile, string method, int kmerSize, i
 
 void Classify::readTaxonomy(string file) {
        try {
-       
+               
+               phyloTree = new PhyloTree();
+               
                ifstream inTax;
                openInputFile(file, inTax);
        
@@ -106,9 +112,13 @@ void Classify::readTaxonomy(string file) {
                        inTax >> name >> taxInfo;
                        
                        taxonomy[name] = taxInfo;
+                       
+                       phyloTree->addSeqToTree(name, taxInfo);
                
                        gobble(inTax);
                }
+               
+               phyloTree->assignHeirarchyIDs(0);
                inTax.close();
        
                mothurOut("DONE.");
@@ -122,3 +132,29 @@ void Classify::readTaxonomy(string file) {
 }
 /**************************************************************************************************/
 
+vector<string> Classify::parseTax(string tax) {
+       try {
+               vector<string> taxons;
+               
+               tax = tax.substr(0, tax.length()-1);  //get rid of last ';'
+       
+               //parse taxonomy
+               string individual;
+               while (tax.find_first_of(';') != -1) {
+                       individual = tax.substr(0,tax.find_first_of(';'));
+                       tax = tax.substr(tax.find_first_of(';')+1, tax.length());
+                       taxons.push_back(individual);
+                       
+               }
+               //get last one
+               taxons.push_back(tax);
+               
+               return taxons;
+       }
+       catch(exception& e) {
+               errorOut(e, "Classify", "parseTax");
+               exit(1);
+       }
+}
+/**************************************************************************************************/
+