X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=chimeraslayer.cpp;h=102db7478223d0027e676304288552a2148966fb;hp=57528b4026e538f4b9ad85b706182e162bca2567;hb=cf9987b67aa49777a4c91c2d21f96e58bf17aa82;hpb=65b6a38d00b3a72021611211e7c25392022c69ed diff --git a/chimeraslayer.cpp b/chimeraslayer.cpp index 57528b4..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); @@ -35,6 +35,8 @@ int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int num realign = r; trimChimera = trim; numNoParents = 0; + blastlocation = blas; + threadID = tid; doPrep(); } @@ -44,9 +46,59 @@ 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, string blas, int tid, bool bg) : Chimera() { + try { + byGroup = bg; + 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++) { + if (m->control_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) : 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; templateSeqs = readSeqs(fastafile); templateFileName = temp; @@ -68,11 +120,14 @@ ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, mapgetRootName(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; } @@ -330,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; } @@ -519,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; @@ -573,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) {