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