]> git.donarmstrong.com Git - mothur.git/blobdiff - parsimonycommand.cpp
fixed parsimony with groups and worked on unifrac.unweighted with groups
[mothur.git] / parsimonycommand.cpp
index e741b5e914770e34b49ac5c244e31b041f8520d2..a527a18d28e8ef8613f39c3ce2d2da6b177f3af5 100644 (file)
@@ -25,8 +25,6 @@ ParsimonyCommand::ParsimonyCommand() {
                        openOutputFile(parsFile, out);
                        sumFile = globaldata->getTreeFile() + ".psummary";
                        openOutputFile(sumFile, outSum);
-                       //set users groups to analyze
-                       setGroups();
                }else { //user wants random distribution
                        savetmap = globaldata->gTreemap;
                        getUserInput();
@@ -34,6 +32,8 @@ ParsimonyCommand::ParsimonyCommand() {
                        openOutputFile(parsFile, out);
                }
                
+               //set users groups to analyze
+               setGroups();
                convert(globaldata->getIters(), iters);  //how many random trees to generate
                pars = new Parsimony(tmap);
 
@@ -50,20 +50,19 @@ ParsimonyCommand::ParsimonyCommand() {
 /***********************************************************/
 int ParsimonyCommand::execute() {
        try {
-               
+       
+               //get pscore for users tree
+               userData.resize(numComp,0);  //data = AB, AC, BC, ABC.
+               randomData.resize(numComp,0);  //data = AB, AC, BC, ABC.
+               rscoreFreq.resize(numComp);  
+               uscoreFreq.resize(numComp);  
+               rCumul.resize(numComp);  
+               uCumul.resize(numComp);  
+               validScores.resize(numComp); 
+               userTreeScores.resize(numComp);  
+               UScoreSig.resize(numComp); 
                                
                if (randomtree == "") {
-                       //get pscore for users tree
-                       userData.resize(numComp,0);  //data = AB, AC, BC, ABC.
-                       randomData.resize(numComp,0);  //data = AB, AC, BC, ABC.
-                       rscoreFreq.resize(numComp);  
-                       uscoreFreq.resize(numComp);  
-                       rCumul.resize(numComp);  
-                       uCumul.resize(numComp);  
-                       validScores.resize(numComp); 
-                       userTreeScores.resize(numComp);  
-                       UScoreSig.resize(numComp); 
-
                        //get pscores for users trees
                        for (int i = 0; i < T.size(); i++) {
                                cout << "Processing tree " << i+1 << endl;
@@ -71,7 +70,6 @@ int ParsimonyCommand::execute() {
                                
                                //output scores for each combination
                                for(int k = 0; k < numComp; k++) {
-                                       cout << "Tree " << i+1 << " Combination " << groupComb[k] << " parsimony score = " << userData[k] << endl;
                                        //update uscoreFreq
                                        it = uscoreFreq[k].find(userData[k]);
                                        if (it == uscoreFreq[k].end()) {//new score
@@ -167,7 +165,7 @@ int ParsimonyCommand::execute() {
                }
                
                printParsimonyFile();
-               printUSummaryFile();
+               if (randomtree == "") { printUSummaryFile(); }
                
                //reset globaldata's treemap if you just did random distrib
                if (randomtree != "") { globaldata->gTreemap = savetmap; }
@@ -239,6 +237,7 @@ void ParsimonyCommand::printUSummaryFile() {
                for (int i = 0; i< T.size(); i++) {
                        for(int a = 0; a < numComp; a++) {
                                outSum << setprecision(6) << i+1 << '\t' << groupComb[a] << '\t' << '\t' << userTreeScores[a][i] << '\t' << UScoreSig[a][i] << endl;
+                               cout << setprecision(6) << i+1 << '\t' << groupComb[a] << '\t' << '\t' << userTreeScores[a][i] << '\t' << UScoreSig[a][i] << endl;
                        }
                }
                
@@ -274,6 +273,7 @@ void ParsimonyCommand::getUserInput() {
                                
                        //set tmaps seqsPerGroup
                        tmap->seqsPerGroup[toString(i)] = num;
+                       tmap->namesOfGroups.push_back(toString(i));
                        
                        //set tmaps namesOfSeqs
                        for (int j = 0; j < num; j++) {
@@ -357,8 +357,10 @@ void ParsimonyCommand::setGroups() {
                }
                
                //ABC
-               groupComb.push_back(allGroups);
-               numComp++;
+               if (numComp != 1) {
+                       groupComb.push_back(allGroups);
+                       numComp++;
+               }
                
        }
        catch(exception& e) {