#include "sharedmorisitahorn.h"
/***********************************************************************/
-EstOutput SharedMorHorn::getValues(SharedRAbundVector* shared1, SharedRAbundVector* shared2) {
+EstOutput MorHorn::getValues(vector<SharedRAbundVector*> shared) {
try {
data.resize(1,0);
- int Atotal, Btotal, tempA, tempB;
+ double Atotal, Btotal, tempA, tempB;
Atotal = 0; Btotal = 0;
- float morhorn, sumSharedA, sumSharedB, a, b, d;
+ double morhorn, sumSharedA, sumSharedB, a, b, d;
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]->getNumBins(); 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++) {
+ //calculate the denominator sums
+ for (int j = 0; j < shared[0]->getNumBins(); 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);
+ float relA = tempA / Atotal;
+ float relB = tempB / Btotal;
- //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 += relA * relA;
+ b += relB * relB;
+ d += relA * relB;
}
- morhorn = (2 * d) / (float) (a + b);
-
- if (isnan(morhorn) || isinf(morhorn)) { morhorn = 0; }
+ morhorn = 1- (2 * d) / (a + b);
+
+ if (isnan(morhorn) || isinf(morhorn)) { morhorn = 1; }
data[0] = morhorn;
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";
+ m->errorOut(e, "MorHorn", "getValues");
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";
- exit(1);
- }
}
-/***********************************************************************/
\ No newline at end of file
+/***********************************************************************/