1 /* Hyperexponential (mixture exponential) distributions.
2  */
3 #ifndef eslHYPEREXP_INCLUDED
4 #define eslHYPEREXP_INCLUDED
5 #include "esl_config.h"
6 
7 #include "esl_fileparser.h"
8 #include "esl_histogram.h"
9 #include "esl_random.h"
10 
11 typedef struct {
12   double *q;			/* mixture coefficients   [0..K-1]*/
13   double *lambda;		/* scale params           [0..K-1]*/
14   double *wrk;			/* tmp K-vector, for logpdf calc  */
15   double  mu;			/* location (x offset) parameter  */
16   int     K;			/* # of components                */
17   char   *fixlambda;		/* TRUE to constrain a lambda val */
18   int     fixmix;		/* TRUE to constrain the q's      */
19 } ESL_HYPEREXP;
20 
21 
22 extern ESL_HYPEREXP *esl_hyperexp_Create(int K);
23 extern void          esl_hyperexp_Destroy(ESL_HYPEREXP *h);
24 extern int           esl_hyperexp_Copy(ESL_HYPEREXP *src, ESL_HYPEREXP *dest);
25 extern int           esl_hyperexp_FixedUniformMixture(ESL_HYPEREXP *h);
26 extern int           esl_hyperexp_SortComponents(ESL_HYPEREXP *h);
27 extern int           esl_hyperexp_Write(FILE *fp, ESL_HYPEREXP *hxp);
28 extern int           esl_hyperexp_Dump(FILE *fp, ESL_HYPEREXP *hxp);
29 
30 extern int           esl_hyperexp_Read(ESL_FILEPARSER *ef, ESL_HYPEREXP **ret_hxp);
31 extern int           esl_hyperexp_ReadFile(char *filename, ESL_HYPEREXP **ret_hxp);
32 
33 
34 extern double  esl_hxp_pdf    (double x, ESL_HYPEREXP *h);
35 extern double  esl_hxp_logpdf (double x, ESL_HYPEREXP *h);
36 extern double  esl_hxp_cdf    (double x, ESL_HYPEREXP *h);
37 extern double  esl_hxp_logcdf (double x, ESL_HYPEREXP *h);
38 extern double  esl_hxp_surv   (double x, ESL_HYPEREXP *h);
39 extern double  esl_hxp_logsurv(double x, ESL_HYPEREXP *h);
40 extern double  esl_hxp_invcdf (double p, ESL_HYPEREXP *h);
41 
42 extern double  esl_hxp_generic_pdf   (double x, void *params);
43 extern double  esl_hxp_generic_cdf   (double x, void *params);
44 extern double  esl_hxp_generic_surv  (double x, void *params);
45 extern double  esl_hxp_generic_invcdf(double x, void *params);
46 
47 extern int esl_hxp_Plot(FILE *fp, ESL_HYPEREXP *h,
48 			double (*func)(double x, ESL_HYPEREXP *h),
49 			double xmin, double xmax, double xstep);
50 
51 
52 extern double esl_hxp_Sample(ESL_RANDOMNESS *r, ESL_HYPEREXP *h);
53 
54 extern int esl_hxp_FitGuess   (double *x, int n, ESL_HYPEREXP *h);
55 extern int esl_hxp_FitComplete(double *x, int n, ESL_HYPEREXP *h);
56 
57 extern int esl_hxp_FitGuessBinned   (ESL_HISTOGRAM *g, ESL_HYPEREXP *h);
58 extern int esl_hxp_FitCompleteBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h);
59 
60 
61 #endif /*eslHYPEREXP_INCLUDED*/
62 
63