1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
/*
* DLibshuff.cpp
* Mothur
*
* Created by Pat Schloss on 4/8/09.
* Copyright 2009 Patrick D. Schloss. All rights reserved.
*
*/
#include "dlibshuff.h"
/***********************************************************************/
DLibshuff::DLibshuff(FullMatrix* D, int it, float step, float co) : Libshuff(D, it, step, co){
numDXs = int(cutOff / stepSize);
}
/***********************************************************************/
float DLibshuff::evaluatePair(int i, int j){
return dCalculate(i,j);
}
/***********************************************************************/
vector<vector<double> > DLibshuff::evaluateAll(){
savedMins.resize(numGroups);
vector<vector<double> > dCXYValues(numGroups);
for(int i=0;i<numGroups;i++){
savedMins[i].resize(numGroups);
dCXYValues[i].resize(numGroups);
for(int j=0;j<numGroups;j++){
if(i!=j){ dCXYValues[i][j] = dCalculate(i,j); }
savedMins[i][i] = minX;
savedMins[i][j] = minXY;
}
}
return dCXYValues;
}
/***********************************************************************/
double DLibshuff::dCalculate(int x, int y){
double sum = 0;
minX = getMinX(x);
if (m->control_pressed) { return sum; }
minXY = getMinXY(x, y);
if (m->control_pressed) { return sum; }
vector<int> nx = calcN(minX);
if (m->control_pressed) { return sum; }
vector<int> nxy = calcN(minXY);
if (m->control_pressed) { return sum; }
for(int i=0;i<numDXs;i++){
float h = (nx[i] - nxy[i]) / (float) groupSizes[x];
sum += h * h * stepSize;
}
return sum;
}
/***********************************************************************/
vector<int> DLibshuff::calcN(vector<double> minVector){
vector<int> counts(numDXs,0);
int precision = int(1 / stepSize);
for(int i=0;i<minVector.size();i++){
int bin = int (precision * minVector[i]);
if(bin < numDXs){ counts[bin]++; }
}
for(int i=1;i<numDXs;i++){
counts[i] += counts[i-1];
}
return counts;
}
/***********************************************************************/
|