X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=collect.cpp;h=fa6f677a3be5c5f9d0e535acdc870aaae226c016;hb=f07bf12e0d04340698aff7a36d2fee7c959ffe59;hp=80ad9183337260d83301ced05c99e6934eaf9991;hpb=5e7c1cf6a6dd289a90d27c0eef7eb4675b5e17b7;p=mothur.git diff --git a/collect.cpp b/collect.cpp index 80ad918..fa6f677 100644 --- a/collect.cpp +++ b/collect.cpp @@ -9,10 +9,9 @@ #include "collect.h" - /***********************************************************************/ -void Collect::getCurve(int increment = 1){ +int Collect::getCurve(float percentFreq = 0.01){ try { RAbundVector* lookup = new RAbundVector(order->getNumBins()); SAbundVector* rank = new SAbundVector(order->getMaxRank()+1); @@ -22,9 +21,17 @@ void Collect::getCurve(int increment = 1){ for(int i=0;iregisterDisplay(displays[i]); //adds a display[i] to cdd displays[i]->init(label); //sets displays label - } + } + + //convert freq percentage to number + int increment = 1; + if (percentFreq < 1.0) { increment = numSeqs * percentFreq; } + else { increment = percentFreq; } + for(int i=0;icontrol_pressed) { delete lookup; delete rank; delete ccd; return 1; } + int binNumber = order->get(i); int abundance = lookup->get(binNumber); @@ -47,30 +54,32 @@ void Collect::getCurve(int increment = 1){ for(int i=0;ireset(); } + + delete lookup; + delete rank; + delete ccd; + + return 0; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the Collect class Function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); + m->errorOut(e, "Collect", "getCurve"); + exit(1); } - catch(...) { - cout << "An unknown error has occurred in the Collect class function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - } /***********************************************************************/ -void Collect::getSharedCurve(int increment = 1){ +int Collect::getSharedCurve(float percentFreq = 0.01){ try { - globaldata = GlobalData::getInstance(); + globaldata = GlobalData::getInstance(); vector lookup; + vector subset; //create and initialize vector of sharedvectors, one for each group - for (int i = 0; i < globaldata->gGroupmap->getNumGroups(); i++) { + for (int i = 0; i < globaldata->Groups.size(); i++) { SharedRAbundVector* temp = new SharedRAbundVector(sharedorder->getNumBins()); temp->setLabel(sharedorder->getLabel()); - temp->setGroup(globaldata->gGroupmap->namesOfGroups[i]); - temp->setGroupIndex(globaldata->gGroupmap->groupIndex[globaldata->gGroupmap->namesOfGroups[i]]); + temp->setGroup(globaldata->Groups[i]); + temp->setGroupIndex(globaldata->gGroupmap->groupIndex[globaldata->Groups[i]]); lookup.push_back(temp); } @@ -79,92 +88,118 @@ try { //initialize labels for output //makes 'uniqueAB uniqueAC uniqueBC' if your groups are A, B, C getGroupComb(); - groupLabel = ""; + groupLabel = ""; for (int s = 0; s < groupComb.size(); s++) { groupLabel = groupLabel + label + groupComb[s] + "\t"; } - + + //for multi displays + string groupLabelAll = groupLabel + label + "all\t"; + for(int i=0;iregisterDisplay(displays[i]); //adds a display[i] to cdd - displays[i]->init(groupLabel); + if ((displays[i]->isCalcMultiple() == true) && (displays[i]->getAll() == true)) { displays[i]->init(groupLabelAll); } + else { displays[i]->init(groupLabel); } } + //convert freq percentage to number + int increment = 1; + if (percentFreq < 1.0) { increment = numSeqs * percentFreq; } + else { increment = percentFreq; } + //sample all the members for(int i=0;icontrol_pressed) { for (int j = 0; j < lookup.size(); j++) { delete lookup[j]; } delete ccd; return 1; } + //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 (chosen.group == lookup[j]->getGroup()) { + abundance = lookup[j]->getAbundance(chosen.bin); + lookup[j]->set(chosen.bin, (abundance + 1), chosen.group); + break; + } } - + //calculate at 0 and the given increment if((i == 0) || (i+1) % increment == 0){ - //randomize group order - if (globaldata->getJumble() == "1") { random_shuffle(lookup.begin(), lookup.end()); } - //how many comparisons to make i.e. for group a, b, c = ab, ac, bc. + + //how many comparisons to make i.e. for group a, b, c = ab, ac, bc. + int n = 1; for (int k = 0; k < (lookup.size() - 1); k++) { // pass cdd each set of groups to commpare for (int l = n; l < lookup.size(); l++) { - ccd->updateSharedData(lookup[k], lookup[l], i+1, globaldata->gGroupmap->namesOfGroups.size()); + subset.clear(); //clear out old pair of sharedrabunds + //add new pair of sharedrabund vectors + subset.push_back(lookup[k]); subset.push_back(lookup[l]); + ccd->updateSharedData(subset, i+1, globaldata->Groups.size()); } n++; } + //if this is a calculator that can do multiples then do them + ccd->updateSharedData(lookup, i+1, globaldata->Groups.size()); } totalNumSeq = i+1; } - //calculate last line if you haven't already + //calculate last label if you haven't already if(numSeqs % increment != 0){ //how many comparisons to make i.e. for group a, b, c = ab, ac, bc. int n = 1; for (int k = 0; k < (lookup.size() - 1); k++) { // pass cdd each set of groups to commpare for (int l = n; l < lookup.size(); l++) { - ccd->updateSharedData(lookup[k], lookup[l], totalNumSeq, globaldata->gGroupmap->namesOfGroups.size()); + subset.clear(); //clear out old pair of sharedrabunds + //add new pair of sharedrabund vectors + subset.push_back(lookup[k]); subset.push_back(lookup[l]); + ccd->updateSharedData(subset, totalNumSeq, globaldata->Groups.size()); } n++; } + //if this is a calculator that can do multiples then do them + ccd->updateSharedData(lookup, totalNumSeq, globaldata->Groups.size()); } //resets output files for(int i=0;ireset(); } + + //memory cleanup + delete ccd; + for (int i = 0; i < lookup.size(); i++) { + delete lookup[i]; + } + + return 0; + } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the Collect class Function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); + m->errorOut(e, "Collect", "getSharedCurve"); + exit(1); } - catch(...) { - cout << "An unknown error has occurred in the Collect class function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - } /**************************************************************************************/ void Collect::getGroupComb() { - string group; + string group; - numGroupComb = 0; + numGroupComb = 0; - int n = 1; - for (int i = 0; i < (globaldata->gGroupmap->getNumGroups() - 1); i++) { - for (int l = n; l < globaldata->gGroupmap->getNumGroups(); l++) { - group = globaldata->gGroupmap->namesOfGroups[i] + globaldata->gGroupmap->namesOfGroups[l]; - groupComb.push_back(group); - numGroupComb++; - } - n++; - } + int n = 1; + for (int i = 0; i < (globaldata->Groups.size() - 1); i++) { + for (int l = n; l < globaldata->Groups.size(); l++) { + group = globaldata->Groups[i] + globaldata->Groups[l]; + groupComb.push_back(group); + numGroupComb++; + } + n++; + } } -/**************************************************************************************/ \ No newline at end of file +/**************************************************************************************/