X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedthetayc.cpp;h=45dce49ce0a1185c1558068bc27e15be87f03fcb;hb=905cc2b0bd18c5ce611b048d785e93859865a5ea;hp=ad2e1c574302b678f9d503dc235ef3b5a6b38db2;hpb=25cde7ff05bbe741da1712f2c740e0bc8706e523;p=mothur.git diff --git a/sharedthetayc.cpp b/sharedthetayc.cpp index ad2e1c5..45dce49 100644 --- a/sharedthetayc.cpp +++ b/sharedthetayc.cpp @@ -10,40 +10,36 @@ #include "sharedthetayc.h" /***********************************************************************/ -EstOutput SharedThetaYC::getValues(SharedRAbundVector* shared1, SharedRAbundVector* shared2) { +EstOutput ThetaYC::getValues(vector shared) { try { data.resize(1,0); - int Atotal, Btotal, tempA, tempB; - Atotal = 0; Btotal = 0; - float thetaYC, sumSharedA, sumSharedB, a, b, d; - thetaYC = 0.0; sumSharedA = 0.0; sumSharedB = 0.0; a = 0.0; b = 0.0; d = 0.0; + int Atotal = 0; + int Btotal = 0; + float thetaYC = 0; + float relA = 0; + float relB = 0; + float a = 0; + float b = 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); - - //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; - } + relA = shared[0]->getAbundance(j) / (float)Atotal; + relB = shared[1]->getAbundance(j) / (float)Btotal; + + a += relA * relB; + b += pow((relA-relB),2); } - thetaYC = d / (float) (a + b - d); + thetaYC = a / (float) (b+a); if (isnan(thetaYC) || isinf(thetaYC)) { thetaYC = 0; } @@ -52,13 +48,9 @@ EstOutput SharedThetaYC::getValues(SharedRAbundVector* shared1, SharedRAbundVect return data; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedThetaYC class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "ThetaYC", "getValues"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedThetaYC class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } } /***********************************************************************/