]> git.donarmstrong.com Git - mothur.git/blobdiff - chimeraslayer.cpp
changed tags on temp blast db to include template name
[mothur.git] / chimeraslayer.cpp
index 1f7160aa0d91e8f049fbca4c8b5a85c0bed349d9..73c61de4ea5ec66ca2d1d19f9ec2f1a9b01ed838 100644 (file)
@@ -72,10 +72,18 @@ ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, map<string, in
                
                createFilter(templateSeqs, 0.0); //just removed columns where all seqs have a gap
                
-               //run filter on template
-               for (int i = 0; i < templateSeqs.size(); i++) {  if (m->control_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<Sequence*> ChimeraSlayer::getTemplate(Sequence* q, vector<Sequence*>& 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();
@@ -763,22 +771,18 @@ int ChimeraSlayer::getChimeras(Sequence* query) {
                for (int i = 0; i < refSeqs.size(); i++) {  delete refSeqs[i];  }
                
                if (chimeraFlag == "yes") {
-               
+
                        if (realign) {
-                               vector<Sequence*> parents;
+                               vector<string> parents;
                                for (int i = 0; i < Results.size(); i++) {
-cout << Results[i].parent  << '\t' << Results[i].nastRegionStart << '\t' << Results[i].nastRegionEnd  << endl;
-                                       Sequence* parent = new Sequence(Results[i].parent, Results[i].parentAligned);
-                                       
-                                       parents.push_back(parent);
+                                       parents.push_back(Results[i].parentAligned);
                                }
                                
-                               ChimeraReAligner realigner;
-                               //realigner.reAlign(query, parents);
-                               
-                               for (int i = 0; i < parents.size(); i++) { delete parents[i]; }
+                               ChimeraReAligner realigner;             
+                               realigner.reAlign(query, parents);
+
                        }
-       //query->printSequence(cout);
+
                        //get sequence that were given from maligner results
                        vector<SeqDist> seqs;
                        map<string, float> removeDups;
@@ -839,7 +843,7 @@ cout << Results[i].parent  << '\t' << Results[i].nastRegionStart << '\t' << Resu
                        //free memory
                        for (int k = 0; k < seqs.size(); k++) {  delete seqs[k].seq;   }
                }
-               
+               //cout << endl << endl;
                return 0;
        }
        catch(exception& e) {
@@ -1003,7 +1007,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
@@ -1028,13 +1032,13 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& 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<int> tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1);
-               vector<int> tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1);
-               
+               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;