*/
#include "rarefact.h"
-#include "ordervector.hpp"
+//#include "ordervector.hpp"
/***********************************************************************/
for(int i=0;i<displays.size();i++){
displays[i]->reset();
}
+
+ delete lookup;
+ delete rank;
}
for(int i=0;i<displays.size();i++){
displays[i]->close();
}
+ delete rcd;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the Rarefact class function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "Rarefact", "getCurve");
exit(1);
}
}
void Rarefact::getSharedCurve(int increment = 1, int nIters = 1000){
try {
- globaldata = GlobalData::getInstance();
SharedRarefactionCurveData* rcd = new SharedRarefactionCurveData();
+ label = lookup[0]->getLabel();
+
//register the displays
for(int i=0;i<displays.size();i++){
rcd->registerDisplay(displays[i]);
}
-
+
+ //if jumble is false all iters will be the same
+ if (globaldata->jumble == false) { nIters = 1; }
+
for(int iter=0;iter<nIters;iter++){
- //clear out old values for new iter
- lookup.clear();
- //create and initialize vector of sharedvectors, one for each group
- for (int i = 0; i < globaldata->gGroupmap->getNumGroups(); i++) {
- SharedRAbundVector* temp = new SharedRAbundVector(sharedorder->getNumBins());
- temp->setLabel(sharedorder->getLabel());
- temp->setGroup(globaldata->gGroupmap->namesOfGroups[i]);
- lookup.push_back(temp);
- }
-
for(int i=0;i<displays.size();i++){
displays[i]->init(label);
}
-
- //sample all the members
- for(int i=0;i<numSeqs;i++){
- //get first sample
- individual chosen = sharedorder->get(i);
- int abundance;
-
- //set info for sharedvector in chosens group
- for (int j = 0; j < lookup.size(); j++) {
- if (chosen.group == lookup[j]->getGroup()) {
- abundance = lookup[j]->getAbundance(chosen.bin);
- lookup[j]->set(chosen.bin, (abundance + 1), chosen.group);
- break;
- }
- }
+
+ if (globaldata->jumble == true) {
+ //randomize the groups
+ random_shuffle(lookup.begin(), lookup.end());
}
- //randomize the groups
- random_shuffle(lookup.begin(), lookup.end());
-
+ //make merge the size of lookup[0]
+ SharedRAbundVector* merge = new SharedRAbundVector(lookup[0]->size());
+
+ //make copy of lookup zero
+ for(int i = 0; i<lookup[0]->size(); i++) {
+ merge->set(i, lookup[0]->getAbundance(i), "merge");
+ }
+
+ vector<SharedRAbundVector*> subset;
//send each group one at a time
for (int k = 0; k < lookup.size(); k++) {
- rcd->updateSharedData(lookup[0], lookup[k], k+1, numGroupComb);
- mergeVectors(lookup[0], lookup[k]);
+ subset.clear(); //clears out old pair of sharedrabunds
+ //add in new pair of sharedrabunds
+ subset.push_back(merge); subset.push_back(lookup[k]);
+
+ rcd->updateSharedData(subset, k+1, numGroupComb);
+ mergeVectors(merge, lookup[k]);
}
//resets output files
for(int i=0;i<displays.size();i++){
displays[i]->reset();
}
+
+ delete merge;
}
for(int i=0;i<displays.size();i++){
displays[i]->close();
}
-
+
+ delete rcd;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the Rarefact class function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "Rarefact", "getSharedCurve");
exit(1);
}
-
}
/**************************************************************************************/
try{
for (int k = 0; k < shared1->size(); k++) {
//merge new species into shared1
- if ((shared1->getAbundance(k) == 0) && (shared2->getAbundance(k) != 0)) {
- shared1->set(k, shared2->getAbundance(k), "combo"); //set to 'combo' since this vector now contains multiple groups
- }
+ shared1->set(k, (shared1->getAbundance(k) + shared2->getAbundance(k)), "combo"); //set to 'combo' since this vector now contains multiple groups
}
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function mergeVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "Rarefact", "mergeVectors");
exit(1);
}
- catch(...) {
- cout << "An unknown error has occurred in the Rarefact class function mergeVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
}