]> git.donarmstrong.com Git - mothur.git/blobdiff - chimeraslayer.cpp
changes for chimera slayer
[mothur.git] / chimeraslayer.cpp
index 5868a7c721e69a9206a668536f35d02d573c9568..cd268d3d6f1a513e932940332bab8ed15c59ada1 100644 (file)
@@ -763,12 +763,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<string> 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<SeqDist> seqs;
                        map<string, float> removeDups;
@@ -993,7 +999,7 @@ vector<Sequence*> ChimeraSlayer::getRefSeqs(Sequence* q, vector<Sequence*>& 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
@@ -1019,12 +1025,12 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& db
                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
                
-               Sequence* queryLeft = new Sequence(q->getName()+"left", leftQuery);
-               Sequence* queryRight = new Sequence(q->getName()+"right", rightQuery);
-               
-               vector<int> tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1);
-               vector<int> tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1);
+               Sequence* queryLeft = new Sequence(q->getName(), leftQuery);
+               Sequence* queryRight = new Sequence(q->getName(), rightQuery);
                
+               vector<int> tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1, minSim);
+               vector<int> tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1, minSim);
+               cout << q->getName() << '\t' << leftQuery << '\t' << "leftMatches = " << tempIndexesLeft.size() << '\t' << rightQuery   << " rightMatches = " << tempIndexesRight.size() << endl;
                vector<int> smaller;
                vector<int> larger;
                
@@ -1037,7 +1043,7 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& db
                vector<int> 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,7 +1071,7 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& 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);