]> git.donarmstrong.com Git - mothur.git/commitdiff
Merge remote-tracking branch 'origin/master'
authorSarah Westcott <mothur.westcott@gmail.com>
Tue, 26 Jun 2012 15:27:14 +0000 (11:27 -0400)
committerSarah Westcott <mothur.westcott@gmail.com>
Tue, 26 Jun 2012 15:27:14 +0000 (11:27 -0400)
mgclustercommand.cpp
mgclustercommand.h

index 870536d4640e5a0de07d24d4fd8799e218359a34..4ca0cdfb9af8f71338be56a9649ec4c6f8a07a87 100644 (file)
@@ -14,6 +14,7 @@ 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 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);
@@ -169,6 +170,9 @@ MGClusterCommand::MGClusterCommand(string option) {
                        
                        //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 +203,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 +215,6 @@ MGClusterCommand::MGClusterCommand(string option) {
 //**********************************************************************************************************************
 int MGClusterCommand::execute(){
        try {
-               
                if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
                
                //read names file
@@ -224,15 +227,27 @@ int MGClusterCommand::execute(){
                string tag = "";
                time_t start;
                float previousDist = 0.00000;
-               float rndPreviousDist = 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);
                read->read(nameMap);
-               
-               list = new ListVector(nameMap->getListVector());
-               RAbundVector* rabund = new RAbundVector(list->getRAbundVector());
+        
+        list = new ListVector(nameMap->getListVector());
+        RAbundVector* rabund = NULL;
+        
+        if(large) {
+            map<string, int> nameMapCounts = m->readNames(namefile);
+            createRabund(nameMapCounts);
+            rabund = &rav;
+        }else {
+            rabund = new RAbundVector(list->getRAbundVector());
+        }
+        
+                
+               //list = new ListVector(nameMap->getListVector());
+               //rabund = new RAbundVector(list->getRAbundVector());
                
                if (m->control_pressed) { outputTypes.clear(); delete nameMap; delete read; delete list; delete rabund; return 0; }
                
@@ -503,8 +518,8 @@ int MGClusterCommand::execute(){
                        m->mothurRemove(overlapFile);
                }
                
-               delete list; 
-               delete rabund;
+               delete list;
+               if (!large) {delete rabund;}
                listFile.close();
                sabundFile.close();
                rabundFile.close();
@@ -699,7 +714,22 @@ void MGClusterCommand::sortHclusterFiles(string unsortedDist, string unsortedOve
 
 //**********************************************************************************************************************
 
+void MGClusterCommand::createRabund(map<string, int> nameMapCounts){
+    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 );    }
+        //return rav;
+    }
+    catch(exception& e) {
+               m->errorOut(e, "MGClusterCommand", "createRabund");
+               exit(1);
+       }
+    
+}
 
-
+//**********************************************************************************************************************
 
 
index ea2c1de8603d746277017d8b557fcc5171c9af39..ce3ffec189fa50d025a0fa0a1f39ef8faaa6da93 100644 (file)
@@ -47,6 +47,7 @@ private:
        HCluster* hcluster;
        ListVector* list;
        ListVector oldList;
+    RAbundVector rav;
        vector<seqDist> overlapMatrix;
        vector<string> outputNames;
        
@@ -55,12 +56,13 @@ private:
        double cutoff;
        float penalty;
        int precision, length, precisionLength;
-       bool abort, minWanted, hclusterWanted, merge, hard;
+       bool abort, minWanted, hclusterWanted, merge, hard, large;
        
        void printData(ListVector*);
        ListVector* mergeOPFs(map<string, int>, float);
        void sortHclusterFiles(string, string);
        vector<seqDist> getSeqs(ifstream&);
+    void createRabund(map<string, int>);
 
 };