#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") {
}
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();
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();
ifstream fastaFile;
openInputFile(tempFile, fastaFile);
-
+
while (!fastaFile.eof()) {
Sequence temp(fastaFile);
gobble(fastaFile);
database->setNumSeqs(names.size());
mothurOut("DONE."); mothurOutEndLine();
+ mothurOut("It took " + toString(time(NULL) - start) + " seconds generate search database. "); mothurOutEndLine();
}
catch(exception& e) {
void Classify::readTaxonomy(string file) {
try {
-
+
+ phyloTree = new PhyloTree();
+
ifstream inTax;
openInputFile(file, inTax);
inTax >> name >> taxInfo;
taxonomy[name] = taxInfo;
+
+ phyloTree->addSeqToTree(name, taxInfo);
gobble(inTax);
}
+
+ phyloTree->assignHeirarchyIDs(0);
inTax.close();
mothurOut("DONE.");
}
/**************************************************************************************************/
+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);
+ }
+}
+/**************************************************************************************************/
+