]> git.donarmstrong.com Git - mothur.git/blobdiff - unifracweightedcommand.cpp
added otu.association command. added calcSpearman, calcKendall and calcPearson functi...
[mothur.git] / unifracweightedcommand.cpp
index f868129fd2236a3aca06cf27f2e25b2229013ccf..f9dc450444b242555710f91dc3567f96e69e6d3d 100644 (file)
@@ -80,6 +80,7 @@ UnifracWeightedCommand::UnifracWeightedCommand(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 {
                        vector<string> myArray = setParameters();
@@ -133,28 +134,30 @@ UnifracWeightedCommand::UnifracWeightedCommand(string option) {
                        }
                        
                        m->runParse = true;
-                       m->Groups.clear();
-                       m->namesOfGroups.clear();
+                       m->clearGroups();
+                       m->clearAllGroups();
                        m->Treenames.clear();
                        m->names.clear();
                        
                        //check for required parameters
                        treefile = validParameter.validFile(parameters, "tree", true);
-                       if (treefile == "not open") { abort = true; }
+                       if (treefile == "not open") { treefile = ""; abort = true; }
                        else if (treefile == "not found") {                             //if there is a current design file, use it
                                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 = ""; }
                        
@@ -165,11 +168,11 @@ UnifracWeightedCommand::UnifracWeightedCommand(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 = ""; }
@@ -186,9 +189,14 @@ UnifracWeightedCommand::UnifracWeightedCommand(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
+                       
+                       if (namefile == "") {
+                               vector<string> files; files.push_back(treefile);
+                               parser.getNameFile(files);
+                       }
                }
                
                
@@ -249,8 +257,8 @@ int UnifracWeightedCommand::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;
                                }
                                
@@ -274,8 +282,11 @@ int UnifracWeightedCommand::execute() {
                        
                util = new SharedUtil();
                string s; //to make work with setgroups
-               util->setGroups(m->Groups, tmap->namesOfGroups, s, numGroups, "weighted");      //sets the groups the user wants to analyze
-               util->getCombos(groupComb, m->Groups, numComp);
+               Groups = m->getGroups();
+               vector<string> nameGroups = tmap->getNamesOfGroups();
+               util->setGroups(Groups, nameGroups, s, numGroups, "weighted");  //sets the groups the user wants to analyze
+               util->getCombos(groupComb, Groups, numComp);
+               m->setGroups(Groups);
                delete util;
                
                weighted = new Weighted(tmap, includeRoot);
@@ -292,7 +303,7 @@ int UnifracWeightedCommand::execute() {
                for (int i = 0; i < T.size(); i++) {
                        
                        if (m->control_pressed) { delete tmap; delete weighted;
-                               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());  } return 0; }
+                               for (int i = 0; i < T.size(); i++) { delete T[i]; } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {      m->mothurRemove(outputNames[i]);  } return 0; }
 
                        counter = 0;
                        rScores.resize(numComp);  //data[0] = weightedscore AB, data[1] = weightedscore AC...
@@ -307,7 +318,7 @@ int UnifracWeightedCommand::execute() {
                        userData = weighted->getValues(T[i], processors, outputDir);  //userData[0] = weightedscore
                        
                        if (m->control_pressed) { delete tmap; delete weighted;
-                               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; }
                        
                        //save users score
                        for (int s=0; s<numComp; s++) {
@@ -324,7 +335,7 @@ int UnifracWeightedCommand::execute() {
                                vector< vector<string> > namesOfGroupCombos;
                                for (int a=0; a<numGroups; a++) { 
                                        for (int l = 0; l < a; l++) {   
-                                               vector<string> groups; groups.push_back(m->Groups[a]); groups.push_back(m->Groups[l]);
+                                               vector<string> groups; groups.push_back((m->getGroups())[a]); groups.push_back((m->getGroups())[l]);
                                                namesOfGroupCombos.push_back(groups);
                                        }
                                }
@@ -361,7 +372,7 @@ int UnifracWeightedCommand::execute() {
                                        #endif
                                        
                                        if (m->control_pressed) { delete tmap; delete weighted;
-                                               for (int i = 0; i < T.size(); i++) { delete T[i]; } 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]; } delete output; outSum.close(); for (int i = 0; i < outputNames.size(); i++) {       m->mothurRemove(outputNames[i]);  } return 0; }
                                        
                                        //report progress
 //                                     m->mothurOut("Iter: " + toString(j+1)); m->mothurOutEndLine();          
@@ -399,20 +410,20 @@ int UnifracWeightedCommand::execute() {
                
                
                if (m->control_pressed) { delete tmap; delete weighted;
-                       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());  } return 0;  }
+                       for (int i = 0; i < T.size(); i++) { delete T[i]; } outSum.close(); for (int i = 0; i < outputNames.size(); i++) {      m->mothurRemove(outputNames[i]);  } return 0;  }
                
                printWSummaryFile();
                
                if (phylip) {   createPhylipFile();             }
 
                //clear out users groups
-               m->Groups.clear();
+               m->clearGroups();
                delete tmap; delete weighted;
                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());  }
