]> git.donarmstrong.com Git - mothur.git/commitdiff
updated mgcluster to take count file
authorKathryn Iverson <kd.iverson@gmail.com>
Tue, 3 Jul 2012 18:48:49 +0000 (14:48 -0400)
committerKathryn Iverson <kd.iverson@gmail.com>
Tue, 3 Jul 2012 18:48:49 +0000 (14:48 -0400)
mgclustercommand.cpp
mgclustercommand.h

index 4ca0cdfb9af8f71338be56a9649ec4c6f8a07a87..878d6a40cfb53bc70157d9c9cc77b60097118781 100644 (file)
@@ -14,7 +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 plarge("large", "Boolean", "", "F", "", "", "",false,false); parameters.push_back(plarge);
+        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);
@@ -165,6 +166,13 @@ 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; }
                        
@@ -237,9 +245,11 @@ int MGClusterCommand::execute(){
         list = new ListVector(nameMap->getListVector());
         RAbundVector* rabund = NULL;
         
-        if(large) {
-            map<string, int> nameMapCounts = m->readNames(namefile);
-            createRabund(nameMapCounts);
+        if(countfile != "") {
+            //map<string, int> nameMapCounts = m->readNames(namefile);
+            CountTable ct = new CountTable();
+            ct.readTable(countfile);
+            createRabund(ct, list);
             rabund = &rav;
         }else {
             rabund = new RAbundVector(list->getRAbundVector());
@@ -714,14 +724,25 @@ void MGClusterCommand::sortHclusterFiles(string unsortedDist, string unsortedOve
 
 //**********************************************************************************************************************
 
-void MGClusterCommand::createRabund(map<string, int> nameMapCounts){
+void MGClusterCommand::createRabund(CountTable ct, ListVector list){
     try {
-        //RAbundVector rav;
-        map<string,int>::iterator it;
-        //it = nameMapCounts.begin();
-        //for(int i = 0; i < list->getNumBins(); i++) {   rav.push_back((*it).second); it++;    }
-        for ( it=nameMapCounts.begin(); it!=nameMapCounts.end(); it++ ) {    rav.push_back( it->second );    }
+        //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");
index ce3ffec189fa50d025a0fa0a1f39ef8faaa6da93..6f4453316a33d41cb18774d6c9b435bc563980e2 100644 (file)
@@ -18,6 +18,7 @@
 #include "hcluster.h"
 #include "rabundvector.hpp"
 #include "sabundvector.hpp"
+#include "counttable.h"
 
 /**********************************************************************/
 
@@ -51,7 +52,7 @@ private:
        vector<seqDist> overlapMatrix;
        vector<string> outputNames;
        
-       string blastfile, method, namefile, overlapFile, distFile, outputDir;
+       string blastfile, method, namefile, countfile, overlapFile, distFile, outputDir;
        ofstream sabundFile, rabundFile, listFile;
        double cutoff;
        float penalty;
@@ -62,7 +63,7 @@ private:
        ListVector* mergeOPFs(map<string, int>, float);
        void sortHclusterFiles(string, string);
        vector<seqDist> getSeqs(ifstream&);
-    void createRabund(map<string, int>);
+    void createRabund(CountTable);
 
 };