- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function numNZ. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function numNZ. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double VecCalc::numPos(vector<double> vec){
- try {
- double numPos = 0;
- for(int i = 0 ; i < vec.size(); i++)
- if(vec.at(i) > 0)
- numPos++;
- return numPos;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function numPos. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function numPos. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double VecCalc::findMaxDiff(vector<double> vec1, vector<double> vec2){
- try {
- double maxDiff = -10000000000.0;
- for(int i = 0; i < vec1.size(); i++)
- if(fabs(vec1.at(i)-vec2.at(i)) > maxDiff)
- maxDiff = fabs(vec1.at(i)-vec2.at(i));
- return maxDiff;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function findMaxDiff. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function findMaxDiff. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double VecCalc::findDStat(vector<double> vec1, vector<double> vec2, double num){
- try {
- double mDiff = findMaxDiff(vec1, vec2);
- return (mDiff+.5)/num;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function findDStat. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function findDStat. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<int> VecCalc::findQuartiles(vector<double> vec){
- try {
- vector<int> quartiles;
- double max = vec.at(vec.size()-1);
- double r1 = max/4;
- double r2 = max*3/4;
- bool r1found = false;
- bool r2found = false;
- for(int i = 0; i < vec.size(); i++)
- {
- if(vec.at(i) > r1 && !r1found)
- {
- quartiles.push_back(i);
- r1found = true;
- }
- if(vec.at(i) > r2 && !r2found)
- {
- quartiles.push_back(i);
- i = vec.size();
- }
- }
- return quartiles;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function findQuartiles. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function findQuartiles. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::add(vector<double> vec, double x){
- try {
- vector<double> newVec;
- for(int i = 0; i < vec.size(); i++)
- newVec.push_back(vec.at(i)+x);
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function add. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function add. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::multiply(vector<double> vec, double x){
- try {
- vector<double> newVec;
- for(int i = 0; i < vec.size(); i++)
- newVec.push_back(vec.at(i)*x);
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function multiply. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function multiply. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::power(vector<double> vec, double p){
- try {
- vector<double> newVec;
- for(int i = 0; i < vec.size(); i++)
- newVec.push_back(pow(vec.at(i), p));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function power. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function power. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::addVecs(vector<double> vec1, vector<double> vec2) //Vectors must be the same size.
-{ try {
- vector<double> newVec;
- for(int i = 0; i < vec1.size(); i++)
- newVec.push_back(vec1.at(i)+vec2.at(i));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function addVecs. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function addVecs. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::multVecs(vector<double> vec1, vector<double> vec2) //Vectors must be the same size.
-{ try {
- vector<double> newVec;
- for(int i = 0; i < vec1.size(); i++)
- newVec.push_back(vec1.at(i)*vec2.at(i));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function multVecs. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function multVecs. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::remDup(vector<double> vec){
- try {
- vector<double> newVec;
- newVec.push_back(vec.at(0));
- for(int i = 1; i < vec.size(); i++)
- if(vec.at(i) != vec.at(i-1))
- newVec.push_back(vec.at(i));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function remDup. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function remDup. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::genCVec(vector<double> vec1){
- try {
- vector<double> vec2;
- double sum = 0;
- for(int i = 0; i < vec1.size(); i++)
- {
- sum += vec1.at(i);
- vec2.push_back(sum);
- }
- return vec2;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function genCVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function genCVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::genRelVec(vector<double> vec){
- try {
- vector<double> newVec;
- double sum = sumElements(vec);
- for(int i = 0; i < vec.size(); i++)
- newVec.push_back(vec.at(i)/sum);
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function genRelVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function genRelVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::genDiffVec(vector<double> vec1, vector<double> vec2){
- try {
- vector<double> newVec;
- for(int i = 0; i < vec1.size(); i++)
- newVec.push_back(vec1.at(i)-vec2.at(i));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function genDiffVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function genDiffVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::genCSVec(vector<double> vec){
- try {
- vector<double> newVec;
- double curInd = vec.at(vec.size()-1);
- double sumSpec = 0;
- double cSumSpec = 0;
- for(int i = vec.size()-1; i >= 0; i--)
- {
- if(vec.at(i) == curInd)
- sumSpec++;
- else
- {
- cSumSpec += sumSpec;
- newVec.push_back(cSumSpec);
- sumSpec = 1;
- curInd = vec.at(i);
- }
- if(i == 0)
- newVec.push_back(cSumSpec + sumSpec);
- }
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function genCSVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function genCSVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::genTotVec(vector<vector<double> > vec){
- try {
- vector<double> newVec = vec.at(0);
- for(int i = 1; i < vec.size(); i++)
- newVec = addVecs(newVec, vec.at(i));
- return newVec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function genTotVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function genTotVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<double> VecCalc::quicksort(vector<double> vec){
- try {
- sort(vec.rbegin(), vec.rend());
- return vec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function quicksort. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function quicksort. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<vector<double> > VecCalc::gen2DVec(vector<double> vec, int div, int type){
- try {
- vector<vector<double> > vec2D;
- int gap = vec.size()/div;
- for(int i = 0; i < div; i++)
- {
- vector<double> inVec;
- for(int j = 0; j < gap; j++)
- if(type == 0)
- inVec.push_back(vec.at(j + i*gap)); //Rows
- else
- inVec.push_back(vec.at(i + j*div)); //Columns
- vec2D.push_back(inVec);
- }
- return vec2D;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function gen2DVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function gen2DVec. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-vector<string> VecCalc::getSData(char name[]){
- try {
- vector<string> vec;
- string data;
- ifstream file(name);
- if(file.is_open())
- {
- while(file >> data)
- vec.push_back(data);
- file.close();
- }
- return vec;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the VecCalc class Function getSData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the VecCalc class function getSData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-
-/***********************************************************************/
-void BrokenStick::doBStick(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- vec = vecCalc.quicksort(vec);
- double numInd = vecCalc.sumElements(vec);
- double numSpec = vecCalc.numNZ(vec);
- vector<double> cObsVec = vecCalc.genCVec(vec);
- vector<double> cExpVec;
- vec = vecCalc.power(vec, -1);
- double sumExp = 0;
- for(int i = 0; i < numSpec; i++)
- {
- double n = 0;
- for(int j = i; j < numSpec; j++)
- n += 1/(double)(j+1);
-
- sumExp += numInd/numSpec*n;
- cExpVec.push_back(sumExp);
- }
-
- //Statistical analysis
- double maxDiff = vecCalc.findMaxDiff(cObsVec, cExpVec);
- double DStatistic = maxDiff/numInd;
-
- cout << "D-Statistic = " << DStatistic << "\n";
- if(vec.size() > 30)
- cout << "Critical value for 95% confidence interval = " << .886/sqrt(vec.size()) << "\n";
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the BrokenStick class Function doBStick. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the BrokenStick class function doBStick. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-
-/***********************************************************************/
-double kEq(double k, double spec)
-{
- return k/(1-k)*pow(1-k, spec)/(1-pow(1-k, spec));
-}
-/***********************************************************************/
-/*void GeometricSeries::doGeomTest(vector<double> vec)//vec = the data vector
-{ try {
- VecCalc vecCalc;
- vec = vecCalc.quicksort(vec);//Sorts vec
- double numInd = vecCalc.sumElements(vec);//numInd = The total number of individuals in the data set.
- double numSpec = vecCalc.numNZ(vec);//numSpec = the number of nonzero elements in the data set.
- double min = -1.0*vecCalc.findMax(vecCalc.multiply(vec, -1));
- double k = .5;
- double step = .49999;
- while(fabs(min - numInd*kEq(k, numSpec)) > .0001)//This uses a binary search to find the value of k.
- {
- if(numInd*kEq(k, numSpec) > min)
- k += step;
- else
- k -= step;
- step /= 2;
- }
- cout << "k = " << k << "\n";
- double cK = 1/(1-pow(1-k, numSpec));
-
- vector<double> cObsVec = vecCalc.genCVec(vec);
- vector<double> cExpVec;
- double sumExp = 0;
- for(int i = 0; i < vec.size(); i++)
- {
- sumExp += numInd*cK*k*pow(1-k, i);
- cExpVec.push_back(sumExp);
- }
- double maxDiff = vecCalc.findMaxDiff(cObsVec, cExpVec);
- double DStatistic = maxDiff/numInd;
-
- //Statistical Analysis
- cout << "D-Statistic = " << DStatistic << "\n";
- if(vec.size() > 30)
- cout << "Critical value for 95% confidence interval = " << .886/sqrt(vec.size()) << "\n";
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the GeometricSeries class Function doGeomTest. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the GeometricSeries class function doGeomTest. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}*/
-
-/***********************************************************************/
-void Jackknifing::doJK(vector<double> vec, double cols)//vec = the data vector if the data table was read left-to-right, top-to-bottom. cols = The number of columns in the data table.
-{ try {
- VecCalc vecCalc;
- SSBPDiversityIndices ssbp;
- double rows = vec.size()/cols;
- vector<vector<double> > species = vecCalc.gen2DVec(vec, rows, 0);//converts vec into a 2 dimensional vector
- vector<double> sumRows;
- vector<double> pVals;
-
- for(int i = 0; i < rows; i++)
- sumRows.push_back(vecCalc.sumElements(species.at(i)));
- double st = 1/ssbp.getSimp(sumRows);//The observed estimate using the Simpson Index. Can be changed to use other indexes of diversity.
- for(int i = 0; i < cols; i++)
- {
- vector<double> newVec;
- for(int j = 0; j < rows; j++)
- newVec.push_back(vecCalc.sumElements(species.at(j))-species.at(j).at(i));
- pVals.push_back(cols*st-((cols-1)/ssbp.getSimp(newVec)));
- }
-
- double mean = vecCalc.mean(pVals);
- double stErr = vecCalc.stError(pVals);//stErr = standard error
- TDTable table;
- double confidence = .95;
- double confLimit;
- cout << "Confidence Level (.8, .9, .95, .98, .99, .998, .999): ";
- cin >> confidence;
- double confLevels[] = {.80,.90,.95,.98,.99,.998,.999};
- for(int i = 0; i < 7; i++)
- if(confidence == confLevels[i])
- {
- confLimit = table.getConfLimit(cols-2,i);
- i = 7;
- }
-
- //Statistical Analysis
- cout << "Lower limit = " << mean - confLimit*stErr << "\n";
- cout << "Upper limit = " << mean + confLimit*stErr << "\n";
- cout << "Observed estimate = " << st << "\n\n";
- cout << "Jackknifed estimate = " << mean << "\n";
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Jackknifing class Function doJK. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the Jackknifing class function doJK. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-void KS2SampleTest::doKSTest(vector<double> abun1, vector<double> abun2)//abun1 = 1st vector of abundances, abun2 = 2nd vector of abundances
-{ try {
- VecCalc vecCalc;
- double numNZ1 = vecCalc.numNZ(abun1);//Number of nonzero elements in abun1
- double numNZ2 = vecCalc.numNZ(abun2);//Number of nonzero elements in abun2
- abun1 = vecCalc.quicksort(abun1);//Sorts abun1
- abun2 = vecCalc.quicksort(abun2);//Sorts abun2
- abun1 = vecCalc.genRelVec(abun1);//Generates the relative vector for abun1
- abun2 = vecCalc.genRelVec(abun2);//Generates the relative vector for abun2
-
- abun1 = vecCalc.genCVec(abun1);//Generates the cumulative vector for abun1
- abun2 = vecCalc.genCVec(abun2);//Generates the cumulative vector for abun2
-
- double maxDiff = vecCalc.findMaxDiff(abun1, abun2);
- double DStatistic = maxDiff*numNZ1*numNZ2;
-
- cout << "Null Hypothesis = There is no difference.\n";
- cout << "D-Statistic = " << DStatistic << "\n";
-
- double a = pow((numNZ1 + numNZ2)/(numNZ1*numNZ2),.5);
- double pVal = exp(-2*pow(maxDiff/a,2));
-
- if(numNZ1 > 25 && numNZ2 > 25) //If the sample sizes are both bigger than 25.
- cout << "P-Value = " << pVal << "\n\n";
- else
- {
- cout << "D-Statistic must be higher than the critical value to reject the null hypothesis.\n" ;
- cout << "90% Confidence Critical Value = " << 1.22*a*numNZ1*numNZ2 << "\n";
- cout << "95% Confidence Critical Value = " << 1.36*a*numNZ1*numNZ2 << "\n";
- }
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the KS2SampleTest class Function doKSTest. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the KS2SampleTest class function doKSTest. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-
-/***********************************************************************/
-
-void QStatistic::doQStat(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- vector<double> cVec = vecCalc.genCSVec(vec);
- vector<int> q = vecCalc.findQuartiles(cVec);//q.at(0) is the index of the first quartile; q.at(1) is the index of the second quartile.
- vector<double> nDupVec = vecCalc.remDup(vec);//nDupVec only contains one of every unique element in cVec.
- double Q;
- if(q.at(0) != 0)//The case if neither quartile is 0 or 1
- Q = (.5*(cVec.at(q.at(0))-cVec.at(q.at(0)-1)) + (cVec.at(q.at(1)-1)-cVec.at(q.at(0))) + .5*(cVec.at(q.at(1))-cVec.at(q.at(1)-1)))/log(nDupVec.at(nDupVec.size()-1-q.at(1))/nDupVec.at(nDupVec.size()-1-q.at(0)));
- else if(q.at(0) == 0 && (q.at(1) == 0 || q.at(1) == 1))//The case if the quartiles are both at index 0 or one is at 0 and the other at 1.
- Q = (.5*cVec.at(0) + .5*(cVec.at(1)-cVec.at(0)))/log(nDupVec.at(nDupVec.size()-2)/nDupVec.at(nDupVec.size()-1));
- else if(q.at(0) == 0 && q.at(1) > 1) //The case if the lower quartile is at index 0 and upper quartile index is above index 1.
- Q = (.5*cVec.at(0) + (cVec.at(q.at(1)-1)-cVec.at(q.at(0))) + .5*(cVec.at(q.at(1))-cVec.at(q.at(1)-1)))/log(nDupVec.at(nDupVec.size()-1-q.at(1))/nDupVec.at(nDupVec.size()-1));
-
- cout << "Q = " << Q << "\n";
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the QStatistic class Function doQStat. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the QStatistic class function doQStat. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double SSBPDiversityIndices::getShan(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- double nz = vecCalc.numNZ(vec);
- double nSum = vecCalc.sumElements(vec);
- double H = 0;
- for(int i = 0; i < nz; i++)
- H += vec.at(i)/nSum*log(vec.at(i)/nSum);
- H *= -1;
- return H;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SSBPDiversityIndices class Function getShan. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SSBPDiversityIndices class function getShan. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double SSBPDiversityIndices::getSimp(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- double nSum = vecCalc.sumElements(vec);
- double D = 0;
- for(int j = 0; j < vec.size(); j++)
- D += vec.at(j)*(vec.at(j)-1)/(nSum*(nSum-1));
- return D;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SSBPDiversityIndices class Function getSimp. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SSBPDiversityIndices class function getSimp. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-double SSBPDiversityIndices::getBP(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- double nSum = vecCalc.sumElements(vec);
- return vecCalc.findMax(vec)/nSum;
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SSBPDiversityIndices class Function getBP. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SSBPDiversityIndices class function getBP. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}
-/***********************************************************************/
-void SSBPDiversityIndices::doSSBP(vector<double> vec)//vec = The data vector.
-{ try {
- VecCalc vecCalc;
- double nz = vecCalc.numNZ(vec);
-
- //Shannon index
- double H = getShan(vec);
- cout << "H = " << H << "\n";
- cout << "Eveness = " << H/log(nz) << "\n\n";
-
- //Simpson index
- double D = getSimp(vec);
- cout << "D diversity = " << 1/D << "\n";
- cout << "Eveness = " << 1/D/nz << "\n\n";
-
- //Berger-Parker index
- double BP = getBP(vec);
- cout << "BP index = " << BP << "\n\n";
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SSBPDiversityIndices class Function doSSBP. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SSBPDiversityIndices class function doSSBP. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-}