- vector< vector<seqDist> > calcAverages; calcAverages.resize(matrixCalculators.size());
- for (int i = 0; i < calcAverages.size(); i++) { //initialize sums to zero.
- calcAverages[i].resize(calcDistsTotals[0][i].size());
-
- for (int j = 0; j < calcAverages[i].size(); j++) {
- calcAverages[i][j].seq1 = calcDistsTotals[0][i][j].seq1;
- calcAverages[i][j].seq2 = calcDistsTotals[0][i][j].seq2;
- calcAverages[i][j].dist = 0.0;
- }
- }
- if (mode == "average") {
- for (int thisIter = 0; thisIter < iters; thisIter++) { //sum all groups dists for each calculator
- for (int i = 0; i < calcAverages.size(); i++) { //initialize sums to zero.
- for (int j = 0; j < calcAverages[i].size(); j++) {
- calcAverages[i][j].dist += calcDistsTotals[thisIter][i][j].dist;
- if (m->debug) { m->mothurOut("[DEBUG]: Totaling for average calc: iter = " + toString(thisIter) + ", " + thisLookup[calcDistsTotals[thisIter][i][j].seq1]->getGroup() + " - " + thisLookup[calcDistsTotals[thisIter][i][j].seq2]->getGroup() + " distance = " + toString(calcDistsTotals[thisIter][i][j].dist) + ". New total = " + toString(calcAverages[i][j].dist) + ".\n"); }
- }
- }
- }
-
- for (int i = 0; i < calcAverages.size(); i++) { //finds average.
- for (int j = 0; j < calcAverages[i].size(); j++) {
- calcAverages[i][j].dist /= (float) iters;
- }
- }
- }else { //find median
- for (int i = 0; i < calcAverages.size(); i++) { //for each calc
- for (int j = 0; j < calcAverages[i].size(); j++) { //for each comparison
- vector<double> dists;
- for (int thisIter = 0; thisIter < iters; thisIter++) { //for each subsample
- dists.push_back(calcDistsTotals[thisIter][i][j].dist);
- }
- sort(dists.begin(), dists.end());
- calcAverages[i][j].dist = dists[(iters/2)];
- }
- }
- }