]> git.donarmstrong.com Git - mothur.git/blobdiff - unifracunweightedcommand.cpp
fixed bug with shhh.flow from file path name in write functions, added "smart" featur...
[mothur.git] / unifracunweightedcommand.cpp
index a8c656cb5c5ffdc4a1e0fb3fd62e8eed0f1bb25f..a404f79222ac83cf41d42c04ceb614df1e01dceb 100644 (file)
@@ -48,7 +48,7 @@ string UnifracUnweightedCommand::getHelpString(){
                helpString += "Example unifrac.unweighted(groups=A-B-C, iters=500).\n";
                helpString += "The default value for groups is all the groups in your groupfile, and iters is 1000.\n";
                helpString += "The unifrac.unweighted command output two files: .unweighted and .uwsummary their descriptions are in the manual.\n";
-               helpString += "Note: No spaces between parameter labels (i.e. groups), '=' and parameters (i.e.yourGroups).\n\n";
+               helpString += "Note: No spaces between parameter labels (i.e. groups), '=' and parameters (i.e.yourGroups).\n";
                return helpString;
        }
        catch(exception& e) {
@@ -80,11 +80,10 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        
                //allow user to run help
                if(option == "help") { help(); abort = true; calledHelp = true; }
+               else if(option == "citation") { citation(); abort = true; calledHelp = true;}
                
                else {
-                       //valid paramters for this command
-                       string Array[] =  {"groups","iters","distance","random","root", "processors","outputdir","inputdir"};
-                       vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
+                       vector<string> myArray = setParameters();
                        
                        OptionParser parser(option);
                        map<string,string> parameters = parser.getParameters();
@@ -135,6 +134,10 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        }
                        
                        m->runParse = true;
+                       m->clearGroups();
+                       m->clearAllGroups();
+                       m->Treenames.clear();
+                       m->names.clear();
                        
                        //check for required parameters
                        treefile = validParameter.validFile(parameters, "tree", true);
@@ -143,16 +146,18 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                                treefile = m->getTreeFile(); 
                                if (treefile != "") { m->mothurOut("Using " + treefile + " as input file for the tree parameter."); m->mothurOutEndLine(); }
                                else {  m->mothurOut("You have no current tree file and the tree parameter is required."); m->mothurOutEndLine(); abort = true; }                                                               
-                       }       
+                       }else { m->setTreeFile(treefile); }     
                        
                        //check for required parameters
                        groupfile = validParameter.validFile(parameters, "group", true);
                        if (groupfile == "not open") { abort = true; }
                        else if (groupfile == "not found") { groupfile = ""; }
+                       else { m->setGroupFile(groupfile); }
                        
                        namefile = validParameter.validFile(parameters, "name", true);
-                       if (namefile == "not open") { abort = true; }
+                       if (namefile == "not open") { namefile = ""; abort = true; }
                        else if (namefile == "not found") { namefile = ""; }
+                       else { m->setNameFile(namefile); }
                        
                        outputDir = validParameter.validFile(parameters, "outputdir", false);           if (outputDir == "not found"){  outputDir = ""; }
                        
@@ -162,11 +167,11 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        if (groups == "not found") { groups = ""; }
                        else { 
                                m->splitAtDash(groups, Groups);
-                               m->Groups = Groups;
+                               m->setGroups(Groups);
                        }
                                
                        itersString = validParameter.validFile(parameters, "iters", false);                             if (itersString == "not found") { itersString = "1000"; }
-                       convert(itersString, iters); 
+                       m->mothurConvert(itersString, iters); 
                        
                        string temp = validParameter.validFile(parameters, "distance", false);                  
                        if (temp == "not found") { phylip = false; outputForm = ""; }
@@ -183,7 +188,7 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        
                        temp = validParameter.validFile(parameters, "processors", false);       if (temp == "not found"){       temp = m->getProcessors();      }
                        m->setProcessors(temp);
-                       convert(temp, processors); 
+                       m->mothurConvert(temp, processors); 
                        
                        if (!random) {  iters = 0;  } //turn off random calcs
                        
@@ -191,7 +196,12 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        if ((phylip) && (Groups.size() == 0)) {
                                groups = "all";
                                m->splitAtDash(groups, Groups);
-                               m->Groups = Groups;
+                               m->setGroups(Groups);
+                       }
+                       
+                       if (namefile == "") {
+                               vector<string> files; files.push_back(treefile);
+                               parser.getNameFile(files);
                        }
                }
                