+                       for (int i = 0; i < outputNames.size(); i++) {  m->mothurRemove(outputNames[i]);  }
                        return 0; 
                }
                
@@ -497,7 +508,7 @@ int UnifracWeightedCommand::createProcesses(Tree* t, vector< vector<string> > na
                        double tempScore;
                        for (int j = lines[(i+1)].start; j < (lines[(i+1)].start + lines[(i+1)].num); j++) { in >> tempScore; scores[j].push_back(tempScore); }
                        in.close();
-                       remove(s.c_str());
+                       m->mothurRemove(s);
                }
                
                return 0;
@@ -578,8 +589,10 @@ void UnifracWeightedCommand::printWeightedFile() {
 void UnifracWeightedCommand::printWSummaryFile() {
        try {
                //column headers
-               outSum << "Tree#" << '\t' << "Groups" << '\t' << "WScore" << '\t' << "WSig" <<  endl;
-               m->mothurOut("Tree#\tGroups\tWScore\tWSig"); m->mothurOutEndLine(); 
+               outSum << "Tree#" << '\t' << "Groups" << '\t' << "WScore" << '\t';
+               m->mothurOut("Tree#\tGroups\tWScore\t");
+               if (random) { outSum << "WSig"; m->mothurOut("WSig"); }
+               outSum << endl; m->mothurOutEndLine();
                
                //format output
                outSum.setf(ios::fixed, ios::floatfield); outSum.setf(ios::showpoint);
@@ -599,9 +612,9 @@ void UnifracWeightedCommand::printWSummaryFile() {
                                                m->mothurOutJustToLog(toString(i+1) +"\t" + groupComb[j] +"\t" + toString(utreeScores[count]) +"\t<" +  toString((1/float(iters))) + "\n");  
                                        }
                                }else{
-                                       outSum << setprecision(6) << i+1 << '\t' << groupComb[j] << '\t' << utreeScores[count] << '\t' << "0.00" << endl; 
-                                       cout << setprecision(6) << i+1 << '\t' << groupComb[j] << '\t' << utreeScores[count] << '\t' << "0.00" << endl; 
-                                       m->mothurOutJustToLog(toString(i+1) +"\t" + groupComb[j] +"\t" + toString(utreeScores[count]) +"\t0.00\n"); 
+                                       outSum << setprecision(6) << i+1 << '\t' << groupComb[j] << '\t' << utreeScores[count] << endl; 
+                                       cout << setprecision(6) << i+1 << '\t' << groupComb[j] << '\t' << utreeScores[count]  << endl; 
+                                       m->mothurOutJustToLog(toString(i+1) +"\t" + groupComb[j] +"\t" + toString(utreeScores[count]) +"\n"); 
                                }
                                count++;
                        }
@@ -634,17 +647,17 @@ void UnifracWeightedCommand::createPhylipFile() {
                        
                        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
-                       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];
                                        dists[l][r] = utreeScores[count];
@@ -653,9 +666,9 @@ void UnifracWeightedCommand::createPhylipFile() {
                        }
 
                        //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 += " ";  }
                                }
@@ -670,12 +683,12 @@ void UnifracWeightedCommand::createPhylipFile() {
                                        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 += " ";  }
                                                }