]> git.donarmstrong.com Git - mothur.git/blobdiff - screenseqscommand.cpp
added otu.association command. added calcSpearman, calcKendall and calcPearson functi...
[mothur.git] / screenseqscommand.cpp
index cedb74a9b6c7f0a4162cdc96d9b774105e6cc1d0..41067396c6f5333faeaf3346afd9b865ad351531 100644 (file)
@@ -220,26 +220,26 @@ ScreenSeqsCommand::ScreenSeqsCommand(string option)  {
                        // ...at some point should added some additional type checking...
                        string temp;
                        temp = validParameter.validFile(parameters, "start", false);            if (temp == "not found") { temp = "-1"; }
-                       convert(temp, startPos); 
+                       m->mothurConvert(temp, startPos); 
                
                        temp = validParameter.validFile(parameters, "end", false);                      if (temp == "not found") { temp = "-1"; }
-                       convert(temp, endPos);  
+                       m->mothurConvert(temp, endPos);  
 
                        temp = validParameter.validFile(parameters, "maxambig", false);         if (temp == "not found") { temp = "-1"; }
-                       convert(temp, maxAmbig);  
+                       m->mothurConvert(temp, maxAmbig);  
 
                        temp = validParameter.validFile(parameters, "maxhomop", false);         if (temp == "not found") { temp = "-1"; }
-                       convert(temp, maxHomoP);  
+                       m->mothurConvert(temp, maxHomoP);  
 
                        temp = validParameter.validFile(parameters, "minlength", false);        if (temp == "not found") { temp = "-1"; }
-                       convert(temp, minLength); 
+                       m->mothurConvert(temp, minLength); 
                        
                        temp = validParameter.validFile(parameters, "maxlength", false);        if (temp == "not found") { temp = "-1"; }
-                       convert(temp, maxLength); 
+                       m->mothurConvert(temp, maxLength); 
                        
                        temp = validParameter.validFile(parameters, "processors", false);       if (temp == "not found"){       temp = m->getProcessors();      }
                        m->setProcessors(temp);
-                       convert(temp, processors);
+                       m->mothurConvert(temp, processors);
                        
                        temp = validParameter.validFile(parameters, "optimize", false); //optimizing trumps the optimized values original value
                        if (temp == "not found"){       temp = "none";          }
@@ -259,7 +259,12 @@ ScreenSeqsCommand::ScreenSeqsCommand(string option)  {
                        if (optimize.size() == 1) { if (optimize[0] == "none") { optimize.clear(); } }
                        
                        temp = validParameter.validFile(parameters, "criteria", false); if (temp == "not found"){       temp = "90";                            }
-                       convert(temp, criteria); 
+                       m->mothurConvert(temp, criteria); 
+                       
+                       if (namefile == "") {
+                               vector<string> files; files.push_back(fastafile);
+                               parser.getNameFile(files);
+                       }
                }
 
        }
@@ -283,10 +288,15 @@ int ScreenSeqsCommand::execute(){
                        getSummary(positions); 
                } 
                else { 
+                       #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                        positions = m->divideFile(fastafile, processors);
                        for (int i = 0; i < (positions.size()-1); i++) {
                                lines.push_back(new linePair(positions[i], positions[(i+1)]));
-                       }       
+                       }
+                       #else 
+                               positions.push_back(0); positions.push_back(1000);
+                               lines.push_back(new linePair(0, 1000));
+                       #endif
                }
                                
                string goodSeqFile = outputDir + m->getRootName(m->getSimpleName(fastafile)) + "good" + m->getExtension(fastafile);
@@ -295,7 +305,7 @@ int ScreenSeqsCommand::execute(){
                int numFastaSeqs = 0;
                set<string> badSeqNames;
                int start = time(NULL);
-               
+       
 #ifdef USE_MPI 
                        int pid, numSeqsPerProcessor; 
                        int tag = 2001;
@@ -304,7 +314,7 @@ int ScreenSeqsCommand::execute(){
                        MPI_Status status; 
                        MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are
                        MPI_Comm_size(MPI_COMM_WORLD, &processors); 
-
+       
                        MPI_File inMPI;
                        MPI_File outMPIGood;
                        MPI_File outMPIBadAccnos;
@@ -659,21 +669,22 @@ int ScreenSeqsCommand::getSummary(vector<unsigned long long>& positions){
                vector<int> ambigBases;
                vector<int> longHomoPolymer;
                
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                vector<unsigned long long> positions = m->divideFile(fastafile, processors);
-                               
+               
                for (int i = 0; i < (positions.size()-1); i++) {
                        lines.push_back(new linePair(positions[i], positions[(i+1)]));
                }       
-               
+#else
+               lines.push_back(new linePair(0, 1000));
+#endif
                
 #ifdef USE_MPI
+               int pid;
                MPI_Comm_rank(MPI_COMM_WORLD, &pid); 
                
-               if (pid == 0) { //only one process should fix files
+               if (pid == 0) { 
                        driverCreateSummary(startPosition, endPosition, seqLength, ambigBases, longHomoPolymer, fastafile, lines[0]);
-               }
-               
-               MPI_Barrier(MPI_COMM_WORLD); //make everyone wait
 #else
                int numSeqs = 0;
                #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
@@ -707,6 +718,33 @@ int ScreenSeqsCommand::getSummary(vector<unsigned long long>& positions){
                        else if (optimize[i] == "maxlength") { maxLength = seqLength[criteriaPercentile]; m->mothurOut("Optimizing maxlength to " + toString(maxLength) + "."); m->mothurOutEndLine(); }
                }
 
+#ifdef USE_MPI
+               }
+               
+               MPI_Status status; 
+               MPI_Comm_rank(MPI_COMM_WORLD, &pid); 
+               MPI_Comm_size(MPI_COMM_WORLD, &processors); 
+                       
+               if (pid == 0) { 
+                       //send file positions to all processes
+                       for(int i = 1; i < processors; i++) { 
+                               MPI_Send(&startPos, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                               MPI_Send(&endPos, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                               MPI_Send(&maxAmbig, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                               MPI_Send(&maxHomoP, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                               MPI_Send(&minLength, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                               MPI_Send(&maxLength, 1, MPI_INT, i, 2001, MPI_COMM_WORLD);
+                       }
+               }else {
+                       MPI_Recv(&startPos, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+                       MPI_Recv(&endPos, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+                       MPI_Recv(&maxAmbig, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+                       MPI_Recv(&maxHomoP, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+                       MPI_Recv(&minLength, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+                       MPI_Recv(&maxLength, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status);
+               }
+               MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case
+#endif
                return 0;
        }
        catch(exception& e) {
@@ -753,7 +791,7 @@ int ScreenSeqsCommand::driverCreateSummary(vector<int>& startPosition, vector<in
                                
                                count++;
                        }
-                       
+                       //if((count) % 100 == 0){       m->mothurOut("Optimizing sequence: " + toString(count)); m->mothurOutEndLine();         }
                        #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                                unsigned long long pos = in.tellg();
                                if ((pos == -1) || (pos >= filePos->end)) { break; }