X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedbraycurtis.cpp;fp=sharedbraycurtis.cpp;h=3711ce77cbb312e5dc2ee2aba14e1856bb942d12;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/sharedbraycurtis.cpp b/sharedbraycurtis.cpp new file mode 100644 index 0000000..3711ce7 --- /dev/null +++ b/sharedbraycurtis.cpp @@ -0,0 +1,52 @@ +/* + * sharedbraycurtis.cpp + * Mothur + * + * Created by Sarah Westcott on 3/24/09. + * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved. + * + */ + +#include "sharedbraycurtis.h" + +/***********************************************************************/ +//This is used by SharedJAbund and SharedSorAbund +EstOutput BrayCurtis::getValues(vector shared) { + try { + data.resize(1,0); + + double sumSharedA, sumSharedB, sumSharedAB, tempA, tempB; + sumSharedA = 0; sumSharedB = 0; sumSharedAB = 0; + + /*Xi, Yi = abundance of the ith shared OTU in A and B + sumSharedA = the number of otus in A + sumSharedB = the sum of all shared otus in B + sumSharedAB = the sum of the minimum otus int all shared otus in AB. + */ + + for (int i = 0; i < shared[0]->getNumBins(); i++) { + //store in temps to avoid multiple repetitive function calls + tempA = shared[0]->getAbundance(i); + tempB = shared[1]->getAbundance(i); + + sumSharedA += tempA; + sumSharedB += tempB; + + //sum the min of tempA and tempB + if (tempA < tempB) { sumSharedAB += tempA; } + else { sumSharedAB += tempB; } + } + + data[0] = 1.0 - (2 * sumSharedAB) / (float)( sumSharedA + sumSharedB); + + if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; } + + return data; + } + catch(exception& e) { + m->errorOut(e, "BrayCurtis", "getValues"); + exit(1); + } +} + +/***********************************************************************/