X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=alignmentdb.cpp;h=df4eaec783dbb81e33c09c3d97473c02425ba1ce;hb=2bb9267aa4b4ecdf8488b06605cc9f3f36fa4332;hp=0fd2ac4dca4ff4fcfc770488ab96f40dc21c38d7;hpb=65b6a38d00b3a72021611211e7c25392022c69ed;p=mothur.git diff --git a/alignmentdb.cpp b/alignmentdb.cpp index 0fd2ac4..df4eaec 100644 --- a/alignmentdb.cpp +++ b/alignmentdb.cpp @@ -13,19 +13,52 @@ #include "blastdb.hpp" #include "referencedb.h" - /**************************************************************************************************/ -AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gapOpen, float gapExtend, float match, float misMatch){ // This assumes that the template database is in fasta format, may +//deep copy +AlignmentDB::AlignmentDB(const AlignmentDB& adb) : numSeqs(adb.numSeqs), longest(adb.longest), method(adb.method), emptySequence(adb.emptySequence), threadID(adb.threadID) { + try { + + m = MothurOut::getInstance(); + if (adb.method == "blast") { + search = new BlastDB(*((BlastDB*)adb.search)); + }else if(adb.method == "kmer") { + search = new KmerDB(*((KmerDB*)adb.search)); + }else if(adb.method == "suffix") { + search = new SuffixDB(*((SuffixDB*)adb.search)); + }else { + m->mothurOut("[ERROR]: cannot create copy of alignment database, unrecognized method - " + adb.method); m->mothurOutEndLine(); + } + + for (int i = 0; i < adb.templateSequences.size(); i++) { + Sequence temp(adb.templateSequences[i]); + templateSequences.push_back(temp); + } + } + catch(exception& e) { + m->errorOut(e, "AlignmentDB", "AlignmentDB"); + exit(1); + } + +} +/**************************************************************************************************/ +AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gapOpen, float gapExtend, float match, float misMatch, int tid){ // This assumes that the template database is in fasta format, may try { // need to alter this in the future? m = MothurOut::getInstance(); longest = 0; method = s; bool needToGenerate = true; ReferenceDB* rdb = ReferenceDB::getInstance(); + bool silent = false; + threadID = tid; + + if (fastaFileName == "saved-silent") { + fastaFileName = "saved"; silent = true; + } if (fastaFileName == "saved") { int start = time(NULL); - m->mothurOutEndLine(); m->mothurOut("Using sequences from " + rdb->getSavedReference() + " that are saved in memory."); m->mothurOutEndLine(); + + if (!silent) { m->mothurOutEndLine(); m->mothurOut("Using sequences from " + rdb->getSavedReference() + " that are saved in memory."); m->mothurOutEndLine(); } for (int i = 0; i < rdb->referenceSeqs.size(); i++) { templateSequences.push_back(rdb->referenceSeqs[i]); @@ -35,7 +68,7 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap fastaFileName = rdb->getSavedReference(); numSeqs = templateSequences.size(); - m->mothurOut("It took " + toString(time(NULL) - start) + " to load " + toString(rdb->referenceSeqs.size()) + " sequences.");m->mothurOutEndLine(); + if (!silent) { m->mothurOut("It took " + toString(time(NULL) - start) + " to load " + toString(rdb->referenceSeqs.size()) + " sequences.");m->mothurOutEndLine(); } }else { int start = time(NULL); @@ -44,7 +77,7 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap #ifdef USE_MPI int pid, processors; - vector positions; + vector positions; MPI_Status status; MPI_File inMPI; @@ -129,7 +162,7 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap m->mothurOut("DONE."); m->mothurOutEndLine(); cout.flush(); - m->mothurOut("It took " + toString(time(NULL) - start) + " to read " + toString(rdb->referenceSeqs.size()) + " sequences."); m->mothurOutEndLine(); + m->mothurOut("It took " + toString(time(NULL) - start) + " to read " + toString(templateSequences.size()) + " sequences."); m->mothurOutEndLine(); } @@ -157,8 +190,9 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap #endif } else if(method == "suffix") { search = new SuffixDB(numSeqs); } - else if(method == "blast") { search = new BlastDB(fastaFileName.substr(0,fastaFileName.find_last_of(".")+1), gapOpen, gapExtend, match, misMatch); } + else if(method == "blast") { search = new BlastDB(fastaFileName.substr(0,fastaFileName.find_last_of(".")+1), gapOpen, gapExtend, match, misMatch, "", threadID); } else { + method = "kmer"; m->mothurOut(method + " is not a valid search option. I will run the command using kmer, ksize=8."); m->mothurOutEndLine(); search = new KmerDB(fastaFileName, 8); @@ -198,7 +232,7 @@ AlignmentDB::AlignmentDB(string s){ method = s; if(method == "suffix") { search = new SuffixDB(); } - else if(method == "blast") { search = new BlastDB(); } + else if(method == "blast") { search = new BlastDB("", 0); } else { search = new KmerDB(); }