]> git.donarmstrong.com Git - mothur.git/blob - shannonrange.cpp
2b8468bd2d096f71c6c33289d371829d0a69dcba
[mothur.git] / shannonrange.cpp
1 //
2 //  shannonrange.cpp
3 //  Mothur
4 //
5 //  Created by SarahsWork on 1/3/14.
6 //  Copyright (c) 2014 Schloss Lab. All rights reserved.
7 //
8
9 #include "shannonrange.h"
10
11 /***********************************************************************/
12
13 EstOutput RangeShannon::getValues(SAbundVector* rank){
14         try {
15         data.resize(3,0);
16         
17         double commSize = 1e20;
18         double sampleSize = rank->getNumSeqs();
19         
20         double aux = ceil(pow(sampleSize+1, (1/(double)3)));
21         double est0 = rank->get(1)+1;
22         if (aux > est0) { est0 = aux; } //est0 = max(rank->get(1)+1, aux)
23         
24         vector<double> ests;
25         double numr = 0.0;
26         for (int i = 1; i < rank->getNumBins()-1; i++) {
27             
28             if (m->control_pressed) { break; }
29             
30             int abund = rank->get(i);
31             
32             if (abund != 0) {
33             
34                 int abundNext = rank->get(i+1);
35                 if (abundNext == 0) {  numr = aux;  }
36                 else {
37                     if (abundNext+1 > aux) { numr = abundNext+1; } //numr = max(abundNext+1, aux)
38                     else { numr = aux; }
39                 }
40                 double denr = aux;
41                 if (abund > aux) { denr = abund; } //denr = max(abund, aux)
42                 ests.push_back((abund+1)*numr/denr);
43              }
44         }
45         numr = aux;
46         
47                 
48                 if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; }
49                 
50                 return data;
51         }
52         catch(exception& e) {
53                 m->errorOut(e, "RangeShannon", "getValues");
54                 exit(1);
55         }
56 }
57 /***********************************************************************/