X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedanderbergs.cpp;fp=sharedanderbergs.cpp;h=77888b50b456abf5bb16222ec165a55c4b4e37b4;hb=2657127a3e1f3b5463f2b3a3b49bc19843f5c9d2;hp=0000000000000000000000000000000000000000;hpb=d345542d7f1ed7cb3a23704f7f6685699d78421a;p=mothur.git diff --git a/sharedanderbergs.cpp b/sharedanderbergs.cpp new file mode 100644 index 0000000..77888b5 --- /dev/null +++ b/sharedanderbergs.cpp @@ -0,0 +1,52 @@ +/* + * sharedanderberg.cpp + * Mothur + * + * Created by Sarah Westcott on 3/23/09. + * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved. + * + */ + +#include "sharedanderbergs.h" + +/***********************************************************************/ + +EstOutput SharedAnderberg::getValues(SharedRAbundVector* shared1, SharedRAbundVector* shared2) { + try { + int S1, S2, S12, tempA, tempB; + S1 = 0; S2 = 0; S12 = 0; tempA = 0; tempB = 0; + + /*S1, S2 = number of OTUs observed or estimated in A and B + S12=number of OTUs shared between A and B */ + + data.resize(1,0); + + for (int i = 0; i < shared1->size(); i++) { + //store in temps to avoid multiple repetitive function calls + tempA = shared1->getAbundance(i); + tempB = shared2->getAbundance(i); + + if (tempA != 0) { S1++; } + if (tempB != 0) { S2++; } + + //they are shared + if ((tempA != 0) && (tempB != 0)) { S12++; } + } + + data[0] = S12 / ((float)((2 * S1) + (2 * S2) - (3 * S12))); + + if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; } + + return data; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedAnderberg class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedAnderberg class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} + +/***********************************************************************/