]> git.donarmstrong.com Git - mothur.git/commitdiff
fixes while testing 1.33.0
authorSarah Westcott <mothur.westcott@gmail.com>
Mon, 10 Feb 2014 13:22:57 +0000 (08:22 -0500)
committerSarah Westcott <mothur.westcott@gmail.com>
Mon, 10 Feb 2014 13:22:57 +0000 (08:22 -0500)
Mothur.xcodeproj/project.pbxproj
abstractdecisiontree.cpp
abstractdecisiontree.hpp
getmetacommunitycommand.cpp
getsharedotucommand.cpp
inputdata.cpp
mergesfffilecommand.cpp
otuhierarchycommand.cpp
otuhierarchycommand.h
venncommand.cpp

index c604120176b5eecffb97d90b2d5d5439957ec67e..418596f842d89d64d087451443cabb3fc1d3ae15 100644 (file)
                                GCC_ENABLE_SSE42_EXTENSIONS = NO;
                                GCC_OPTIMIZATION_LEVEL = 3;
                                GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "MOTHUR_FILES=\"\\\"../../release\\\"\"",
-                                       "VERSION=\"\\\"1.32.0\\\"\"",
-                                       "RELEASE_DATE=\"\\\"10/31/2013\\\"\"",
+                                       "MOTHUR_FILES=\"\\\"/Users/sarahwestcott/desktop/release\\\"\"",
+                                       "VERSION=\"\\\"1.33.0\\\"\"",
+                                       "RELEASE_DATE=\"\\\"2/7/2014\\\"\"",
                                );
                                GCC_VERSION = "";
                                "GCC_VERSION[arch=*]" = "";
index 595f483dc5ba6cde01b825f8ac44d9ceea4ece16..e7f1c5e94e1039bbf9cadfebcf7f0ee34fa7c2ed 100644 (file)
@@ -311,3 +311,4 @@ bool AbstractDecisionTree::checkIfAlreadyClassified(RFTreeNode* treeNode, int& o
 }
 
 /**************************************************************************************************/
+
index cc238b4687e57c6cab840f5ec31ce10adbc8a655..26b8d39aff1a1be2472481d68ff21a266a0f8783 100755 (executable)
@@ -75,3 +75,5 @@ private:
 /**************************************************************************************************/
 
 #endif
