]> git.donarmstrong.com Git - mothur.git/blobdiff - mgclustercommand.cpp
merged mgcluster. kw files added, but not working in this commit!
[mothur.git] / mgclustercommand.cpp
index a0f33d6f8bba8c2976b0a969924c4082c98ca67a..cffb80f9e8f2963d4983c6637d8eef2b33566de4 100644 (file)
@@ -14,6 +14,8 @@ vector<string> MGClusterCommand::setParameters(){
        try {
                CommandParameter pblast("blast", "InputTypes", "", "", "none", "none", "none",false,true); parameters.push_back(pblast);
                CommandParameter pname("name", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(pname);
+        CommandParameter pcount("count", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(pcount);
+        //CommandParameter plarge("large", "Boolean", "", "F", "", "", "",false,false); parameters.push_back(plarge);
                CommandParameter plength("length", "Number", "", "5", "", "", "",false,false); parameters.push_back(plength);
                CommandParameter ppenalty("penalty", "Number", "", "0.10", "", "", "",false,false); parameters.push_back(ppenalty);
                CommandParameter pcutoff("cutoff", "Number", "", "0.70", "", "", "",false,false); parameters.push_back(pcutoff);
@@ -164,11 +166,21 @@ MGClusterCommand::MGClusterCommand(string option) {
                        if (namefile == "not open") { abort = true; }   
                        else if (namefile == "not found") { namefile = ""; }
                        else { m->setNameFile(namefile); }
+            
+            countfile = validParameter.validFile(parameters, "count", true);
+                       if (countfile == "not open") { abort = true; }  
+                       else if (countfile == "not found") { countfile = ""; }
+            else { m->setCountTableFile(countfile); }
+            
+            if (countfile != "" && namefile != "") { m->mothurOut("Cannot have both a name file and count file. Please use one or the other."); m->mothurOutEndLine(); abort = true; }
                        
                        if ((blastfile == "")) { m->mothurOut("When executing a mgcluster command you must provide a blastfile."); m->mothurOutEndLine(); abort = true; }
                        
                        //check for optional parameter and set defaults
                        string temp;
+            temp = validParameter.validFile(parameters, "large", false);                       if (temp == "not found") { temp = "false"; }            
+                       large = m->isTrue(temp); 
+            
                        temp = validParameter.validFile(parameters, "precision", false);                if (temp == "not found") { temp = "100"; }
                        precisionLength = temp.length();
                        m->mothurConvert(temp, precision); 
@@ -199,7 +211,7 @@ MGClusterCommand::MGClusterCommand(string option) {
                        hclusterWanted = m->isTrue(temp); 
                        
                        temp = validParameter.validFile(parameters, "hard", false);                     if (temp == "not found") { temp = "T"; }
-                       hard = m->isTrue(temp);
+                       hard = m->isTrue(temp);            
                }
 
        }
@@ -211,7 +223,6 @@ MGClusterCommand::MGClusterCommand(string option) {
 //**********************************************************************************************************************
 int MGClusterCommand::execute(){
        try {
-               
                if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
                
                //read names file
@@ -225,7 +236,7 @@ int MGClusterCommand::execute(){
                time_t start;
                float previousDist = 0.00000;
                float rndPreviousDist = 0.00000; 
-               
+        
                //read blastfile - creates sparsematrices for the distances and overlaps as well as a listvector
                //must remember to delete those objects here since readBlast does not
                read = new ReadBlast(blastfile, cutoff, penalty, length, minWanted, hclusterWanted);
@@ -233,16 +244,20 @@ int MGClusterCommand::execute(){
         
         list = new ListVector(nameMap->getListVector());
         RAbundVector* rabund = NULL;
-        if(large) {
-            map<string, int> nameMapCounts = m->readNames(namefile);
-            RAbundVector* rabund = createRabund(list, nameMapCounts);
+        
+        if(countfile != "") {
+            //map<string, int> nameMapCounts = m->readNames(namefile);
+            ct = new CountTable();
+            ct->readTable(countfile);
+            createRabund(ct, list);
+            rabund = &rav;
         }else {
-            RAbundVector* rabund = new RAbundVector(list->getRAbundVector());
+            rabund = new RAbundVector(list->getRAbundVector());
         }
         
                 
                //list = new ListVector(nameMap->getListVector());
-               //RAbundVector* rabund = new RAbundVector(list->getRAbundVector());
+               //rabund = new RAbundVector(list->getRAbundVector());
                
                if (m->control_pressed) { outputTypes.clear(); delete nameMap; delete read; delete list; delete rabund; return 0; }
                
@@ -513,8 +528,8 @@ int MGClusterCommand::execute(){
                        m->mothurRemove(overlapFile);
                }
                
-               delete list; 
-               delete rabund;
+               delete list;
+               if (!large) {delete rabund;}
                listFile.close();
                sabundFile.close();
                rabundFile.close();
@@ -709,10 +724,31 @@ void MGClusterCommand::sortHclusterFiles(string unsortedDist, string unsortedOve
 
 //**********************************************************************************************************************
 
-RAbundVector MGClusterCommand::createRabund(ListVector list, map<string, int> nameMapCounts){
-    for(int i = 0; i < list->getNumBins(); i++) { 
-    
+void MGClusterCommand::createRabund(CountTable* ct, ListVector* list){
+    try {
+        //vector<string> names = ct.getNamesOfSeqs();
+
+        //for ( int i; i < ct.getNumGroups(); i++ ) {    rav.push_back( ct.getNumSeqs(names[i]) );    }
+        //return rav;
+        
+        for(int i = 0; i < list->getNumBins(); i++) { 
+           vector<string> binNames;
+           string bin = list->get(i);
+           m->splitAtComma(bin, binNames);
+           int total = 0;
+           for (int j = 0; j < binNames.size(); j++) { 
+               total += ct->getNumSeqs(binNames[j]);
+           }
+           rav.push_back(total);   
+       }
+        
+        
     }
+    catch(exception& e) {
+               m->errorOut(e, "MGClusterCommand", "createRabund");
+               exit(1);
+       }
+    
 }
 
 //**********************************************************************************************************************