]> git.donarmstrong.com Git - mothur.git/blobdiff - simpson.cpp
working on pam
[mothur.git] / simpson.cpp
index d260800a9f80368295c2c1a099dd0a3dd3af8a30..edc35bd6c04f42c3d687dce377df6b6442e36a18 100644 (file)
@@ -19,8 +19,8 @@ EstOutput Simpson::getValues(SAbundVector* rank){
                double ci = 0;
        
                double maxRank = (double)rank->getMaxRank();
-               int sampled = rank->getNumSeqs();
-               int sobs = rank->getNumBins();
+               double sampled = (double)rank->getNumSeqs();
+               double sobs = (double)rank->getNumBins();
        
                double firstTerm = 0;
                double secondTerm = 0;
@@ -28,19 +28,19 @@ EstOutput Simpson::getValues(SAbundVector* rank){
                if(sobs != 0){
                        double simnum=0.0000;
                
-                       for(int i=1;i<=maxRank;i++){
+                       for(unsigned long long i=1;i<=maxRank;i++){
                                simnum += (double)(rank->get(i)*i*(i-1));
                        }
+                       
+                       simpson = simnum / (sampled*(sampled-1));
                
-                       simpson = simnum / (double)(sampled*(sampled-1));
-               
-                       for(int i=1;i<=maxRank;i++){
+                       for(unsigned long long i=1;i<=maxRank;i++){
                                double piI = (double) i / (double)sampled;
                                firstTerm += rank->get(i) * pow(piI, 3);
                                secondTerm += rank->get(i) * pow(piI, 2);
                        }
                
-                       double var = (4.0 / (double)sampled) * (firstTerm - secondTerm*secondTerm);
+                       double var = (4.0 / sampled) * (firstTerm - secondTerm*secondTerm);
                        ci = 1.95 * pow(var, 0.5);
                }
        
@@ -58,7 +58,7 @@ EstOutput Simpson::getValues(SAbundVector* rank){
                return data;
        }
        catch(exception& e) {
-               errorOut(e, "Simpson", "getValues");
+               m->errorOut(e, "Simpson", "getValues");
                exit(1);
        }
 }