X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=collect.cpp;h=9a89020efe91f8bdd2733a3de553611e86ee6da3;hp=379424c9155d7dcee7e0535644652ef852f19481;hb=615301e57c25e241356a9c2380648d117709458d;hpb=5a86e9e5a5a9e061e17b3ae64fb8881f14e53b8a diff --git a/collect.cpp b/collect.cpp index 379424c..9a89020 100644 --- a/collect.cpp +++ b/collect.cpp @@ -24,7 +24,9 @@ int Collect::getCurve(float percentFreq = 0.01){ } //convert freq percentage to number - int increment = numSeqs * percentFreq; + int increment = 1; + if (percentFreq < 1.0) { increment = numSeqs * percentFreq; } + else { increment = percentFreq; } for(int i=0;i lookup; vector subset; //create and initialize vector of sharedvectors, one for each group - for (int i = 0; i < globaldata->Groups.size(); i++) { + vector mGroups = m->getGroups(); + for (int i = 0; i < mGroups.size(); i++) { SharedRAbundVector* temp = new SharedRAbundVector(sharedorder->getNumBins()); temp->setLabel(sharedorder->getLabel()); - temp->setGroup(globaldata->Groups[i]); - temp->setGroupIndex(globaldata->gGroupmap->groupIndex[globaldata->Groups[i]]); - lookup.push_back(temp); + temp->setGroup(mGroups[i]); + lookup.push_back(temp); } - + SharedCollectorsCurveData* ccd = new SharedCollectorsCurveData(); //initialize labels for output //makes 'uniqueAB uniqueAC uniqueBC' if your groups are A, B, C getGroupComb(); - 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 + bool hasLciHci = displays[i]->hasLciHci(); + groupLabel = ""; + for (int s = 0; s < groupComb.size(); s++) { + if (hasLciHci) { groupLabel = groupLabel + label + groupComb[s] + "\t" + label + groupComb[s] + "lci\t" + label + groupComb[s] + "hci\t"; } + else{ groupLabel = groupLabel + label + groupComb[s] + "\t"; } + } + + string groupLabelAll = groupLabel + label + "all\t"; 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 = numSeqs * percentFreq; + int increment = 1; + if (percentFreq < 1.0) { increment = numSeqs * percentFreq; } + else { increment = percentFreq; } //sample all the members for(int i=0;iget(i); int abundance; - + //set info for sharedvector in chosens group for (int j = 0; j < lookup.size(); j++) { if (chosen.group == lookup[j]->getGroup()) { @@ -127,17 +131,27 @@ try { //how many comparisons to make i.e. for group a, b, c = ab, ac, bc. int n = 1; + bool pair = true; 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++) { 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()); + + //load subset with rest of lookup for those calcs that need everyone to calc for a pair + for (int w = 0; w < lookup.size(); w++) { + if ((w != k) && (w != l)) { subset.push_back(lookup[w]); } + } + + ccd->updateSharedData(subset, i+1, m->getNumGroups(), pair); } n++; } + //if this is a calculator that can do multiples then do them - ccd->updateSharedData(lookup, i+1, globaldata->Groups.size()); + pair = false; + ccd->updateSharedData(lookup, i+1, m->getNumGroups(), pair); + } totalNumSeq = i+1; } @@ -146,19 +160,27 @@ try { if(numSeqs % increment != 0){ //how many comparisons to make i.e. for group a, b, c = ab, ac, bc. int n = 1; + bool pair = true; 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++) { 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()); + + //load subset with rest of lookup for those calcs that need everyone to calc for a pair + for (int w = 0; w < lookup.size(); w++) { + if ((w != k) && (w != l)) { subset.push_back(lookup[w]); } + } + + ccd->updateSharedData(subset, totalNumSeq, m->getNumGroups(), pair); } n++; } //if this is a calculator that can do multiples then do them - ccd->updateSharedData(lookup, totalNumSeq, globaldata->Groups.size()); + pair = false; + ccd->updateSharedData(lookup, totalNumSeq, m->getNumGroups(), pair); } - + //resets output files for(int i=0;ireset(); @@ -187,9 +209,10 @@ void Collect::getGroupComb() { numGroupComb = 0; 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]; + vector mGroups = m->getGroups(); + for (int i = 0; i < (m->getNumGroups() - 1); i++) { + for (int l = n; l < m->getNumGroups(); l++) { + group = mGroups[i] + mGroups[l]; groupComb.push_back(group); numGroupComb++; }