]> git.donarmstrong.com Git - mothur.git/blobdiff - heatmap.cpp
pcr.seqs bug fix. working on shannon range calc
[mothur.git] / heatmap.cpp
index 367342c7167451402c5879a1f6efd1f83e7a48a4..254b70668f9539929dcd3d60360cd23bd7c6dc2a 100644 (file)
@@ -119,7 +119,7 @@ string HeatMap::getPic(vector<SharedRAbundVector*> lookup) {
                }
                
                //sort lookup so shared bins are on top
-        vector<string> sortedLabels = m->currentBinLabels;
+        vector<string> sortedLabels = m->currentSharedBinLabels;
                if (sorted != "none") {  sortedLabels = sortSharedVectors(lookup);  }
                
                vector<vector<string> > scaleRelAbund;
@@ -144,12 +144,17 @@ string HeatMap::getPic(vector<SharedRAbundVector*> lookup) {
                                
                                if (lookup[i]->getAbundance(j) != 0) { //don't want log value of 0.
                                        if (scaler == "log10") {
-                                               scaleRelAbund[i][j] = toHex(int(255 * log10(relAbund) / log10(maxRelAbund[i]))) + "0000";  
+                        if (maxRelAbund[i] == 1) { maxRelAbund[i] -= 0.001; }
+                        if (relAbund == 1) { relAbund -= 0.001; }
+                                               scaleRelAbund[i][j] = toHex(int(255 * log10(relAbund) / log10(maxRelAbund[i]))) + "0000";
                                        }else if (scaler == "log2") {
+                        if (maxRelAbund[i] == 1) { maxRelAbund[i] -= 0.001; }
+                        if (relAbund == 1) { relAbund -= 0.001; }
                                                scaleRelAbund[i][j] = toHex(int(255 * log2(relAbund) / log2(maxRelAbund[i]))) + "0000";  
                                        }else if (scaler == "linear") {
-                                               scaleRelAbund[i][j] = toHex(int(255 * relAbund / maxRelAbund[i])) + "0000";  
+                                               scaleRelAbund[i][j] = toHex(int(255 * relAbund / maxRelAbund[i])) + "0000";
                                        }else {  //if user enters invalid scaler option.
+                        if (maxRelAbund[i] == 1) { maxRelAbund[i] += 0.001; }
                                                scaleRelAbund[i][j] = toHex(int(255 * log10(relAbund / log10(maxRelAbund[i]))))  + "0000"; 
                                        } 
                                }else { scaleRelAbund[i][j] = "FFFFFF";  }
@@ -221,7 +226,7 @@ vector<string> HeatMap::sortSharedVectors(vector<SharedRAbundVector*>& lookup){
                map<int, int> place; //spot in lookup where you insert shared by, ie, 3 -> 2 if they are shared by 3 inset into location 2.
                map<int, int>::iterator it;
         
-        vector<string> sortedLabels = m->currentBinLabels;
+        vector<string> sortedLabels = m->currentSharedBinLabels;
                
                /****************** find order of otus **********************/
                if (sorted == "shared") {
@@ -254,7 +259,7 @@ vector<string> HeatMap::sortSharedVectors(vector<SharedRAbundVector*>& lookup){
                                int newAbund = looktemp[j]->getAbundance(i);                                                                                            // 1 -> 3
                                lookup[j]->set(place[i], newAbund, looktemp[j]->getGroup()); //binNumber, abundance, group
                        }
-            sortedLabels[place[i]] = m->currentBinLabels[i];
+            sortedLabels[place[i]] = m->currentSharedBinLabels[i];
                }
                
                //delete looktemp -- Sarah look at - this is causing segmentation faults
@@ -430,7 +435,7 @@ string HeatMap::getPic(vector<SharedRAbundFloatVector*> lookup) {
                }
                
                //sort lookup so shared bins are on top
-               vector<string> sortedLabels = m->currentBinLabels;
+               vector<string> sortedLabels = m->currentSharedBinLabels;
                if (sorted != "none") {  sortedLabels = sortSharedVectors(lookup);  }
                
                vector<vector<string> > scaleRelAbund;
@@ -455,11 +460,15 @@ string HeatMap::getPic(vector<SharedRAbundFloatVector*> lookup) {
                                
                                if (lookup[i]->getAbundance(j) != 0) { //don't want log value of 0.
                                        if (scaler == "log10") {
+                        if (maxRelAbund[i] == 1) { maxRelAbund[i] -= 0.001; }
+                        if (relAbund == 1) { relAbund -= 0.001; }
                                                scaleRelAbund[i][j] = toHex(int(255 * log10(relAbund) / log10(maxRelAbund[i]))) + "0000";  
                                        }else if (scaler == "log2") {
+                        if (maxRelAbund[i] == 1) { maxRelAbund[i] -= 0.001; }
+                        if (relAbund == 1) { relAbund -= 0.001; }
                                                scaleRelAbund[i][j] = toHex(int(255 * log2(relAbund) / log2(maxRelAbund[i]))) + "0000";  
                                        }else if (scaler == "linear") {
-                                               scaleRelAbund[i][j] = toHex(int(255 * relAbund / maxRelAbund[i])) + "0000";  
+                                               scaleRelAbund[i][j] = toHex(int(255 * relAbund / maxRelAbund[i])) + "0000";
                                        }else {  //if user enters invalid scaler option.
                                                scaleRelAbund[i][j] = toHex(int(255 * log10(relAbund / log10(maxRelAbund[i]))))  + "0000"; 
                                        } 
@@ -532,7 +541,7 @@ vector<string> HeatMap::sortSharedVectors(vector<SharedRAbundFloatVector*>& look
                map<int, int> place; //spot in lookup where you insert shared by, ie, 3 -> 2 if they are shared by 3 inset into location 2.
                map<int, int>::iterator it;
         
-        vector<string> sortedLabels = m->currentBinLabels;
+        vector<string> sortedLabels = m->currentSharedBinLabels;
                
                /****************** find order of otus **********************/
                if (sorted == "shared") {
@@ -564,7 +573,7 @@ vector<string> HeatMap::sortSharedVectors(vector<SharedRAbundFloatVector*>& look
                        for (int j = 0; j < looktemp.size(); j++) {                                                                                                             // 3 -> 2
                                float newAbund = looktemp[j]->getAbundance(i);                                                                                          // 1 -> 3
                                lookup[j]->set(place[i], newAbund, looktemp[j]->getGroup()); //binNumber, abundance, group
-                sortedLabels[place[i]] = m->currentBinLabels[i];
+                sortedLabels[place[i]] = m->currentSharedBinLabels[i];
                        }
                }