X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mempearson.cpp;fp=mempearson.cpp;h=b39afd86f3d147f54d2e8ad9542c670955da961f;hb=7d38edc137a66a33f67f8cf55cce88331290aaf7;hp=0000000000000000000000000000000000000000;hpb=75c5a235ac3eb22e0f97d36874f4b2dcf9591f2e;p=mothur.git diff --git a/mempearson.cpp b/mempearson.cpp new file mode 100644 index 0000000..b39afd8 --- /dev/null +++ b/mempearson.cpp @@ -0,0 +1,68 @@ +/* + * mempearson.cpp + * Mothur + * + * Created by westcott on 12/17/10. + * Copyright 2010 Schloss Lab. All rights reserved. + * + */ + +#include "mempearson.h" + +/***********************************************************************/ +EstOutput MemPearson::getValues(vector shared) { + try { + data.resize(1,0); + + int nonZeroA = 0; + int nonZeroB = 0; + int numOTUS = shared[0]->getNumBins(); + + //for each otu + for (int i = 0; i < shared[0]->getNumBins(); i++) { + if (shared[0]->getAbundance(i) != 0) { nonZeroA++; } + if (shared[1]->getAbundance(i) != 0) { nonZeroB++; } + } + + double numTerm1 = 0.0; + double numTerm2 = 0.0; + double denomTerm1 = 0.0; + double denomTerm2 = 0.0; + + for (int i = 0; i < shared[0]->getNumBins(); i++) { + int Aij = shared[0]->getAbundance(i); + int Bij = shared[1]->getAbundance(i); + + if (Aij > 0) { Aij = 1; } + if (Bij > 0) { Bij = 1; } + + numTerm1 += (Aij - (nonZeroA / (float) numOTUS)); + numTerm2 += (Bij - (nonZeroB / (float) numOTUS)); + + denomTerm1 += ((Aij - (nonZeroA / (float) numOTUS)) * (Aij - (nonZeroA / (float) numOTUS))); + denomTerm2 += ((Bij - (nonZeroB / (float) numOTUS)) * (Bij - (nonZeroB / (float) numOTUS))); + } + + denomTerm1 = sqrt(denomTerm1); + denomTerm2 = sqrt(denomTerm2); + + double denom = denomTerm1 * denomTerm2; + double numerator = numTerm1 * numTerm2; + + if (denom != 0) { + data[0] = 1.0 - (numerator / denom); + }else { + data[0] = 1.0; + } + + if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; } + + return data; + } + catch(exception& e) { + m->errorOut(e, "MemPearson", "getValues"); + exit(1); + } +} +/***********************************************************************/ +