]> git.donarmstrong.com Git - mothur.git/commitdiff
added mothur executable to cvs
authorwestcott <westcott>
Tue, 21 Sep 2010 14:55:28 +0000 (14:55 +0000)
committerwestcott <westcott>
Tue, 21 Sep 2010 14:55:28 +0000 (14:55 +0000)
Mothur.xcodeproj/project.pbxproj
filterseqscommand.cpp
mothur [new file with mode: 0755]
nseqs.h
pintail.cpp
validcalculator.cpp
venn.cpp
venncommand.cpp

index 1ac6e0b5a1c87cfdc844e7137da940de80bca6bb..cd981c30961e93ac75d67e262743334fcb212c22 100644 (file)
@@ -50,6 +50,7 @@
                A747E81C116365E000FB9042 /* chimeraslayercommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chimeraslayercommand.h; sourceTree = "<group>"; };
                A747E81D116365E000FB9042 /* chimeraslayercommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chimeraslayercommand.cpp; sourceTree = "<group>"; };
                A7639F8D1175DF35008F5578 /* makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = makefile; sourceTree = "<group>"; };
+               A768D95D1248FEAA008AB1D0 /* mothur */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = mothur; sourceTree = "<group>"; };
                A76AAD02117F322B003D8DA1 /* phylosummary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = phylosummary.h; sourceTree = "<group>"; };
                A76AAD03117F322B003D8DA1 /* phylosummary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = phylosummary.cpp; sourceTree = "<group>"; };
                A76C4A1011876BAF0009460B /* setlogfilecommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = setlogfilecommand.h; sourceTree = SOURCE_ROOT; };
                08FB7794FE84155DC02AAC07 /* mothur */ = {
                        isa = PBXGroup;
                        children = (
+                               A768D95D1248FEAA008AB1D0 /* mothur */,
                                A7639F8D1175DF35008F5578 /* makefile */,
                                A7DA1FF0113FECD400BF472F /* alignment.cpp */,
                                A7DA1FF1113FECD400BF472F /* alignment.hpp */,
index e676f1fbd7af7b581b7552bd25c844255ba4e8ce..798ae64bfa88620fb6403f68842c50cee381ca25 100644 (file)
@@ -867,7 +867,7 @@ int FilterSeqsCommand::MPICreateFilter(int start, int num, Filters& F, MPI_File&
 int FilterSeqsCommand::createProcessesCreateFilter(Filters& F, string filename) {
        try {
 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
-               int process = 0;
+               int process = 1;
                int num = 0;
                processIDS.clear();
                
@@ -908,13 +908,16 @@ int FilterSeqsCommand::createProcessesCreateFilter(Filters& F, string filename)
                        }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); }
                }
                
+               //parent do your part
+               num = driverCreateFilter(F, filename, lines[0]);
+               
                //force parent to wait until all the processes are done
-               for (int i=0;i<processors;i++) { 
+               for (int i=0;i<(processors-1);i++) { 
                        int temp = processIDS[i];
                        wait(&temp);
                }
                
-               //parent reads in and combine Filter info
+               //parent reads in and combines Filter info
                for (int i = 0; i < processIDS.size(); i++) {
                        string tempFilename = filename + toString(processIDS[i]) + "filterValues.temp";
                        ifstream in;
diff --git a/mothur b/mothur
new file mode 100755 (executable)
index 0000000..d499a6a
Binary files /dev/null and b/mothur differ
diff --git a/nseqs.h b/nseqs.h
index 42a1f57b57f59737d91d99d9546659c5730a5a2b..c011f10ca0980b0461f6f77d27061835da43949a 100644 (file)
--- a/nseqs.h
+++ b/nseqs.h
@@ -25,7 +25,25 @@ public:
                data[0] = (double)rank->getNumSeqs();
                return data;
        }
-       EstOutput getValues(vector<SharedRAbundVector*>) {return data;};
+       
+       EstOutput getValues(vector<SharedRAbundVector*> shared) { //return number of sequences in the sharedotus
+               
+               int numGroups = shared.size();
+               data.clear(); data.resize(numGroups,0);
+
+               for (int i = 0; i < shared[0]->size(); i++) {
+                       //get bin values and set sharedByAll 
+                       bool sharedByAll = true;
+                       for (int j = 0; j < numGroups; j++) {
+                               if (shared[j]->getAbundance(i) == 0) { sharedByAll = false; }
+                       }
+                       
+                       //they are shared
+                       if (sharedByAll == true) {  for (int j = 0; j < numGroups; j++) {  data[j] += shared[j]->getAbundance(i);  } }
+               }
+
+               return data;
+       }
 };
 
 /***********************************************************************/
index 2362eb5ac80416f6aa86d8b7d011e275d7d3a88d..c0ea90436628e8a86dbce69f894d8f3a353b7a27 100644 (file)
@@ -529,7 +529,7 @@ Sequence* Pintail::findPairs(Sequence* q) {
 void Pintail::createProcessesQuan() {
        try {
 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
-               int process = 0;
+               int process = 1;
                vector<int> processIDS;
                                
                //loop through and create all the processes you want
@@ -547,7 +547,6 @@ void Pintail::createProcessesQuan() {
                                ofstream out;
                                string s = toString(getpid()) + ".temp";
                                m->openOutputFile(s, out);
-                               
                                                                
                                //output observed distances
                                for (int i = 0; i < quantilesMembers.size(); i++) {
@@ -564,14 +563,17 @@ void Pintail::createProcessesQuan() {
                        }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); }
                }
                
+               //parent does its part
+               quantilesMembers = decalc->getQuantiles(templateSeqs, windowSizesTemplate, window, probabilityProfile, increment, templateLines[0]->start, templateLines[0]->end);
+               
                //force parent to wait until all the processes are done
-               for (int i=0;i<processors;i++) { 
+               for (int i=0;i<(processors-1);i++) { 
                        int temp = processIDS[i];
                        wait(&temp);
                }
 
                //get data created by processes
-               for (int i=0;i<processors;i++) { 
+               for (int i=0;i<(processors-1);i++) { 
                        ifstream in;
                        string s = toString(processIDS[i]) + ".temp";
                        m->openInputFile(s, in);
@@ -607,7 +609,7 @@ void Pintail::createProcessesQuan() {
                        in.close();
                        remove(s.c_str());
                }
-               
+
 #else
                quantilesMembers = decalc->getQuantiles(templateSeqs, windowSizesTemplate, window, probabilityProfile, increment, 0, templateSeqs.size());
 #endif         
index bc8c4b8d7ab4b753cfa3f75a7c7da0b8ba740bc0..cf783f30f82db5a0b5e3c2fa040775fb85463f46 100644 (file)
@@ -386,6 +386,7 @@ void ValidCalculators::initialVennSingle() {
                vennsingle["chao"]                  = "chao";
                vennsingle["ace"]                       = "ace";
                vennsingle["jack"]                  = "jack";
+               vennsingle["nseqs"]                 = "nseqs";
                vennsingle["default"]           = "default";
        }
        catch(exception& e) {
@@ -400,6 +401,7 @@ void ValidCalculators::initialVennShared() {
                vennshared["sharedsobs"]        = "sharedsobs";
                vennshared["sharedchao"]        = "sharedchao";
                vennshared["sharedace"]         = "sharedace";
+               vennshared["nseqs"]                     = "nseqs";
                vennshared["default"]           = "default";
        }
        catch(exception& e) {
index dfa551966c66c46df5e28d48cce90eff7848986d..9d117d618cde35f6cd1275c4577722e8716b2f38 100644 (file)
--- a/venn.cpp
+++ b/venn.cpp
@@ -11,6 +11,7 @@
 #include "ace.h"
 #include "sobs.h"
 #include "chao1.h"
+#include "nseqs.h"
 #include "sharedchao1.h"
 #include "sharedsobscollectsummary.h"
 
@@ -101,6 +102,8 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                                        singleCalc = new Chao1();
                                }else if (vCalcs[i]->getName() == "sharedace") {
                                        singleCalc = new Ace(10);
+                               }else if (vCalcs[i]->getName() == "nseqs") {
+                                       singleCalc = new NSeqs();
                                }
                                
                                vector<double> data = singleCalc->getValues(sabund);
@@ -148,50 +151,63 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                                if (m->control_pressed) { outsvg.close(); return outputNames; }
                                
                                //get estimates for sharedAB
-                               vector<double> shared = vCalcs[i]->getValues(subset);
+                               vector<double> results = vCalcs[i]->getValues(subset);
                                
                                //in essence you want to run it like a single 
                                if (vCalcs[i]->getName() == "sharedsobs") {
                                        singleCalc = new Sobs();
                                }else if (vCalcs[i]->getName() == "sharedchao") {
                                        singleCalc = new Chao1();
+                               }else if (vCalcs[i]->getName() == "nseqs") {
+                                       singleCalc = new NSeqs();
                                }//else if (vCalcs[i]->getName() == "sharedace") {
                                        //singleCalc = new Ace(10);
                                //}
                                
                                //get estimates for numA
-                               vector<double> numA = singleCalc->getValues(sabundA);
+                               vector<double> resultsA = singleCalc->getValues(sabundA);
 
                                //get estimates for numB
-                               vector<double> numB = singleCalc->getValues(sabundB);
+                               vector<double> resultsB = singleCalc->getValues(sabundB);
+                               
+                               double numA, numB, shared;
+                               if (vCalcs[i]->getName() == "nseqs") { 
+                                       shared = results[0] + results[1]; //add both groups sequences
+                                       numA = resultsA[0] - results[0]; //what's in A - the number of species in A that are in shared otus
+                                       numB = resultsB[0] - results[1]; //what's in B - the number of species in B that are in shared otus
+                               }else{
+                                       shared = results[0];
+                                       numA = resultsA[0] - shared;
+                                       numB = resultsB[0] - shared;
+                               }
                                                
                                //image window
                                outsvg << "<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 " +  toString(width) + " " + toString(height) + " \" >\n";
                                outsvg << "<g>\n";
-
+                               
                                //draw circles
                                outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"" +  toString(width) +  "\" height=\"" +  toString(height) +  "\"/>"; 
                                outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.40 * width)) +  "\" y=\"" +  toString(int(0.05 * height)) +  "\">Venn Diagram at distance " + lookup[0]->getLabel() + "</text>\n";
                                outsvg << "<circle fill=\"rgb(255,0,0)\" opacity=\".3\" stroke=\"black\" cx=\"" +  toString(int(0.36 * width)) +  "\" cy=\"" +  toString(int(0.29 * height)) +  "\" r=\"" +  toString(int(0.22 * width)) +  "\"/>"; 
                                outsvg << "<circle fill=\"rgb(0,255,0)\" opacity=\".3\" stroke=\"black\" cx=\"" +  toString(int(0.62 * width)) +  "\" cy=\"" +  toString(int(0.29 * height)) +  "\" r=\"" +  toString(int(0.22 * width)) +  "\"/>"; 
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.29 * width) - ((int)toString(numA[0]).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(numA[0] - shared[0]) + "</text>\n";
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.7 * width) - ((int)toString(numB[0]).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(numB[0] - shared[0]) + "</text>\n"; 
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.29 * width) - ((int)toString(numA).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(numA) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.7 * width) - ((int)toString(numB).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(numB) + "</text>\n"; 
                                outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.29 * width) - ((int)lookup[0]->getGroup().length() / 2)) + "\" y=\"" +  toString(int(0.25 * height)) +  "\">" + lookup[0]->getGroup() + "</text>\n";
                                outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.7 * width) - ((int)lookup[1]->getGroup().length() / 2)) + "\" y=\"" +  toString(int(0.25 * height)) +  "\">" + lookup[1]->getGroup() + "</text>\n"; 
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.5 * width) - ((int)toString(shared[0]).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(shared[0]) + "</text>\n";  
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.66 * height)) +  "\">The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]);
-                               if (numA.size() == 3) { 
-                                       outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" + toString(int(0.5 * width) - ((int)toString(shared).length() / 2)) + "\" y=\"" +  toString(int(0.28 * height)) +  "\">" + toString(shared) + "</text>\n";  
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.66 * height)) +  "\">The number of species in group " + lookup[0]->getGroup() + " is " + toString(resultsA[0]);
+                               if (resultsA.size() == 3) { 
+                                       outsvg << " the lci is " + toString(resultsA[1]) + " and the hci is " + toString(resultsA[2]) + "</text>\n";
                                }else { outsvg << "</text>\n"; }
                
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.69 * height)) +  "\">The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]);
-                               if (numB.size() == 3) { 
-                                       outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.69 * height)) +  "\">The number of species in group " + lookup[1]->getGroup() + " is " + toString(resultsB[0]);
+                               if (resultsB.size() == 3) { 
+                                       outsvg << " the lci is " + toString(resultsB[1]) + " and the hci is " + toString(resultsB[2]) + "</text>\n";
                                }else { outsvg << "</text>\n"; }
 
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.72 * height)) +  "\">The number of sepecies shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(shared[0]) + "</text>\n";
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.75 * height)) +  "\">Percentage of species that are shared in groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString((shared[0] / (float)(numA[0] + numB[0] - shared[0]))*100) + "</text>\n";
-                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.78 * height)) +  "\">The total richness for all groups is " + toString((float)(numA[0] + numB[0] - shared[0])) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.72 * height)) +  "\">The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(shared) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.75 * height)) +  "\">Percentage of species that are shared in groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString((shared / (float)(numA + numB + shared))*100) + "</text>\n";
+                               outsvg << "<text fill=\"black\" class=\"seri\" font-size=\"24\" x=\"" +  toString(int(0.25 * width)) +  "\" y=\"" +  toString(int(0.78 * height)) +  "\">The total richness for all groups is " + toString((float)(numA + numB + shared)) + "</text>\n";
                                
                                //close file
                                outsvg << "</g>\n</svg>\n";
