]> git.donarmstrong.com Git - mothur.git/blobdiff - sharedrabundfloatvector.cpp
Merge remote-tracking branch 'mothur/master'
[mothur.git] / sharedrabundfloatvector.cpp
index bda49bf3dcd50b7171eb2d3aaa9f1668692f1fd8..9f6c15687edc77d0fbd77df7de286cbe98b6339e 100644 (file)
@@ -76,7 +76,7 @@ SharedRAbundFloatVector::SharedRAbundFloatVector(ifstream& f) : DataVector(), ma
                }else { label = m->saveNextLabel; }
                
                //reset labels, currentLabels may have gotten changed as otus were eliminated because of group choices or sampling
-               m->currentBinLabels = m-> binLabelsInFile;
+               m->currentBinLabels = m->binLabelsInFile;
                
                //read in first row since you know there is at least 1 group.
                f >> groupN >> num;
@@ -108,6 +108,8 @@ SharedRAbundFloatVector::SharedRAbundFloatVector(ifstream& f) : DataVector(), ma
                //read the rest of the groups info in
                while ((nextLabel == holdLabel) && (f.eof() != true)) {
                        f >> groupN >> num;
+            
+            if (num != 1000) { break; }
                        count++;
                        
                        allGroups.push_back(groupN);
@@ -252,12 +254,19 @@ int SharedRAbundFloatVector::size(){
 /***********************************************************************/
 void SharedRAbundFloatVector::printHeaders(ostream& output){
        try {
+               string snumBins = toString(numBins);
                output << "label\tGroup\tnumOtus\t";
                if (m->sharedHeaderMode == "tax") {
                        for (int i = 0; i < numBins; i++) {  
                                
                                //if there is a bin label use it otherwise make one
-                               string binLabel = "PhyloType" + toString(i+1);
+                               string binLabel = "PhyloType";
+                               string sbinNumber = toString(i+1);
+                               if (sbinNumber.length() < snumBins.length()) { 
+                                       int diff = snumBins.length() - sbinNumber.length();
+                                       for (int h = 0; h < diff; h++) { binLabel += "0"; }
+                               }
+                               binLabel += sbinNumber;
                                if (i < m->currentBinLabels.size()) {  binLabel = m->currentBinLabels[i]; }
                                
                                output << binLabel << '\t'; 
@@ -266,7 +275,13 @@ void SharedRAbundFloatVector::printHeaders(ostream& output){
                }else {
                        for (int i = 0; i < numBins; i++) {  
                                //if there is a bin label use it otherwise make one
-                               string binLabel = "Otu" + toString(i+1);
+                               string binLabel = "Otu";
+                               string sbinNumber = toString(i+1);
+                               if (sbinNumber.length() < snumBins.length()) { 
+                                       int diff = snumBins.length() - sbinNumber.length();
+                                       for (int h = 0; h < diff; h++) { binLabel += "0"; }
+                               }
+                               binLabel += sbinNumber;
                                if (i < m->currentBinLabels.size()) {  binLabel = m->currentBinLabels[i]; }
                                
                                output << binLabel << '\t'; 
@@ -335,7 +350,7 @@ SharedRAbundVector SharedRAbundFloatVector::getSharedRAbundVector(){
                exit(1);
        }               
 }
-/***********************************************************************/
+***********************************************************************/
 vector<SharedRAbundFloatVector*> SharedRAbundFloatVector::getSharedRAbundFloatVectors(){
        try {
                SharedUtil* util;
@@ -406,7 +421,7 @@ SharedSAbundVector SharedRAbundVector::getSharedSAbundVector(){
                exit(1);
        }
 }
-/***********************************************************************/
+***********************************************************************/
 
 SAbundVector SharedRAbundFloatVector::getSAbundVector() {
        try {
@@ -448,7 +463,7 @@ SharedOrderVector SharedRAbundFloatVector::getSharedOrderVector() {
                exit(1);
        }
 }
-/***********************************************************************/
+***********************************************************************/
 //this is not functional, not sure how to handle it yet, but I need the stub because it is a pure function
 OrderVector SharedRAbundFloatVector::getOrderVector(map<string,int>* nameMap = NULL) {
        try {
@@ -484,6 +499,7 @@ int SharedRAbundFloatVector::eliminateZeroOTUS(vector<SharedRAbundFloatVector*>&
                
                //for each bin
                vector<string> newBinLabels;
+               string snumBins = toString(thislookup[0]->getNumBins());
                for (int i = 0; i < thislookup[0]->getNumBins(); i++) {
                        if (m->control_pressed) { for (int j = 0; j < newLookup.size(); j++) {  delete newLookup[j];  } return 0; }
                        
@@ -499,7 +515,13 @@ int SharedRAbundFloatVector::eliminateZeroOTUS(vector<SharedRAbundFloatVector*>&
                                        newLookup[j]->push_back(thislookup[j]->getAbundance(i), thislookup[j]->getGroup());
                                }
                                //if there is a bin label use it otherwise make one
-                               string binLabel = "Otu" + toString(i+1);
+                               string binLabel = "Otu";
+                               string sbinNumber = toString(i+1);
+                               if (sbinNumber.length() < snumBins.length()) { 
+                                       int diff = snumBins.length() - sbinNumber.length();
+                                       for (int h = 0; h < diff; h++) { binLabel += "0"; }
+                               }
+                               binLabel += sbinNumber; 
                                if (i < m->currentBinLabels.size()) {  binLabel = m->currentBinLabels[i]; }
                                
                                newBinLabels.push_back(binLabel);