]> git.donarmstrong.com Git - mothur.git/blobdiff - classifyseqscommand.cpp
remove.rare command
[mothur.git] / classifyseqscommand.cpp
index b8d5b8efdc1d086a556c6ff0ea07332fd4470cf8..0a1ef8823e35f687529c70de5ef29e7d33eb91fe 100644 (file)
@@ -461,7 +461,7 @@ int ClassifySeqsCommand::execute(){
                        for (int i = 0; i < lines.size(); i++) {  delete lines[i];  }  lines.clear();
                        
 #ifdef USE_MPI 
-                               int pid, end, numSeqsPerProcessor; 
+                               int pid, numSeqsPerProcessor; 
                                int tag = 2001;
                                vector<unsigned long int> MPIPos;
                                
@@ -559,16 +559,6 @@ int ClassifySeqsCommand::execute(){
                                
                                numFastaSeqs = createProcesses(newTaxonomyFile, tempTaxonomyFile, fastaFileNames[s]); 
                                
-                               rename((newTaxonomyFile + toString(processIDS[0]) + ".temp").c_str(), newTaxonomyFile.c_str());
-                               rename((tempTaxonomyFile + toString(processIDS[0]) + ".temp").c_str(), tempTaxonomyFile.c_str());
-                               
-                               for(int i=1;i<processors;i++){
-                                       appendTaxFiles((newTaxonomyFile + toString(processIDS[i]) + ".temp"), newTaxonomyFile);
-                                       appendTaxFiles((tempTaxonomyFile + toString(processIDS[i]) + ".temp"), tempTaxonomyFile);
-                                       remove((newTaxonomyFile + toString(processIDS[i]) + ".temp").c_str());
-                                       remove((tempTaxonomyFile + toString(processIDS[i]) + ".temp").c_str());
-                               }
-                               
                        }
        #else
                        numFastaSeqs = driver(lines[0], newTaxonomyFile, tempTaxonomyFile, fastaFileNames[s]);
@@ -662,7 +652,7 @@ int ClassifySeqsCommand::execute(){
                        
                        //get maxLevel from phylotree so you know how many 'unclassified's to add
                        int maxLevel = taxaSum.getMaxLevel();
-                       
+                                                       
                        //read taxfile - this reading and rewriting is done to preserve the confidence scores.
                        string name, taxon;
                        while (!inTax.eof()) {
@@ -736,7 +726,7 @@ string ClassifySeqsCommand::addUnclassifieds(string tax, int maxlevel) {
 int ClassifySeqsCommand::createProcesses(string taxFileName, string tempTaxFile, string filename) {
        try {
 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
-               int process = 0;
+               int process = 1;
                int num = 0;
                
                //loop through and create all the processes you want
@@ -757,11 +747,18 @@ int ClassifySeqsCommand::createProcesses(string taxFileName, string tempTaxFile,
                                out.close();
 
                                exit(0);
-                       }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); }
+                       }else { 
+                               m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine(); 
+                               for (int i = 0; i < processIDS.size(); i++) { kill (processIDS[i], SIGINT); }
+                               exit(0);
+                       }
                }
                
+               //parent does its part
+               num = driver(lines[0], taxFileName, tempTaxFile, filename);
+               
                //force parent to wait until all the processes are done
-               for (int i=0;i<processors;i++) { 
+               for (int i=0;i<processIDS.size();i++) { 
                        int temp = processIDS[i];
                        wait(&temp);
                }
@@ -774,6 +771,13 @@ int ClassifySeqsCommand::createProcesses(string taxFileName, string tempTaxFile,
                        in.close(); remove(tempFile.c_str());
                }
                
+               for(int i=0;i<processIDS.size();i++){
+                       appendTaxFiles((taxFileName + toString(processIDS[i]) + ".temp"), taxFileName);
+                       appendTaxFiles((tempTaxFile + toString(processIDS[i]) + ".temp"), tempTaxFile);
+                       remove((taxFileName + toString(processIDS[i]) + ".temp").c_str());
+                       remove((tempTaxFile + toString(processIDS[i]) + ".temp").c_str());
+               }
+               
                return num;
 #endif         
        }
@@ -825,13 +829,14 @@ int ClassifySeqsCommand::driver(linePair* filePos, string taxFName, string tempT
 
                bool done = false;
                int count = 0;
-       
+               
                while (!done) {
                        if (m->control_pressed) { return 0; }
                
                        Sequence* candidateSeq = new Sequence(inFASTA); m->gobble(inFASTA);
-               
+                       
                        if (candidateSeq->getName() != "") {
+                       
                                taxonomy = classify->getTaxonomy(candidateSeq);
                                
                                if (m->control_pressed) { delete candidateSeq; return 0; }
@@ -859,10 +864,11 @@ int ClassifySeqsCommand::driver(linePair* filePos, string taxFName, string tempT
                        
                        //report progress
                        if((count) % 100 == 0){ m->mothurOut("Processing sequence: " + toString(count)); m->mothurOutEndLine();         }
+                       
                }
                //report progress
                if((count) % 100 != 0){ m->mothurOut("Processing sequence: " + toString(count)); m->mothurOutEndLine();         }
-                               
+                       
                inFASTA.close();
                outTax.close();
                outTaxSimple.close();