X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=chimeraslayer.cpp;h=826f38ba962681e883809c5dcb2711939d205c99;hb=2405cc589aaaf0c44809a48fe98d3b96863dac0b;hp=5868a7c721e69a9206a668536f35d02d573c9568;hpb=9489965363593bb2a3e94f801b4079a32ddf8732;p=mothur.git diff --git a/chimeraslayer.cpp b/chimeraslayer.cpp index 5868a7c..826f38b 100644 --- a/chimeraslayer.cpp +++ b/chimeraslayer.cpp @@ -72,10 +72,18 @@ ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, mapcontrol_pressed) { break; } runFilter(templateSeqs[i]); } - - + 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"); @@ -209,7 +217,7 @@ int ChimeraSlayer::doPrep() { }else if (searchMethod == "blast") { //generate blastdb - databaseLeft = new BlastDB(-1.0, -1.0, 1, -3); + databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(fastafile)), -1.0, -1.0, 1, -3); for (int i = 0; i < templateSeqs.size(); i++) { databaseLeft->addSequence(*templateSeqs[i]); } databaseLeft->generateDB(); @@ -316,7 +324,7 @@ vector ChimeraSlayer::getTemplate(Sequence* q, vector& use }else if (searchMethod == "blast") { //generate blastdb - databaseLeft = new BlastDB(-1.0, -1.0, 1, -3); + databaseLeft = new BlastDB(m->getRootName(m->getSimpleName(templateFileName)), -1.0, -1.0, 1, -3); for (int i = 0; i < userTemplate.size(); i++) { if (m->control_pressed) { return userTemplate; } databaseLeft->addSequence(*userTemplate[i]); } databaseLeft->generateDB(); @@ -544,7 +552,7 @@ Sequence* ChimeraSlayer::print(MPI_File& out, MPI_File& outAcc, data_results lef if (leftPiece.flag == "yes") { if ((leftPiece.results[0].bsa >= minBS) || (leftPiece.results[0].bsb >= minBS)) { leftChimeric = true; } } if (rightChimeric || leftChimeric) { - cout << querySeq->getName() << "\tyes" << endl; +// cout << querySeq->getName() << "\tyes" << endl; outAccString += querySeq->getName() + "\n"; results = true; @@ -763,12 +771,18 @@ int ChimeraSlayer::getChimeras(Sequence* query) { for (int i = 0; i < refSeqs.size(); i++) { delete refSeqs[i]; } if (chimeraFlag == "yes") { - + if (realign) { - ChimeraReAligner realigner(thisTemplate, match, misMatch); - realigner.reAlign(query, Results); + vector parents; + for (int i = 0; i < Results.size(); i++) { + parents.push_back(Results[i].parentAligned); + } + + ChimeraReAligner realigner; + realigner.reAlign(query, parents); + } - + //get sequence that were given from maligner results vector seqs; map removeDups; @@ -813,8 +827,14 @@ int ChimeraSlayer::getChimeras(Sequence* query) { } //put seqs into vector to send to slayer + +// cout << query->getAligned() << endl; vector seqsForSlayer; - for (int k = 0; k < seqs.size(); k++) { seqsForSlayer.push_back(seqs[k].seq); } + for (int k = 0; k < seqs.size(); k++) { +// cout << seqs[k].seq->getAligned() << endl; + seqsForSlayer.push_back(seqs[k].seq); + + } if (m->control_pressed) { for (int k = 0; k < seqs.size(); k++) { delete seqs[k].seq; } return 0; } @@ -829,7 +849,7 @@ int ChimeraSlayer::getChimeras(Sequence* query) { //free memory for (int k = 0; k < seqs.size(); k++) { delete seqs[k].seq; } } - + //cout << endl << endl; return 0; } catch(exception& e) { @@ -993,7 +1013,7 @@ vector ChimeraSlayer::getRefSeqs(Sequence* q, vector& this //find closest seqs to query in template - returns copies of seqs so trim does not destroy - remember to deallocate Sequence* newSeq = new Sequence(q->getName(), q->getAligned()); runFilter(newSeq); - refSeqs = decalc->findClosest(newSeq, thisTemplate, thisFilteredTemplate, numWanted); + refSeqs = decalc->findClosest(newSeq, thisTemplate, thisFilteredTemplate, numWanted, minSim); delete newSeq; }else if (searchMethod == "blast") { refSeqs = getBlastSeqs(q, thisTemplate, numWanted); //fills indexes @@ -1018,13 +1038,13 @@ vector ChimeraSlayer::getBlastSeqs(Sequence* q, vector& db string queryUnAligned = q->getUnaligned(); string leftQuery = queryUnAligned.substr(0, int(queryUnAligned.length() * 0.33)); //first 1/3 of the sequence string rightQuery = queryUnAligned.substr(int(queryUnAligned.length() * 0.66)); //last 1/3 of the sequence +//cout << "whole length = " << queryUnAligned.length() << '\t' << "left length = " << leftQuery.length() << '\t' << "right length = "<< rightQuery.length() << endl; + Sequence* queryLeft = new Sequence(q->getName(), leftQuery); + Sequence* queryRight = new Sequence(q->getName(), rightQuery); - Sequence* queryLeft = new Sequence(q->getName()+"left", leftQuery); - Sequence* queryRight = new Sequence(q->getName()+"right", rightQuery); - - vector tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1); - vector tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1); - + vector tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1, minSim); + vector tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1, minSim); + //cout << q->getName() << '\t' << leftQuery << '\t' << "leftMatches = " << tempIndexesLeft.size() << '\t' << rightQuery << " rightMatches = " << tempIndexesRight.size() << endl; vector smaller; vector larger; @@ -1037,7 +1057,7 @@ vector ChimeraSlayer::getBlastSeqs(Sequence* q, vector& db vector mergedResults; for (int i = 0; i < smaller.size(); i++) { if (m->control_pressed) { delete queryRight; delete queryLeft; return refResults; } - + //add left if you havent already it = seen.find(smaller[i]); if (it == seen.end()) { @@ -1065,13 +1085,18 @@ vector ChimeraSlayer::getBlastSeqs(Sequence* q, vector& db } for (int i = 0; i < mergedResults.size(); i++) { - + //cout << mergedResults[i] << '\t' << db[mergedResults[i]]->getName() << endl; if (db[mergedResults[i]]->getName() != q->getName()) { Sequence* temp = new Sequence(db[mergedResults[i]]->getName(), db[mergedResults[i]]->getAligned()); refResults.push_back(temp); } } + + +// for(int i=0;igetName() << endl; +// } delete queryRight; delete queryLeft;