X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=chimeraslayer.cpp;h=102db7478223d0027e676304288552a2148966fb;hp=97b331b65b556baafbd721cc6d0186097bdfa09e;hb=df7e3ff9f68ef157b0328a2d353c3258c5d45d89;hpb=75962c819c16814e5c2340d99af1aa62e564dc20 diff --git a/chimeraslayer.cpp b/chimeraslayer.cpp index 97b331b..102db74 100644 --- a/chimeraslayer.cpp +++ b/chimeraslayer.cpp @@ -14,7 +14,7 @@ //*************************************************************************************************************** ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, string mode, int k, int ms, int mms, int win, float div, -int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int numw, bool r) : Chimera() { +int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int numw, bool r, string blas, int tid) : Chimera() { try { fastafile = file; templateFileName = temp; templateSeqs = readSeqs(temp); @@ -34,6 +34,9 @@ int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int num numWanted = numw; realign = r; trimChimera = trim; + numNoParents = 0; + blastlocation = blas; + threadID = tid; doPrep(); } @@ -43,9 +46,11 @@ int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int num } } //*************************************************************************************************************** +//template=self, byGroup parameter used for mpienabled version to read the template as MPI_COMM_SELF instead of MPI_COMM_WORLD ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, map& prior, string mode, int k, int ms, int mms, int win, float div, - int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int numw, bool r) : Chimera() { + int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int numw, bool r, string blas, int tid, bool bg) : Chimera() { try { + byGroup = bg; fastafile = file; templateSeqs = readSeqs(fastafile); templateFileName = temp; searchMethod = mode; @@ -65,11 +70,64 @@ ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, mapcontrol_pressed) { break; } + + Sequence* newSeq = new Sequence(templateSeqs[i]->getName(), templateSeqs[i]->getAligned()); + runFilter(newSeq); + filteredTemplateSeqs.push_back(newSeq); + } + } + } + catch(exception& e) { + m->errorOut(e, "ChimeraSlayer", "ChimeraSlayer"); + exit(1); + } +} +//*************************************************************************************************************** +//template=self +ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, map& prior, string mode, int k, int ms, int mms, int win, float div, + int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int numw, bool r, string blas, int tid) : Chimera() { + try { + fastafile = file; templateSeqs = readSeqs(fastafile); + templateFileName = temp; + searchMethod = mode; + kmerSize = k; + match = ms; + misMatch = mms; + window = win; + divR = div; + minSim = minsim; + minCov = mincov; + minBS = minbs; + minSNP = minsnp; + parents = par; + iters = it; + increment = inc; + numWanted = numw; + realign = r; + trimChimera = trim; + priority = prior; + numNoParents = 0; + blastlocation = blas; + threadID = tid; + + + createFilter(templateSeqs, 0.0); //just removed columns where all seqs have a gap + + if (searchMethod == "distance") { + //createFilter(templateSeqs, 0.0); //just removed columns where all seqs have a gap //run filter on template copying templateSeqs into filteredTemplateSeqs for (int i = 0; i < templateSeqs.size(); i++) { @@ -213,7 +271,7 @@ int ChimeraSlayer::doPrep() { }else if (searchMethod == "blast") { //generate blastdb - databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(fastafile)), -1.0, -1.0, 1, -3); + databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(fastafile)), -1.0, -1.0, 1, -3, blastlocation, threadID); if (m->control_pressed) { return 0; } @@ -254,6 +312,11 @@ vector ChimeraSlayer::getTemplate(Sequence q, vector& user } } + //avoids nuisance error from formatdb for making blank blast database + if (userTemplate.size() == 0) { + return userTemplate; + } + string kmerDBNameLeft; string kmerDBNameRight; @@ -322,7 +385,7 @@ vector ChimeraSlayer::getTemplate(Sequence q, vector& user }else if (searchMethod == "blast") { //generate blastdb - databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(templateFileName)), -1.0, -1.0, 1, -3); + databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(templateFileName)), -1.0, -1.0, 1, -3, blastlocation, threadID); if (m->control_pressed) { return userTemplate; } @@ -511,12 +574,13 @@ Sequence ChimeraSlayer::print(ostream& out, ostream& outAcc, data_results leftPi #ifdef USE_MPI //*************************************************************************************************************** -Sequence ChimeraSlayer::print(MPI_File& out, MPI_File& outAcc, data_results leftPiece, data_results rightPiece) { +Sequence ChimeraSlayer::print(MPI_File& out, MPI_File& outAcc, data_results leftPiece, data_results rightPiece, bool& chimFlag) { try { MPI_Status status; bool results = false; string outAccString = ""; string outputString = ""; + chimFlag = false; Sequence trim; @@ -565,6 +629,7 @@ Sequence ChimeraSlayer::print(MPI_File& out, MPI_File& outAcc, data_results left memcpy(buf2, outAccString.c_str(), length); MPI_File_write_shared(outAcc, buf2, length, MPI_CHAR, &status); + chimFlag = true; delete buf2; if (trimChimera) { @@ -747,7 +812,6 @@ int ChimeraSlayer::getChimeras(Sequence* query) { else { thisTemplate = getTemplate(*query, thisFilteredTemplate); } //fills this template and creates the databases if (m->control_pressed) { return 0; } - if (thisTemplate.size() == 0) { return 0; } //not chimeric //moved this out of maligner - 4/29/11 @@ -1115,6 +1179,8 @@ vector ChimeraSlayer::getBlastSeqs(Sequence q, vector& db, //string qname = q->getName().substr(0, q->getName().find_last_of('_')); //cout << qname << endl; + if (mergedResults.size() == 0) { numNoParents++; } + for (int i = 0; i < mergedResults.size(); i++) { //cout << q->getName() << mergedResults[i] << '\t' << db[mergedResults[i]]->getName() << endl; if (db[mergedResults[i]]->getName() != q.getName()) { @@ -1127,8 +1193,6 @@ vector ChimeraSlayer::getBlastSeqs(Sequence q, vector& db, delete queryRight; delete queryLeft; - if (refResults.size() == 0) { m->mothurOut("[WARNING]: megablast returned 0 potential parents, so we are not able to check " + q.getName() + ". This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); } - return refResults; } catch(exception& e) {