@@ -254,7 +270,8 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                                        vector<double> sharedCwithAB;
                                        
                                        //find possible sharedABC values
-                                       float sharedABC1 = 0.0; float sharedABC2 = 0.0; float sharedABC3 = 0.0; float sharedABC = 0.0;
+                                       double sharedABC1 = 0.0; double sharedABC2 = 0.0; double sharedABC3 = 0.0; double sharedABC = 0.0;
+                                       vector<double> = resultsNseqs;
 
                                        if (vCalcs[i]->getMultiple() == false) {
                                                //merge BC and estimate with shared with A
@@ -305,12 +322,28 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                                                else if ((sharedABC3 < sharedABC1) && (sharedABC3 < sharedABC2)) { sharedABC = sharedABC3; }    
                                        }else{
                                                vector<double> data = vCalcs[i]->getValues(lookup);
+                                               resultsNseqs = data;
                                                sharedABC = data[0];
                                                sharedAwithBC.push_back(sharedAB[0] + sharedAC[0] - sharedABC);
                                                sharedBwithAC.push_back(sharedAB[0] + sharedBC[0] - sharedABC);
                                                sharedCwithAB.push_back(sharedAC[0] + sharedBC[0] - sharedABC);
                                        }
                                        
+                                       double numA, numB, numC, numAB, numAC, numBC, numABC;
+                                       if (vCalcs[i]->getName() == "nseqs") { 
+                                               numABC = resultsNseqs[0] + resultsNseqs[1] + resultsNseqs[2];
+                                               numBC = sharedBC[0] + sharedBC[1] - (resultsNseqs[1] + resultsNseqs[2]);
+                                       
+                                       }else{
+                                               numABC = sharedABC;
+                                               numBC = sharedBC[0] - sharedABC;
+                                               numAB = sharedAB[0] - sharedABC;
+                                               numAC = sharedAC[0] - sharedABC;
+                                               numA = numA[0]-sharedAwithBC[0];
+                                               numB = numB[0]-sharedBwithAC[0];
+                                               numC = numC[0]-sharedCwithAB[0];
+                                       }
+                                       
                                        //image window
                                        outsvg << "<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 " +  toString(width) + " " + toString(height) + " \" >\n";
                                        outsvg << "<g>\n";
