]> git.donarmstrong.com Git - mothur.git/blobdiff - sharedmorisitahorn.cpp
This is v.1.4.0
[mothur.git] / sharedmorisitahorn.cpp
index 6ceac75dd1e928f827e1b19d6e1186c1da87b9b9..28ff4fec9f2e2ee3c8e99b0f167630152acca802 100644 (file)
@@ -10,7 +10,7 @@
 #include "sharedmorisitahorn.h"
 
 /***********************************************************************/
-EstOutput SharedMorHorn::getValues(SharedRAbundVector* shared1, SharedRAbundVector* shared2) {
+EstOutput MorHorn::getValues(vector<SharedRAbundVector*> shared) {
        try {   
                data.resize(1,0);
                
@@ -20,30 +20,28 @@ EstOutput SharedMorHorn::getValues(SharedRAbundVector* shared1, SharedRAbundVect
                morhorn = 0.0; sumSharedA = 0.0; sumSharedB = 0.0; a = 0.0; b = 0.0; d = 0.0;
                
                //get the total values we need to calculate the theta denominator sums
-               for (int i = 0; i < shared1->size(); i++) {
+               for (int i = 0; i < shared[0]->size(); i++) {
                        //store in temps to avoid multiple repetitive function calls
-                       Atotal += shared1->getAbundance(i);
-                       Btotal += shared2->getAbundance(i);
+                       Atotal += shared[0]->getAbundance(i);
+                       Btotal += shared[1]->getAbundance(i);
                }
                
                //calculate the theta denominator sums
-               for (int j = 0; j < shared1->size(); j++) {
+               for (int j = 0; j < shared[0]->size(); j++) {
                        //store in temps to avoid multiple repetitive function calls
-                       tempA = shared1->getAbundance(j);
-                       tempB = shared2->getAbundance(j);
+                       tempA = shared[0]->getAbundance(j);
+                       tempB = shared[1]->getAbundance(j);
                        
-                       //they are shared
-                       if ((tempA != 0) && (tempB != 0)) {
-                               if (Atotal != 0)        { sumSharedA = (tempA / (float)Atotal); }
-                               if (Btotal != 0)        { sumSharedB = (tempB / (float)Btotal); }
-                       
-                               a += sumSharedA * sumSharedA;
-                               b += sumSharedB * sumSharedB;
-                               d += sumSharedA * sumSharedB;
-                       }
+                       a += tempA * tempA;
+                       b += tempB * tempB;
+                       d += tempA * tempB;
                }
 
-               morhorn = (2 * d) / (float) (a + b);
+               a /= double(Atotal * Atotal);
+               b /= double(Btotal * Btotal);
+               d /= double(Atotal * Btotal);
+               
+               morhorn = (2 * d) / (a + b);
                
                if (isnan(morhorn) || isinf(morhorn)) { morhorn = 0; }
                
@@ -52,13 +50,13 @@ EstOutput SharedMorHorn::getValues(SharedRAbundVector* shared1, SharedRAbundVect
                return data;
        }
        catch(exception& e) {
-               cout << "Standard Error: " << e.what() << " has occurred in the SharedMorHorn class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               cout << "Standard Error: " << e.what() << " has occurred in the MorHorn class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
                exit(1);
        }
        catch(...) {
-               cout << "An unknown error has occurred in the SharedMorHorn class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               cout << "An unknown error has occurred in the MorHorn class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
                exit(1);
        }       
 }
 
-/***********************************************************************/
\ No newline at end of file
+/***********************************************************************/