X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedthetayc.cpp;fp=sharedthetayc.cpp;h=2567110a79fde8ef9499c048927b246b49109ccd;hb=fd00cd216d3a38ccea22eae258e601df64218b05;hp=1357cb611b407319de5c093ca2d0e99e14be7ead;hpb=477e76a8a79b60f6cd4253324dd830bdea25e3e9;p=mothur.git diff --git a/sharedthetayc.cpp b/sharedthetayc.cpp index 1357cb6..2567110 100644 --- a/sharedthetayc.cpp +++ b/sharedthetayc.cpp @@ -14,10 +14,13 @@ EstOutput ThetaYC::getValues(SharedRAbundVector* shared1, SharedRAbundVector* sh 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++) { @@ -29,21 +32,14 @@ EstOutput ThetaYC::getValues(SharedRAbundVector* shared1, SharedRAbundVector* sh //calculate the theta denominator sums for (int j = 0; j < shared1->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 = shared1->getAbundance(j) / (float)Atotal; + relB = shared2->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; }