@@ -475,7 +508,7 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                        //make a file for each calculator
                        for(int i=0;i<vCalcs.size();i++){
                                
-                               if ((vCalcs[i]->getName() != "sharedsobs") && (vCalcs[i]->getName() != "sharedchao")) { m->mothurOut(vCalcs[i]->getName() + " is not a valid calculator with four groups.  It will be disregarded. "); m->mothurOutEndLine(); }
+                               if ((vCalcs[i]->getName() != "sharedsobs") && (vCalcs[i]->getName() != "sharedchao") && (vCalcs[i]->getName() != "nseqs")) { m->mothurOut(vCalcs[i]->getName() + " is not a valid calculator with four groups.  It will be disregarded. "); m->mothurOutEndLine(); }
                                else{
                                        string filenamesvg = outputDir + m->getRootName(m->getSimpleName(globaldata->inputFileName)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + "." + lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + "-" + lookup[2]->getGroup() + "-" + lookup[3]->getGroup() + ".svg";
                                        outputNames.push_back(filenamesvg);
@@ -488,7 +521,10 @@ vector<string> Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculato
                                                singleCalc = new Sobs();
                                        }else if (vCalcs[i]->getName() == "sharedchao") {
                                                singleCalc = new Chao1();
+                                       }else if (vCalcs[i]->getName() == "nseqs") {
+                                               singleCalc = new NSeqs();
                                        }
+
                                
                                        //get estimates for numA
                                        data = singleCalc->getValues(sabundA);
index 608c0a06a93b955c6021dbb565df7b3d98cb13ea..8b617d8881000bd7e837e901fc1765b18592d6b4 100644 (file)
@@ -15,6 +15,7 @@
 #include "sharedsobscollectsummary.h"
 #include "sharedchao1.h"
 #include "sharedace.h"
+#include "nseqs.h"
 
 
 //**********************************************************************************************************************
@@ -111,6 +112,8 @@ VennCommand::VennCommand(string option)  {
                                                                if(abund < 5)
                                                                        abund = 10;
                                                                vennCalculators.push_back(new Ace(abund));
+                                                       }else if (Estimators[i] == "nseqs") { 
+                                                               vennCalculators.push_back(new NSeqs());
                                                        }
                                                }
                                        }
@@ -123,6 +126,8 @@ VennCommand::VennCommand(string option)  {
                                                                vennCalculators.push_back(new SharedChao1());
                                                        }else if (Estimators[i] == "sharedace") { 
                                                                vennCalculators.push_back(new SharedAce());
+                                                       }else if (Estimators[i] == "nseqs") { 
+                                                               vennCalculators.push_back(new NSeqs());
                                                        }
                                                }
                                        }