1 //
2 //  diversityutils.hpp
3 //  Mothur
4 //
5 //  Created by Sarah Westcott on 4/11/19.
6 //  Copyright © 2019 Schloss Lab. All rights reserved.
7 //
8 
9 #ifndef diversityutils_hpp
10 #define diversityutils_hpp
11 
12 #define HI_PRECISION 1.0e-12
13 #define LO_PRECISION 1.0e-7
14 
15 #define V_MULT          25.0
16 #define PENALTY           1.0e20
17 #define SLICE      10
18 
19 
20 #include "diversitycalc.h"
21 
22 
23 /***********************************************************************/
24 
25 class DiversityUtils   {
26 
27 public:
DiversityUtils(string met)28     DiversityUtils(string met){ m = MothurOut::getInstance(); method = met; }
29 
30     #ifdef USE_GSL
31 
32     double logLikelihood(int n, double dAlpha, double dBeta);
33     double logLikelihood(int n, double dAlpha, double dBeta, double);
34     bool bessel(double* pdResult, int n, double dAlpha, double dBeta);
35     double sd(int n, double dAlpha, double dBeta);
36     bool bessel(double* pdResult, int n, double dAlpha, double dBeta, double);
37     double sd(int n, double dAlpha, double dBeta, double);
38     int minimiseSimplex(gsl_vector* ptX, size_t nP, void* pvData, double (*f)(const gsl_vector*, void* params), double, double, double);
39     vector<double> mcmc(t_Params *ptParams, t_Data *ptData, gsl_vector* ptX, void* f (void * pvInitMetro));
40     vector<double> outputResults(gsl_vector *ptX, t_Data *ptData, double (*f)(const gsl_vector*, void* params));
41     void getProposal(gsl_rng *ptGSLRNG, gsl_vector *ptXDash, gsl_vector *ptX, int* pnSDash, int nS, t_Params *ptParams);
42     int solveF(double x_lo, double x_hi, void* params, double tol, double *xsolve);
43     int solveF(double x_lo, double x_hi, double (*f)(double, void*), void* params, double tol, double *xsolve);
44     double logLikelihoodRampal(int n, double dMDash, double dV);
45     double logLikelihoodQuad(int n, double dMDash, double dV);
46     double logLikelihoodRampal(int n, double dMDash, double dV, double dNu);
47     double logLikelihoodQuad(int n, double dMDash, double dV, double dNu);
48     double calcMu(void *ptLNParams);
49     int fitSigma(vector<double>, vector<double>, int fi, t_Params *ptParams, t_Data *ptData, gsl_vector* ptX, void* f (void * pvInitMetro));
50 
51     #endif
52 
53     double f2X(double x, double dA, double dB, double dNDash);
54     double fX(double x, double dA, double dB, double dNDash);
55     double chao(t_Data *ptData);
56     double logStirlingsGamma(double dZ);
57 
58     void loadAbundance(t_Data *ptData, SAbundVector* rank);
59     void freeAbundance(t_Data *ptData);
60 
61 
62 
63 
64     MothurOut* m;
65 
66 private:
67 
68     Utils util;
69 
70     string method;
71 
72     acceptRatioPos findBest(vector<double> accept);
73 
74 
75 
76 };
77 
78 /***********************************************************************/
79 
80 
81 
82 #endif /* diversityutils_hpp */
83