]> git.donarmstrong.com Git - mothur.git/blobdiff - collectsharedcommand.cpp
changed how we do "smart" distancing
[mothur.git] / collectsharedcommand.cpp
index 4d0306d9809d802f5c37d06ddeb69991d2dad807..adb2aeab0fb827baa6b411c041630ebe0fe4d292 100644 (file)
@@ -240,7 +240,7 @@ int CollectSharedCommand::execute(){
                        
                input = globaldata->ginput;
                order = input->getSharedOrderVector();
-               SharedOrderVector* lastOrder = order;
+               string lastLabel = order->getLabel();
                
                //if the users enters label "0.06" and there is no "0.06" in their file use the next lowest label.
                set<string> processedLabels;
@@ -268,21 +268,25 @@ int CollectSharedCommand::execute(){
                        //you have a label the user want that is smaller than this line and the last line has not already been processed 
                        }
                        
-                       if ((anyLabelsToProcess(order->getLabel(), userLabels, "") == true) && (processedLabels.count(lastOrder->getLabel()) != 1)) {
+                       if ((anyLabelsToProcess(order->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) {
+                               delete order;
+                               order = input->getSharedOrderVector(lastLabel);
+                               
                                //create collectors curve
-                               cCurve = new Collect(lastOrder, cDisplays);
+                               cCurve = new Collect(order, cDisplays);
                                cCurve->getSharedCurve(freq);
                                delete cCurve;
                        
-                               cout << lastOrder->getLabel() << '\t' << count << endl;
-                               processedLabels.insert(lastOrder->getLabel());
-                               userLabels.erase(lastOrder->getLabel());
+                               cout << order->getLabel() << '\t' << count << endl;
+                               processedLabels.insert(order->getLabel());
+                               userLabels.erase(order->getLabel());
                        }
                        
-                       if (count != 1) { delete lastOrder; }
-                       lastOrder = order;                      
+                       
+                       lastLabel = order->getLabel();                  
                        
                        //get next line to process
+                       delete order;
                        order = input->getSharedOrderVector();
                        count++;
                }
@@ -292,24 +296,27 @@ int CollectSharedCommand::execute(){
                bool needToRun = false;
                for (it = userLabels.begin(); it != userLabels.end(); it++) {  
                        cout << "Your file does not include the label "<< *it; 
-                       if (processedLabels.count(lastOrder->getLabel()) != 1) {
-                               cout << ". I will use " << lastOrder->getLabel() << "." << endl;
+                       if (processedLabels.count(lastLabel) != 1) {
+                               cout << ". I will use " << lastLabel << "." << endl;
                                needToRun = true;
                        }else {
-                               cout << ". Please refer to " << lastOrder->getLabel() << "." << endl;
+                               cout << ". Please refer to " << lastLabel << "." << endl;
                        }
                }
                
                //run last line if you need to
                if (needToRun == true)  {
-                       cCurve = new Collect(lastOrder, cDisplays);
+                       delete order;
+                       order = input->getSharedOrderVector(lastLabel);
+
+                       cCurve = new Collect(order, cDisplays);
                        cCurve->getCurve(freq);
                        delete cCurve;
                        
-                       cout << lastOrder->getLabel() << '\t' << count << endl;
+                       cout << order->getLabel() << '\t' << count << endl;
+                       delete order;
                }
                
-               delete lastOrder;
                for(int i=0;i<cDisplays.size();i++){    delete cDisplays[i];    }       
                
                //reset groups parameter