+
+
index 2b944153a92e5c919a0e2269916f0ffbbc9d2395..34bcbe82e44fe7c328bbcb5d8233694638fd142a 100644 (file)
@@ -66,12 +66,12 @@ string GetMetaCommunityCommand::getOutputPattern(string type) {
     try {
         string pattern = "";
         
-        if (type == "fit")              {  pattern = "[filename],[distance],mix.fit"; }
-        else if (type == "relabund")    {  pattern = "[filename],[distance],[tag],mix.relabund"; }
-        else if (type == "design")      {  pattern = "[filename],[distance],mix.design"; }
-        else if (type == "matrix")      {  pattern = "[filename],[distance],[tag],mix.posterior"; }
-        else if (type == "parameters")  {  pattern = "[filename],[distance],mix.parameters"; }
-        else if (type == "summary")  {  pattern = "[filename],[distance],mix.summary"; }
+        if (type == "fit")              {  pattern = "[filename],[distance],[method],mix.fit"; }
+        else if (type == "relabund")    {  pattern = "[filename],[distance],[method],[tag],mix.relabund"; }
+        else if (type == "design")      {  pattern = "[filename],[distance],[method],mix.design"; }
+        else if (type == "matrix")      {  pattern = "[filename],[distance],[method],[tag],mix.posterior"; }
+        else if (type == "parameters")  {  pattern = "[filename],[distance],[method],mix.parameters"; }
+        else if (type == "summary")  {  pattern = "[filename],[distance],[method],mix.summary"; }
         else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true;  }
         
         return pattern;
@@ -366,6 +366,7 @@ int GetMetaCommunityCommand::createProcesses(vector<SharedRAbundVector*>& thislo
         map<string, string> variables;
         variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(sharedfile));
         variables["[distance]"] = thislookup[0]->getLabel();
+        variables["[method]"] = method;
                string outputFileName = getOutputFileName("fit", variables);
         outputNames.push_back(outputFileName); outputTypes["fit"].push_back(outputFileName);
                 
@@ -755,6 +756,7 @@ int GetMetaCommunityCommand::generateSummaryFile(int numPartitions, map<string,s
         map<string, string> variables;
         variables["[filename]"] = v["[filename]"];
         variables["[distance]"] = v["[distance]"];
+        variables["]method]"] = method;
         variables["[tag]"] = "1";
         string reference = getOutputFileName("relabund", variables);
         m->openInputFile(reference, referenceFile); //((fileRoot + label + ".1mix.relabund").c_str());
index 9302d1d21dfc52dbe295754e38aa86de55e0a4cc..cfa7a645dfe7859552d5e22bfe929f03b852ae28 100644 (file)
@@ -233,6 +233,7 @@ GetSharedOTUCommand::GetSharedOTUCommand(string option)  {
                        else { 
                                userGroups = "unique." + groups;
                                m->splitAtDash(groups, Groups);
+                if (Groups.size() > 4) {  userGroups = "unique.selected_groups"; } //if too many groups then the filename becomes too big.
                        }
                        
                        groups = validParameter.validFile(parameters, "sharedgroups", false);                   
@@ -240,6 +241,7 @@ GetSharedOTUCommand::GetSharedOTUCommand(string option)  {
                        else { 
                                userGroups = groups;
                                m->splitAtDash(groups, Groups);
+                if (Groups.size() > 4) {  userGroups = "selected_groups"; } //if too many groups then the filename becomes too big.
                                unique = false;
                        }
                        
@@ -274,6 +276,7 @@ int GetSharedOTUCommand::execute(){
                 userGroups = "unique.";
                 for(int i = 0; i < Groups.size(); i++) {  userGroups += Groups[i] + "-";  }
                 userGroups = userGroups.substr(0, userGroups.length()-1);
+                if (Groups.size() > 4) {  userGroups = "unique.selected_groups"; } //if too many groups then the filename becomes too big.
             }else{
                 //sanity check for group names
                 SharedUtil util;
@@ -566,6 +569,7 @@ int GetSharedOTUCommand::runShared() {
             userGroups = "unique.";
             for(int i = 0; i < Groups.size(); i++) {  userGroups += Groups[i] + "-";  }
             userGroups = userGroups.substr(0, userGroups.length()-1);
+            if (Groups.size() > 4) {  userGroups = "unique.selected_groups"; } //if too many groups then the filename becomes too big.
         }else {
             //sanity check for group names
             SharedUtil util;
index 8b1829a3db697df21b3d0f64bf6be6cfea15c536..c9142b7a356de09f0fddd89ae5f415993f4795c3 100644 (file)
@@ -83,6 +83,7 @@ ListVector* InputData::getListVector(string label){
                ifstream in;
                string  thisLabel;
                m->openInputFile(filename, in);
+        m->saveNextLabel = "";
                
                if(in){
 
@@ -119,6 +120,7 @@ ListVector* InputData::getListVector(string label, bool resetFP){
                string  thisLabel;
                fileHandle.clear();
                fileHandle.seekg(0);
+        m->saveNextLabel = "";
                
                if(fileHandle){
 
@@ -239,6 +241,7 @@ SharedOrderVector* InputData::getSharedOrderVector(string label){
                ifstream in;
                string  thisLabel;
                m->openInputFile(filename, in);
+        m->saveNextLabel = "";
                
                if(in){
 
@@ -321,7 +324,7 @@ OrderVector* InputData::getOrderVector(string label){
                
                if(in){
                        if((format == "list") || (format == "listorder")) {
-                       
+                m->saveNextLabel = "";
                                while (in.eof() != true) {
                                        
                                        input = new ListVector(in);
@@ -335,7 +338,7 @@ OrderVector* InputData::getOrderVector(string label){
                                }
                        }
                        else if (format == "shared")  {
-                               
+                               m->saveNextLabel = "";
                                while (in.eof() != true) {
                                        
                                        input = new SharedListVector(in);
@@ -650,7 +653,7 @@ SAbundVector* InputData::getSAbundVector(string label){
                
                if(in){
                        if (format == "list") {
-                       
+                m->saveNextLabel = "";
                                while (in.eof() != true) {
                                        
                                        input = new ListVector(in);
@@ -664,7 +667,7 @@ SAbundVector* InputData::getSAbundVector(string label){
                                }
                        }
                        else if (format == "shared")  {
-                               
+                               m->saveNextLabel = "";
                                while (in.eof() != true) {
                                        
                                        input = new SharedListVector(in);
@@ -789,6 +792,7 @@ RAbundVector* InputData::getRAbundVector(string label){
                
                if(in){
                        if (format == "list") {
+                m->saveNextLabel = "";
                        
                                while (in.eof() != true) {
                                        
@@ -803,6 +807,7 @@ RAbundVector* InputData::getRAbundVector(string label){
                                }
                        }
                        else if (format == "shared")  {
+                m->saveNextLabel = "";
                                
                                while (in.eof() != true) {
                                        
index 056d85c8fe9c9b53ec471f5e032d108a0f853d4d..f417ddebe1d8f69b073102d375ed8a9c6c2ac25b 100644 (file)
@@ -14,7 +14,8 @@ vector<string> MergeSfffilesCommand::setParameters(){
        try {
                CommandParameter psff("sff", "InputTypes", "", "", "sffFile", "sffFile", "none","sff",false,false); parameters.push_back(psff);
         CommandParameter pfile("file", "InputTypes", "", "", "sffFile", "sffFile", "none","sff",false,false); parameters.push_back(pfile);
-               CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir);
+               CommandParameter poutput("output", "String", "", "", "", "", "","",false,true,true); parameters.push_back(poutput);
+        CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir);
                CommandParameter poutputdir("outputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(poutputdir);
                
                vector<string> myArray;
@@ -30,10 +31,11 @@ vector<string> MergeSfffilesCommand::setParameters(){
 string MergeSfffilesCommand::getHelpString(){
        try {
                string helpString = "";
-               helpString += "The merge.sfffiles command reads a sff set of files or a file containing a list of sff files and merges the individual files into a single sff file.\n";
-               helpString += "The merge.sfffiles command parameters are sff and file. sff or file is required. \n";
+               helpString += "The merge.sfffiles command reads a sff file or a file containing a list of sff files and merges the individual files into a single sff file. \n";
+               helpString += "The merge.sfffiles command parameters are sff, file and output. sff or file is required. \n";
                helpString += "The sff parameter allows you to enter the sff list of sff files separated by -'s.\n";
                helpString += "The file parameter allows you to provide a file containing a list of sff files to merge.  \n";
+        helpString += "The output parameter allows you to provide an output filename.  \n";
                helpString += "Example sffinfo(sff=mySffFile.sff-mySecond.sff).\n";
                helpString += "Note: No spaces between parameter labels (i.e. sff), '=' and parameters (i.e.yourSffFileName).\n";
                return helpString;
@@ -49,7 +51,7 @@ string MergeSfffilesCommand::getOutputPattern(string type) {
     try {
         string pattern = "";
         
-        if (type == "sff")            {   pattern =  "[filename],merge.sff";   }
+        if (type == "sff")            {   pattern =  "[filename],";   }
         else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true;  }
         
         return pattern;
@@ -192,6 +194,10 @@ MergeSfffilesCommand::MergeSfffilesCommand(string option)  {
                 m->mothurOut("[ERROR]: cannot use file option and sff option at the same time, choose one."); m->mothurOutEndLine(); abort = true;
             }
             
+            outputFile = validParameter.validFile(parameters, "output", false);
+                       if (outputFile == "not found") { m->mothurOut("you must enter an output file name"); m->mothurOutEndLine();  abort=true;  }
+                       if (outputDir != "") { outputFile = outputDir + m->getSimpleName(outputFile);  }
+            
                }
        }
        catch(exception& e) {
@@ -204,18 +210,15 @@ int MergeSfffilesCommand::execute(){
        try {
                if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
         
-        map<string, string> variables;
         if (file != "") {
-            string thisOutputDir = outputDir;
-            if (outputDir == "") {  thisOutputDir += m->hasPath(file);  }
-            variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(file));
             readFile();
-        }else {
-            string thisOutputDir = outputDir;
-            if (outputDir == "") {  thisOutputDir += m->hasPath(filenames[0]);  }
-            variables["[filename]"] = thisOutputDir + "mergedSff";
+            if (outputDir == "") { outputDir = m->hasPath(file); }
         }
         ofstream out;
+        map<string, string> variables;
+        string thisOutputDir = outputDir;
+               if (outputDir == "") {  thisOutputDir += m->hasPath(outputFile);  }
+        variables["[filename]"] = thisOutputDir + m->getSimpleName(outputFile);
                outputFile = getOutputFileName("sff",variables);
         m->openOutputFile(outputFile, out);
         outputNames.push_back(outputFile); outputTypes["sff"].push_back(outputFile);
index 07e3c1d0146ef521563697fe07deb38d7837b67d..5d521e7ea437906a36f4dd39fd203e1b23dc3bb0 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include "otuhierarchycommand.h"
+#include "inputdata.h"
 
 //**********************************************************************************************************************
 vector<string> OtuHierarchyCommand::setParameters(){   
@@ -137,8 +138,8 @@ OtuHierarchyCommand::OtuHierarchyCommand(string option) {
                        label = validParameter.validFile(parameters, "label", false);                   
                        if (label == "not found") { m->mothurOut("label is a required parameter for the otu.hierarchy command."); m->mothurOutEndLine(); abort = true; }
                        else { 
-                               m->splitAtDash(label, labels);
-                               if (labels.size() != 2) { m->mothurOut("You must provide 2 labels."); m->mothurOutEndLine(); abort = true; }
+                               m->splitAtDash(label, mylabels);
+                               if (mylabels.size() != 2) { m->mothurOut("You must provide 2 labels."); m->mothurOutEndLine(); abort = true; }
                        }       
                        
                        output = validParameter.validFile(parameters, "output", false);                 if (output == "not found") { output = "name"; }
@@ -160,15 +161,23 @@ int OtuHierarchyCommand::execute(){
                if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
                
                //get listvectors that correspond to labels requested, (or use smart distancing to get closest listvector)
-               vector<ListVector> lists = getListVectors();
+               vector< vector<string> > lists = getListVectors();
                
                if (m->control_pressed) { outputTypes.clear(); return 0; }
                
                //determine which is little and which is big, putting little first
-               if (lists.size() == 2) {
+               if (lists.size() == 4) {
                        //if big is first swap them
-                       if (lists[0].getNumBins() < lists[1].getNumBins()) {
-                               reverse(lists.begin(), lists.end());
+                       if (lists[0].size() < lists[2].size()) {
+                               vector< vector<string> > tempLists;
+                tempLists.push_back(lists[2]);
+                tempLists.push_back(lists[3]);
+                tempLists.push_back(lists[0]);
+                tempLists.push_back(lists[1]);
+                lists = tempLists;
+                string tempLabel = list2Label;
+                list2Label = list1Label;
+                list1Label = tempLabel;
                        }
                }else{
                        m->mothurOut("error getting listvectors, unable to read 2 different vectors, check your label inputs."); m->mothurOutEndLine(); return 0;
@@ -176,11 +185,11 @@ int OtuHierarchyCommand::execute(){
                
                //map sequences to bin number in the "little" otu
                map<string, int> littleBins;
-        vector<string> binLabels0 = lists[0].getLabels();
-               for (int i = 0; i < lists[0].getNumBins(); i++) {
+        vector<string> binLabels0 = lists[0];
+               for (int i = 0; i < lists[0].size(); i++) {
                
                        if (m->control_pressed) {  return 0; }
-                       string bin = lists[0].get(i);
+                       string bin = lists[1][i];
             vector<string> names; m->splitAtComma(bin, names);
                        for (int j = 0; j < names.size(); j++) { littleBins[names[j]] = i; }
         }
@@ -188,19 +197,19 @@ int OtuHierarchyCommand::execute(){
                ofstream out;
         map<string, string> variables; 
         variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(listFile));
-        variables["[distance1]"] = lists[0].getLabel();
+        variables["[distance1]"] = list1Label;
         variables["[tag]"] = "-"; 
-        variables["[distance2]"] = lists[1].getLabel();
+        variables["[distance2]"] = list2Label;
                string outputFileName = getOutputFileName("otuheirarchy",variables);
                m->openOutputFile(outputFileName, out);
                
                //go through each bin in "big" otu and output the bins in "little" otu which created it
-        vector<string> binLabels1 = lists[1].getLabels();
-               for (int i = 0; i < lists[1].getNumBins(); i++) {
+        vector<string> binLabels1 = lists[2];
+               for (int i = 0; i < lists[2].size(); i++) {
                
                        if (m->control_pressed) { outputTypes.clear(); out.close(); m->mothurRemove(outputFileName); return 0; }
                        
-                       string binnames = lists[1].get(i);
+                       string binnames = lists[3][i];
             vector<string> names; m->splitAtComma(binnames, names);
                        
                        //output column 1
@@ -215,7 +224,7 @@ int OtuHierarchyCommand::execute(){
                        
                        string col2 = "";
                        for (it = bins.begin(); it != bins.end(); it++) {
-                               if (output == "name")   {   col2 += lists[0].get(it->first) + "\t";     }
+                               if (output == "name")   {   col2 += lists[1][it->first] + "\t"; }
                                else                                    {       col2 += binLabels0[it->first] + "\t";           }
                        }
                        
@@ -242,90 +251,84 @@ int OtuHierarchyCommand::execute(){
 
 //**********************************************************************************************************************
 //returns a vector of listVectors where "little" vector is first
-vector<ListVector> OtuHierarchyCommand::getListVectors() {
+vector< vector<string> > OtuHierarchyCommand::getListVectors() { //return value [0] -> otulabelsFirstLabel [1] -> binsFirstLabel [2] -> otulabelsSecondLabel [3] -> binsSecondLabel
        try {
-               
-               int pos; //to use in smart distancing, position of last read in file
-               int lastPos;
-               vector<ListVector> lists;
+               vector< vector<string> > lists;
+        
+        int count = 0;
+        for (set<string>::iterator it = mylabels.begin(); it != mylabels.end(); it++) {
+            string realLabel;
+            vector< vector<string> > thisList = getListVector(*it, realLabel);
+            
+            if (m->control_pressed) {  return lists; }
+            
+            for (int i = 0; i < thisList.size(); i++) { lists.push_back(thisList[i]); }
+            
+            if (count == 0) {  list1Label = realLabel; count++; }
+            else {  list2Label = realLabel; }
+        }
+        
+        return lists;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "OtuHierarchyCommand", "getListVectors");
+               exit(1);
+       }
+}
+//**********************************************************************************************************************
+vector< vector<string> > OtuHierarchyCommand::getListVector(string label, string& realLabel){ //return value [0] -> otulabels [1] -> bins
+       try {
+        vector< vector<string> > myList;
+        
+               InputData input(listFile, "list");
+               ListVector* list = input.getListVector();
+               string lastLabel = list->getLabel();
                
                //if the users enters label "0.06" and there is no "0.06" in their file use the next lowest label.
+               set<string> labels; labels.insert(label);
                set<string> processedLabels;
                set<string> userLabels = labels;
-
-               //open file
-               ifstream in;
-               m->openInputFile(listFile, in);
-               
-               //get first list vector in file
-               ListVector* list = NULL;
-               string lastLabel = "";
-               if (!in.eof())  {
-                       pos = in.tellg();
-                       lastPos = pos;
-                       list = new ListVector(in);  
-                       m->gobble(in);
-                       lastLabel = list->getLabel();
-               }
-               
-               while ((list != NULL) && (userLabels.size() != 0)) {
                
-                       if (m->control_pressed) {  in.close(); delete list;  return lists; }
+               //as long as you are not at the end of the file or done wih the lines you want
+               while((list != NULL) && (userLabels.size() != 0)) {
+                       if (m->control_pressed) {  return myList;  }
                        
-                       //is this a listvector that we want?
                        if(labels.count(list->getLabel()) == 1){
-                               
-                               //make copy of listvector
-                               ListVector temp(*list);
-                               lists.push_back(temp);
-                       
                                processedLabels.insert(list->getLabel());
                                userLabels.erase(list->getLabel());
+                               break;
                        }
-               
-                       //you have a label the user want that is smaller than this label and the last label has not already been processed 
+                       
                        if ((m->anyLabelsToProcess(list->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) {
                                string saveLabel = list->getLabel();
-                               int savePos = in.tellg();
                                
-                               //get smart distance line
                                delete list;
-                               in.seekg(lastPos);
-                               if (!in.eof())  {       
-                                       list = new ListVector(in);  
-                               }else { list = NULL; }
+                               list = input.getListVector(lastLabel);
                                
-                               //make copy of listvector
-                               ListVector temp(*list);
-                               lists.push_back(temp);
-                                       
                                processedLabels.insert(list->getLabel());
-                               userLabels.erase(list->getLabel());                                     
-                                                                               
+                               userLabels.erase(list->getLabel());
+                               
                                //restore real lastlabel to save below
-                               list->setLabel(saveLabel);
-                               in.seekg(savePos);
+                               //list->setLabel(saveLabel);
+                               break;
                        }
                        
                        lastLabel = list->getLabel();
-                       lastPos = pos;
                        
-                       //get next line
+                       //get next line to process
+                       //prevent memory leak
                        delete list;
-                       if (!in.eof())  {       
-                               pos = in.tellg();
-                               list = new ListVector(in);  
-                               m->gobble(in);
-                       }else { list = NULL; }
+                       list = input.getListVector();
                }
                
-               if (m->control_pressed) { in.close();  return lists; }                          
+               
+               if (m->control_pressed) {  return myList;  }
                
                //output error messages about any remaining user labels
                set<string>::iterator it;
                bool needToRun = false;
-               for (it = userLabels.begin(); it != userLabels.end(); it++) {  
-                       m->mothurOut("Your file does not include the label " + *it); 
+               for (it = userLabels.begin(); it != userLabels.end(); it++) {
+                       m->mothurOut("Your file does not include the label " + *it);
                        if (processedLabels.count(lastLabel) != 1) {
                                m->mothurOut(". I will use " + lastLabel + "."); m->mothurOutEndLine();
                                needToRun = true;
@@ -334,29 +337,28 @@ vector<ListVector> OtuHierarchyCommand::getListVectors() {
                        }
                }
                
-               if (m->control_pressed) {  in.close(); return lists; }
-               
                //run last label if you need to
                if (needToRun == true)  {
-                       if (list != NULL) {     delete list;    }
-                       
-                       in.seekg(lastPos);
-                       if (!in.eof())  {       
-                               list = new ListVector(in); 
-                               
-                               //make copy of listvector
-                               ListVector temp(*list);
-                               lists.push_back(temp);
-                               
-                               delete list;
-                       }
+                       delete list;
+                       list = input.getListVector(lastLabel);
                }
                
-               in.close();
-               return lists;
+        //at this point the list vector has the right distance
+        myList.push_back(list->getLabels());
+        vector<string> bins;
+        for (int i = 0; i < list->getNumBins(); i++) {
+            if (m->control_pressed) {  return myList;  }
+            bins.push_back(list->get(i));
+        }
+        myList.push_back(bins);
+        realLabel = list->getLabel();
+        
+        delete list;
+        
+               return myList;
        }
        catch(exception& e) {
-               m->errorOut(e, "OtuHierarchyCommand", "getListVectors");
+               m->errorOut(e, "OtuHierarchyCommand", "getListVector");
                exit(1);
        }
 }
index cd106ece49d90dcfe28a0d272b672919281a912b..2b9e8e7f042e5f63a8805a427a8c3f8693f6cad9 100644 (file)
@@ -37,11 +37,12 @@ public:
        
 private:
        bool abort;
-       set<string> labels; //holds labels to be used
-       string label, listFile, outputDir, output;
+       set<string> mylabels; //holds labels to be used
+       string label, listFile, outputDir, output, list1Label, list2Label;
        vector<string> outputNames;
        
-       vector<ListVector> getListVectors();
+       vector< vector<string> > getListVectors();
+    vector< vector<string> > getListVector(string, string&);
                
 };
 
index 3767687bff20dd66f754d8e55920135d7609fe68..0327d53b6d0d85c737d4b6e17d0666afa183efdd 100644 (file)
@@ -214,10 +214,19 @@ VennCommand::VennCommand(string option)  {
                        temp = validParameter.validFile(parameters, "nseqs", false);            if (temp == "not found"){       temp = "f";                             }
                        nseqs = m->isTrue(temp); 
 
-                       temp = validParameter.validFile(parameters, "permute", false);          if (temp == "not found"){       temp = "4";                             }
+                       temp = validParameter.validFile(parameters, "permute", false);
+            if (temp == "not found"){  temp = "4";                             }
+            else {
+                if ((temp == "1") || (temp == "2") || (temp == "3") || (temp == "4")) {}
+                else {
+                    bool permTrue = m->isTrue(temp);
+                    if (permTrue) { temp = "4"; }
+                    else { }
+                }
+            }
                        m->mothurConvert(temp, perm);
             if ((perm == 1) || (perm == 2) || (perm == 3) || (perm == 4)) { }
-            else { m->mothurOut("[ERROR]: Not a valid permute value.  Valid values are 1, 2, 3, and 4."); m->mothurOutEndLine(); abort = true;  }
+            else { m->mothurOut("[ERROR]: Not a valid permute value.  Valid values are 1, 2, 3, 4 and true."); m->mothurOutEndLine(); abort = true;  }
             
             temp = validParameter.validFile(parameters, "sharedotus", false);          if (temp == "not found"){       temp = "t";                             }
                        sharedOtus = m->isTrue(temp);