]> git.donarmstrong.com Git - mothur.git/blob - chao1.cpp
Initial revision
[mothur.git] / chao1.cpp
1 /*
2  *  chao1.cpp
3  *  Dotur
4  *
5  *  Created by Sarah Westcott on 1/7/09.
6  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "chao1.h"
11
12 /***********************************************************************/
13 EstOutput Chao1::getValues(SAbundVector* rank){
14         try {
15                 data.resize(3,0);
16         
17                 double sobs = (double)rank->getNumBins();
18         
19                 double singles = (double)rank->get(1);
20                 double doubles = (double)rank->get(2);
21                 double chaovar = 0.0000;
22         
23                 double chao = sobs + pow(singles,2)/(2*(doubles+1)) - (singles*doubles/(2*pow(doubles+1,2)));
24         
25                 if(doubles==0){chaovar=0;}
26                 else{
27                         double g=singles/doubles;
28                         chaovar = doubles*(0.25*pow(g,4)+pow(g,3)+0.5*pow(g,2));
29                 }
30
31         
32                 double chaohci, chaolci;
33         
34                 if(chao==sobs){
35                         double ci = 1.96*pow(chaovar,0.5);
36                         chaolci = chao-ci;//chao lci
37                         chaohci = chao+ci;//chao hci
38                 }
39                 else{
40                         double denom = pow(chao-sobs,2);
41                         double c = exp(1.96*pow((log(1+chaovar/denom)),0.5));
42                         chaolci = sobs+(chao-sobs)/c;//chao lci
43                         chaohci = sobs+(chao-sobs)*c;//chao hci
44                 }
45                 
46                 data[0] = chao;
47                 data[1] = chaolci;
48                 data[2] = chaohci;
49
50             if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; }
51                 if (isnan(data[1]) || isinf(data[1])) { data[1] = 0; }
52                 if (isnan(data[2]) || isinf(data[2])) { data[2] = 0; }
53                 
54                 return data;
55         }
56         catch(exception& e) {
57                 cout << "Standard Error: " << e.what() << " has occurred in the Chao1 class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
58                 exit(1);
59         }
60         catch(...) {
61                 cout << "An unknown error has occurred in the Chao1 class function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
62                 exit(1);
63         }       
64 };
65
66 /***********************************************************************/