]> git.donarmstrong.com Git - mothur.git/blobdiff - heatmapcommand.cpp
added heatmap command
[mothur.git] / heatmapcommand.cpp
index 5da80d8179f4cb29f3c005490526ef6e8c5a93ab..10264c87951668a890b92903d87073fed2b0aa03 100644 (file)
@@ -15,7 +15,9 @@
 HeatMapCommand::HeatMapCommand(){
        try {
                globaldata = GlobalData::getInstance();
+               heatmap = new HeatMap();
                format = globaldata->getFormat();
+               
        }
        catch(exception& e) {
                cout << "Standard Error: " << e.what() << " has occurred in the HeatMapCommand class Function HeatMapCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
@@ -31,6 +33,7 @@ HeatMapCommand::HeatMapCommand(){
 HeatMapCommand::~HeatMapCommand(){
        delete input;
        delete read;
+       delete heatmap;
 }
 
 //**********************************************************************************************************************
@@ -62,14 +65,19 @@ int HeatMapCommand::execute(){
                        ordersingle = globaldata->gorder;
                        input = globaldata->ginput;
                }
+
                
                if (format != "list") { 
+                       
+                       setGroups();
+                       
                        while(order != NULL){
                
                                if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(order->getLabel()) == 1){                       
        
                                        cout << order->getLabel() << '\t' << count << endl;
-//call heatmap class to make file
+                                       heatmap->getPic(order);
+
                                }
                                                
                                //get next line to process
@@ -93,10 +101,11 @@ int HeatMapCommand::execute(){
                }else{
                        while(ordersingle != NULL){
                
-                               if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(order->getLabel()) == 1){                       
+                               if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(ordersingle->getLabel()) == 1){                 
        
-                                       cout << order->getLabel() << '\t' << count << endl;
-//call heatmap class to make file
+                                       cout << ordersingle->getLabel() << '\t' << count << endl;
+                                       heatmap->getPic(ordersingle);
+                                       
                                }
                                
                                ordersingle = (input->getOrderVector());
@@ -117,4 +126,50 @@ int HeatMapCommand::execute(){
 }
 
 //**********************************************************************************************************************
+void HeatMapCommand::setGroups() {
+       try {
+               //if the user has not entered specific groups to analyze then do them all
+               if (globaldata->Groups.size() != 0) {
+                       if (globaldata->Groups[0] != "all") {
+                               //check that groups are valid
+                               for (int i = 0; i < globaldata->Groups.size(); i++) {
+                                       if (globaldata->gGroupmap->isValidGroup(globaldata->Groups[i]) != true) {
+                                               cout << globaldata->Groups[i] << " is not a valid group, and will be disregarded." << endl;
+                                               // erase the invalid group from globaldata->Groups
+                                               globaldata->Groups.erase(globaldata->Groups.begin()+i);
+                                       }
+                               }
+                       
+                               //if the user only entered invalid groups
+                               if (globaldata->Groups.size() == 0) { 
+                                       cout << "When using the groups parameter you must have at least 1 valid groups. I will run the command using all the groups in your groupfile." << endl; 
+                                       for (int i = 0; i < globaldata->gGroupmap->namesOfGroups.size(); i++) {
+                                               globaldata->Groups.push_back(globaldata->gGroupmap->namesOfGroups[i]);
+                                       }
+                               }
+                       }else{//user has enter "all" and wants the default groups
+                               globaldata->Groups.clear();
+                               for (int i = 0; i < globaldata->gGroupmap->namesOfGroups.size(); i++) {
+                                       globaldata->Groups.push_back(globaldata->gGroupmap->namesOfGroups[i]);
+                               }
+                               globaldata->setGroups("");
+                       }
+               }else {
+                       for (int i = 0; i < globaldata->gGroupmap->namesOfGroups.size(); i++) {
+                               globaldata->Groups.push_back(globaldata->gGroupmap->namesOfGroups[i]);
+                       }
+               }
+               
+       }
+       catch(exception& e) {
+               cout << "Standard Error: " << e.what() << " has occurred in the HeatMapCommand class Function setGroups. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }
+       catch(...) {
+               cout << "An unknown error has occurred in the HeatMapCommand class function setGroups. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }               
+
+}
+/***********************************************************/