]> git.donarmstrong.com Git - mothur.git/blobdiff - clusterclassic.cpp
forced rarefaction.single to output ending line for all groups. added subsample...
[mothur.git] / clusterclassic.cpp
index 7f6e97ed68ebc0d44b1894fe462c5330fd73de3b..2d1b9a6b781960a824fddafc03b904e8039179e1 100644 (file)
@@ -11,7 +11,7 @@
 #include "progress.hpp"
 
 /***********************************************************************/
-ClusterClassic::ClusterClassic(float c, string f) : method(f), smallDist(1e6), nseqs(0) {
+ClusterClassic::ClusterClassic(float c, string f, bool s) : method(f), smallDist(1e6), nseqs(0), sim(s) {
        try {
                mapWanted = false;  //set to true by mgcluster to speed up overlap merge
        
@@ -19,7 +19,10 @@ ClusterClassic::ClusterClassic(float c, string f) : method(f), smallDist(1e6), n
                cutoff = c;
                aboveCutoff = cutoff + 10000.0;
                m = MothurOut::getInstance();
-               globaldata = GlobalData::getInstance();
+        if(method == "furthest")        {   tag = "fn";   }
+        else if (method == "average")   {   tag = "an";   }
+        else if (method == "weighted")  {   tag = "wn";   }        
+        else if (method == "nearest")   {   tag = "nn";   }
        }
        catch(exception& e) {
                m->errorOut(e, "ClusterClassic", "ClusterClassic");
@@ -37,7 +40,12 @@ int ClusterClassic::readPhylipFile(string filename, NameAssignment* nameMap) {
                ifstream fileHandle;
                m->openInputFile(filename, fileHandle);
                
-               fileHandle >> nseqs >> name;
+        string numTest;
+               fileHandle >> numTest >> name;
+        
+        if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ", quitting."); m->mothurOutEndLine(); exit(1); }
+        else { convert(numTest, nseqs); }
+
 
                matrixNames.push_back(name);
 
@@ -102,7 +110,7 @@ int ClusterClassic::readPhylipFile(string filename, NameAssignment* nameMap) {
                                                                                fileHandle >> distance;
                                                        
                                                                                if (distance == -1) { distance = 1000000; }
-                                                                               else if (globaldata->sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
+                                                                               else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
                                                                
                                                                                //if(distance < cutoff){
                                                                                        dMatrix[i][j] = distance;
@@ -124,7 +132,7 @@ int ClusterClassic::readPhylipFile(string filename, NameAssignment* nameMap) {
                                                                                if (m->control_pressed) { delete reading; fileHandle.close(); return 0;  }
                                
                                                                                if (distance == -1) { distance = 1000000; }
-                                                                               else if (globaldata->sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
+                                                                               else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
                                                                                
                                                                                //if(distance < cutoff){
                                                                                        if (distance < smallDist) { smallDist = distance; }
@@ -162,7 +170,7 @@ int ClusterClassic::readPhylipFile(string filename, NameAssignment* nameMap) {
                                                                                if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
                                                                                
                                                                                if (distance == -1) { distance = 1000000; }
-                                                                               else if (globaldata->sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
+                                                                               else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
                                                                                
                                                                                if(j < i){
                                                                                        if (distance < smallDist) { smallDist = distance; }
@@ -185,7 +193,7 @@ int ClusterClassic::readPhylipFile(string filename, NameAssignment* nameMap) {
                                                                                if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
                                                                                
                                                                           if (distance == -1) { distance = 1000000; }
-                                                                               else if (globaldata->sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.                                                        
+                                                                               else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.                                                        
                                                                                
                                                                                if(j < i){
                                                                                        if (distance < smallDist) { smallDist = distance; }
@@ -435,11 +443,11 @@ void ClusterClassic::print() {
 try {
                //update location of seqs in smallRow since they move to smallCol now
                for (int i = 0; i < dMatrix.size(); i++) {
-                       cout << "row = " << i << '\t';
+                       m->mothurOut("row = " + toString(i) + "\t");
                        for (int j = 0; j < dMatrix[i].size(); j++) {
-                               cout << dMatrix[i][j] << '\t';
+                               m->mothurOut(toString(dMatrix[i][j]) + "\t");
                        }
-                       cout << endl;
+                       m->mothurOutEndLine();
                }
        }
        catch(exception& e) {