@@ -208,6 +218,8 @@ int UnifracUnweightedCommand::execute() {
                
                if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
                
+               m->setTreeFile(treefile);
+               
                if (groupfile != "") {
                        //read in group map info.
                        tmap = new TreeMap(groupfile);
@@ -251,8 +263,8 @@ int UnifracUnweightedCommand::execute() {
                                
                                if (m->control_pressed) { 
                                        delete tmap; for (int i = 0; i < T.size(); i++) { delete T[i]; }
-                                       for (int i = 0; i < outputNames.size(); i++) {  remove(outputNames[i].c_str()); } outputTypes.clear();
-                                       m->Groups.clear();
+                                       for (int i = 0; i < outputNames.size(); i++) {  m->mothurRemove(outputNames[i]); } outputTypes.clear();
+                                       m->clearGroups();
                                        return 0;
                                }
                                
@@ -275,8 +287,11 @@ int UnifracUnweightedCommand::execute() {
                m->openOutputFile(sumFile, outSum);
                
                util = new SharedUtil();
-               util->setGroups(m->Groups, tmap->namesOfGroups, allGroups, numGroups, "unweighted");    //sets the groups the user wants to analyze
-               util->getCombos(groupComb, m->Groups, numComp);
+               Groups = m->getGroups();
+               vector<string> namesGroups = tmap->getNamesOfGroups();
+               util->setGroups(Groups, namesGroups, allGroups, numGroups, "unweighted");       //sets the groups the user wants to analyze
+               util->getCombos(groupComb, Groups, numComp);
+               m->setGroups(Groups);
                delete util;
        
                if (numGroups == 1) { numComp++; groupComb.push_back(allGroups); }
@@ -291,8 +306,10 @@ int UnifracUnweightedCommand::execute() {
                
                if (numComp < processors) { processors = numComp;  }
                
-               outSum << "Tree#" << '\t' << "Groups" << '\t'  <<  "UWScore" <<'\t' << "UWSig" <<  endl;
-               m->mothurOut("Tree#\tGroups\tUWScore\tUWSig"); m->mothurOutEndLine();
+               outSum << "Tree#" << '\t' << "Groups" << '\t'  <<  "UWScore" <<'\t';
+               m->mothurOut("Tree#\tGroups\tUWScore\t");
+               if (random) { outSum << "UWSig"; m->mothurOut("UWSig"); }
+               outSum << endl; m->mothurOutEndLine();
         
                //get pscores for users trees
                for (int i = 0; i < T.size(); i++) {
@@ -300,7 +317,7 @@ int UnifracUnweightedCommand::execute() {
                                delete tmap; delete unweighted;
                                for (int i = 0; i < T.size(); i++) { delete T[i]; }
                                outSum.close();
-                               for (int i = 0; i < outputNames.size(); i++) {  remove(outputNames[i].c_str());  }
+                               for (int i = 0; i < outputNames.size(); i++) {  m->mothurRemove(outputNames[i]);  }
                                return 0; 
                        }
                        
@@ -322,7 +339,7 @@ int UnifracUnweightedCommand::execute() {
                        userData = unweighted->getValues(T[i], processors, outputDir);  //userData[0] = unweightedscore
                
                        if (m->control_pressed) { delete tmap; delete unweighted;
-                               for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close();  for (int i = 0; i < outputNames.size(); i++) {      remove(outputNames[i].c_str());  }return 0; }
+                               for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close();  for (int i = 0; i < outputNames.size(); i++) {      m->mothurRemove(outputNames[i]);  }return 0; }
                        
                        //output scores for each combination
                        for(int k = 0; k < numComp; k++) {
@@ -340,7 +357,7 @@ int UnifracUnweightedCommand::execute() {
                                randomData = unweighted->getValues(T[i], "", "", processors, outputDir);
                                
                                if (m->control_pressed) { delete tmap; delete unweighted;
-                                       for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {       remove(outputNames[i].c_str());  } return 0; }
+                                       for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {       m->mothurRemove(outputNames[i]);  } return 0; }
                        
                                for(int k = 0; k < numComp; k++) {      
                                        //add trees unweighted score to map of scores
@@ -378,7 +395,7 @@ int UnifracUnweightedCommand::execute() {
                        }
                        
                        if (m->control_pressed) { delete tmap; delete unweighted;
-                               for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {       remove(outputNames[i].c_str());  } return 0;  }
+                               for (int i = 0; i < T.size(); i++) { delete T[i]; }if (random) { delete output;  } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {       m->mothurRemove(outputNames[i]);  } return 0;  }
                        
                        //print output files
                        printUWSummaryFile(i);
@@ -394,11 +411,11 @@ int UnifracUnweightedCommand::execute() {
                
 
                outSum.close();
-               m->Groups.clear();
+               m->clearGroups();
                delete tmap; delete unweighted;
                for (int i = 0; i < T.size(); i++) { delete T[i]; }
                
-               if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) {        remove(outputNames[i].c_str());  }      return 0; }
+               if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) {        m->mothurRemove(outputNames[i]);  }     return 0; }
                
                m->mothurOut("It took " + toString(time(NULL) - start) + " secs to run unifrac.unweighted."); m->mothurOutEndLine();
                
@@ -478,9 +495,9 @@ void UnifracUnweightedCommand::printUWSummaryFile(int i) {
                                        m->mothurOutJustToLog(groupComb[a]  + "\t" + toString(utreeScores[a][0])  + "\t<" + toString((1/float(iters))) + "\n"); 
                                }
                        }else{
-                               outSum << setprecision(6) << groupComb[a]  << '\t' << utreeScores[a][0] << '\t' << "0.00" << endl;
-                               cout << setprecision(6)  << groupComb[a]  << '\t' << utreeScores[a][0] << '\t' << "0.00" << endl; 
-                               m->mothurOutJustToLog(groupComb[a]  + "\t" + toString(utreeScores[a][0])  + "\t0.00\n");
+                               outSum << setprecision(6) << groupComb[a]  << '\t' << utreeScores[a][0]  << endl;
+                               cout << setprecision(6)  << groupComb[a]  << '\t' << utreeScores[a][0]  << endl; 
+                               m->mothurOutJustToLog(groupComb[a]  + "\t" + toString(utreeScores[a][0]) + "\n");
                        }
                }
                
@@ -507,18 +524,18 @@ void UnifracUnweightedCommand::createPhylipFile(int i) {
                
                if ((outputForm == "lt") || (outputForm == "square")) {
                        //output numSeqs
-                       out << m->Groups.size() << endl;
+                       out << m->getNumGroups() << endl;
                }
                
                //make matrix with scores in it
-               vector< vector<float> > dists;  dists.resize(m->Groups.size());
-               for (int i = 0; i < m->Groups.size(); i++) {
-                       dists[i].resize(m->Groups.size(), 0.0);
+               vector< vector<float> > dists;  dists.resize(m->getNumGroups());
+               for (int i = 0; i < m->getNumGroups(); i++) {
+                       dists[i].resize(m->getNumGroups(), 0.0);
                }
                
                //flip it so you can print it
                int count = 0;
-               for (int r=0; r<m->Groups.size(); r++) { 
+               for (int r=0; r<m->getNumGroups(); r++) { 
                        for (int l = 0; l < r; l++) {
                                dists[r][l] = utreeScores[count][0];
                                dists[l][r] = utreeScores[count][0];
@@ -527,9 +544,9 @@ void UnifracUnweightedCommand::createPhylipFile(int i) {
                }
                
                //output to file
-               for (int r=0; r<m->Groups.size(); r++) { 
+               for (int r=0; r<m->getNumGroups(); r++) { 
                        //output name
-                       string name = m->Groups[r];
+                       string name = (m->getGroups())[r];
                        if (name.length() < 10) { //pad with spaces to make compatible
                                while (name.length() < 10) {  name += " ";  }
                        }
@@ -544,12 +561,12 @@ void UnifracUnweightedCommand::createPhylipFile(int i) {
                                out << name << '\t';
                                
                                //output distances
-                               for (int l = 0; l < m->Groups.size(); l++) {    out << dists[r][l] << '\t';  }
+                               for (int l = 0; l < m->getNumGroups(); l++) {   out << dists[r][l] << '\t';  }
                                out << endl;
                        }else{
                                //output distances
                                for (int l = 0; l < r; l++) {   
-                                       string otherName = m->Groups[l];
+                                       string otherName = (m->getGroups())[l];
                                        if (otherName.length() < 10) { //pad with spaces to make compatible
                                                while (otherName.length() < 10) {  otherName += " ";  }
                                        }