1 /* Mixture Dirichlet distributions
2  */
3 #ifndef eslMIXDCHLET_INCLUDED
4 #define eslMIXDCHLET_INCLUDED
5 
6 #include "esl_config.h"
7 
8 #include "esl_random.h"
9 #include "esl_fileparser.h"
10 
11 /* ESL_MIXDCHLET
12  *
13  * A mixture Dirichlet density, usually used as a prior
14  * for a multinomial model (turning count vectors into probability
15  * parameters).
16  */
17 typedef struct {
18   /*::cexcerpt::dirichlet_mixdchlet::begin::*/
19   double  *q;			/* mixture coefficients q[0..Q-1]           */
20   double **alpha;               /* Dirichlet params alpha[0..Q-1][0..K-1]   */
21   int      Q;			/* number of mixtures, e.g. 9 for Sjolander */
22   int      K;			/* alphabet size, e.g. 20                   */
23 
24   double  *postq;                /* temp space 0..Q-1: for posterior P(k|c) for example */
25   /*::cexcerpt::dirichlet_mixdchlet::end::*/
26 } ESL_MIXDCHLET;
27 
28 
29 extern ESL_MIXDCHLET *esl_mixdchlet_Create(int Q, int K);
30 extern void           esl_mixdchlet_Destroy(ESL_MIXDCHLET *dchl);
31 
32 extern double         esl_mixdchlet_logp_c      (ESL_MIXDCHLET *dchl, double *c);
33 extern int            esl_mixdchlet_MPParameters(ESL_MIXDCHLET *dchl, double *c, double *p);
34 
35 
36 extern int            esl_mixdchlet_Fit(double **c, int N, ESL_MIXDCHLET *dchl, double *opt_nll);
37 extern int            esl_mixdchlet_Sample(ESL_RANDOMNESS *rng, ESL_MIXDCHLET *dchl);
38 
39 extern int            esl_mixdchlet_Read(ESL_FILEPARSER *efp, ESL_MIXDCHLET **ret_dchl);
40 extern int            esl_mixdchlet_Write    (FILE *fp, const ESL_MIXDCHLET *dchl);
41 extern int            esl_mixdchlet_WriteJSON(FILE *fp, const ESL_MIXDCHLET *dchl);
42 
43 extern int            esl_mixdchlet_Validate(const ESL_MIXDCHLET *dchl, char *errmsg);
44 extern int            esl_mixdchlet_Compare(const ESL_MIXDCHLET *d1, const ESL_MIXDCHLET *d2, double tol);
45 extern int            esl_mixdchlet_Dump(FILE *fp, const ESL_MIXDCHLET *dchl);
46 
47 #endif // eslMIXDCHLET_INCLUDED
48