]> git.donarmstrong.com Git - mothur.git/blobdiff - chimeraslayer.cpp
added paralellization for windows to dist.seqs and summary.seqs
[mothur.git] / chimeraslayer.cpp
index b00cedfba5b4edf8463343618ebdd80acae209be..9da0d3c522526a7fb76720aef8a38c83fab11814 100644 (file)
@@ -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) : Chimera()  {         
        try {
                fastafile = file;
                templateFileName = temp; templateSeqs = readSeqs(temp);
@@ -34,6 +34,8 @@ 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;
        
                doPrep();
        }
@@ -43,8 +45,9 @@ int minsim, int mincov, int minbs, int minsnp, int par, int it, int inc, int num
        }
 }
 //***************************************************************************************************************
+//template=self
 ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, map<string, int>& 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) : Chimera()  {         
        try {
                fastafile = file; templateSeqs = readSeqs(fastafile);
                templateFileName = temp; 
@@ -65,6 +68,8 @@ ChimeraSlayer::ChimeraSlayer(string file, string temp, bool trim, map<string, in
                realign = r; 
                trimChimera = trim;
                priority = prior;
+               numNoParents = 0;
+               blastlocation = blas;
                
                createFilter(templateSeqs, 0.0); //just removed columns where all seqs have a gap
                
@@ -213,7 +218,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);
                        
                        if (m->control_pressed) { return 0; }
 
@@ -254,6 +259,11 @@ vector<Sequence*> ChimeraSlayer::getTemplate(Sequence q, vector<Sequence*>& user
                        }
                }
                
+               //avoids nuisance error from formatdb for making blank blast database
+               if (userTemplate.size() == 0) {
+                       return userTemplate;
+               }
+               
                string  kmerDBNameLeft;
                string  kmerDBNameRight;
                
@@ -322,7 +332,7 @@ vector<Sequence*> ChimeraSlayer::getTemplate(Sequence q, vector<Sequence*>& 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);
                        
                        if (m->control_pressed) { return userTemplate; }
 
@@ -747,7 +757,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 +1124,8 @@ vector<Sequence> ChimeraSlayer::getBlastSeqs(Sequence q, vector<Sequence*>& 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 +1138,6 @@ vector<Sequence> ChimeraSlayer::getBlastSeqs(Sequence q, vector<Sequence*>& db,
                delete queryRight;
                delete queryLeft;
                
-               if (refResults.size() == 0) { m->mothurOut("[WARNING]: megablast found 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) {